2021-06-14

2021/6/14
bugku
web21
1.301重定向
2.url,base64解码
3.php代码审计

一开始看到id=1以为是sql注入,后经多次尝试发现不是,经过提示在注释中找到 1p.html
访问后发现会直接转跳到bugku论坛,查看发现301重定向

ps(301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。301重定向主要是将需要转移的网址重定向另一个新的网址上,并且是永久性转移。)

然后尝试用burpsuite抓包访问,找到了一串乱码,先url解码再base64解码出现php代码如下
http://ctf.ssleye.com/url.html
http://ctf.ssleye.com/base64.html

if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.')) //a中不能有.
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r'); //读取a为名字的文件给data
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 !!!";
}


?>

用到的函数含义:
1.stripos() 函数:查找字符串在另一字符串中第一次出现的位置(不区分大小写)
2.file_get_contents; readfile看到这两个可以想到伪协议
常用伪协议:
php://input写入文件, 数据在body那边传过去,可以用GET,也可以用 POST 传过去
php://filter读取文件
详见https://blog.csdn.net/fastergohome/article/details/102514264
3.strlen($b)>5 b的长度大于5

4.substr($b,0,1)就是取b参数的第一个字符
5.ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据

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) //重点语句

这句含义大概
1.data内容要为bugku is a nice plateform!也就是a的文件内容为bugku is a nice plateform!可以用php伪协议php://input写入文件数据在body那边传过去
也就是==> a=php://input且在bp body处加上bugku is a nice plateform!
2.id==0 id弱等于0,但是看大佬博客说没有这么简单前边还规定了等0的话,!0=1,导致重定向,那么就不能是数字0可以是字符0或者另一种方法id参数为字符时,比较时会转为0 所以就有 id=a
3. strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4b长度大于5; 字符串1114要与字符串111连接变量 $b 的第一个字符构成的正则表达式匹配,但是b的第一个字符不可以为4;eregi可以用空字符来绕过,他匹配到空字符自动停止,url中的空字符自然是%00
构造
id=a&a=php://input&b=%0012345
bp下方加上bugku is a nice plateform!
即可得flag

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值