bugku web21 WriteUp

bugku平台更新后的web21,作者:御结冰城

点开链接发现进行了跳转

在这里插入图片描述

查看源代码,发现注释中有一个1p.html页面,尝试打开发现自动跳转到了bugku首页,用burpsuite抓包或者用view-source查看源码。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="Javascript">
<!--
var Words ="%3Cscript%3Ewindow.location.href%3D'http%3A%2F%2Fwww.bugku.com'%3B%3C%2Fscript%3E%20%0A%3C!--JTIyJTNCaWYoISUyNF9HRVQlNUInaWQnJTVEKSUwQSU3QiUwQSUwOWhlYWRlcignTG9jYXRpb24lM0ElMjBoZWxsby5waHAlM0ZpZCUzRDEnKSUzQiUwQSUwOWV4aXQoKSUzQiUwQSU3RCUwQSUyNGlkJTNEJTI0X0dFVCU1QidpZCclNUQlM0IlMEElMjRhJTNEJTI0X0dFVCU1QidhJyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJ2InJTVEJTNCJTBBaWYoc3RyaXBvcyglMjRhJTJDJy4nKSklMEElN0IlMEElMDllY2hvJTIwJ25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJyUzQiUwQSUwOXJldHVybiUyMCUzQiUwQSU3RCUwQSUyNGRhdGElMjAlM0QlMjAlNDBmaWxlX2dldF9jb250ZW50cyglMjRhJTJDJ3InKSUzQiUwQWlmKCUyNGRhdGElM0QlM0QlMjJidWdrdSUyMGlzJTIwYSUyMG5pY2UlMjBwbGF0ZWZvcm0hJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuKCUyNGIpJTNFNSUyMGFuZCUyMGVyZWdpKCUyMjExMSUyMi5zdWJzdHIoJTI0YiUyQzAlMkMxKSUyQyUyMjExMTQlMjIpJTIwYW5kJTIwc3Vic3RyKCUyNGIlMkMwJTJDMSkhJTNENCklMEElN0IlMEElMDklMjRmbGFnJTIwJTNEJTIwJTIyZmxhZyU3QioqKioqKioqKioqJTdEJTIyJTBBJTdEJTBBZWxzZSUwQSU3QiUwQSUwOXByaW50JTIwJTIybmV2ZXIlMjBuZXZlciUyMG5ldmVyJTIwZ2l2ZSUyMHVwJTIwISEhJTIyJTNCJTBBJTdEJTBBJTBBJTBBJTNGJTNF--%3E" 
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();
// -->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>

发现执行了一个函数,url解码(可以用浏览器自带的控制台直接把语句执行一遍,也可以用burpsuite自带的decoder)查看函数内容。

"<script>window.location.href='http://www.bugku.com';</script> 
<!--JTIyJTNCaWYoISUyNF9HRVQlNUInaWQnJTVEKSUwQSU3QiUwQSUwOWhlYWRlcignTG9jYXRpb24lM0ElMjBoZWxsby5waHAlM0ZpZCUzRDEnKSUzQiUwQSUwOWV4aXQoKSUzQiUwQSU3RCUwQSUyNGlkJTNEJTI0X0dFVCU1QidpZCclNUQlM0IlMEElMjRhJTNEJTI0X0dFVCU1QidhJyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJ2InJTVEJTNCJTBBaWYoc3RyaXBvcyglMjRhJTJDJy4nKSklMEElN0IlMEElMDllY2hvJTIwJ25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJyUzQiUwQSUwOXJldHVybiUyMCUzQiUwQSU3RCUwQSUyNGRhdGElMjAlM0QlMjAlNDBmaWxlX2dldF9jb250ZW50cyglMjRhJTJDJ3InKSUzQiUwQWlmKCUyNGRhdGElM0QlM0QlMjJidWdrdSUyMGlzJTIwYSUyMG5pY2UlMjBwbGF0ZWZvcm0hJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuKCUyNGIpJTNFNSUyMGFuZCUyMGVyZWdpKCUyMjExMSUyMi5zdWJzdHIoJTI0YiUyQzAlMkMxKSUyQyUyMjExMTQlMjIpJTIwYW5kJTIwc3Vic3RyKCUyNGIlMkMwJTJDMSkhJTNENCklMEElN0IlMEElMDklMjRmbGFnJTIwJTNEJTIwJTIyZmxhZyU3QioqKioqKioqKioqJTdEJTIyJTBBJTdEJTBBZWxzZSUwQSU3QiUwQSUwOXByaW50JTIwJTIybmV2ZXIlMjBuZXZlciUyMG5ldmVyJTIwZ2l2ZSUyMHVwJTIwISEhJTIyJTNCJTBBJTdEJTBBJTBBJTBBJTNGJTNF-->"

里面有个注释,base64解码后再通过url解码,得到源码

";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 !!!";
}
?>

根据源码我们得到以下几个条件:

  1. !$_GET['id'] 应该为true,否则会跳转到hello.php?id=1这个页面

  2. $a中不能含有"."

  3. $a文件通过file_get_contents读入到$data,并且$a文件到内容为"bugku is a nice plateform!"

  4. $id==0,这似乎与第一点相矛盾

  5. $b的长度大于5

  6. $b的第一个字符提取出来,与"111"进行拼接后,满足正则匹配

  7. $b的第一个字符不能是4

首先来看第1点第4点,这个是对$id进行限制,$id如果为0的话第1个条件就不满足了,但是注意在比较$id的时候用的是而不是=

==在比较的时候,会将两个变量转换为相同的类型,再比较

===在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

这里可以让$id可以为0e123(会当成科学计数法进行转换),可以为0abc,或者就直接为abc,可以自行百度一下php弱类型

第2第3点条件是针对于$a的, 读取的文件名中不能包含".",并且$a表示的文件中的内容为"bugku is a nice plateform!"。我们可以看到该题目是通过file_get_contents函数进行读取的文件内容,这个函数可以通过php伪协议(php://input)去绕过。

php://input 是个可以访问请求的原始数据的只读流.CTF中经常使用file_get_contents获取php://input内容(通过POST数据),需要开启allow_url_include,并且当enctype="multipart/form-data"的时候 php://input是无效的。
我们令$a=php://input,然后将"bugku is a nice plateform!"通过POST方法进行传递。

接下来看最后三点约束,首先$b的长度大于5,然后通过eregi函数进行正则匹配,这个函数作用是:不区分大小写的正则表达式匹配。此函数在PHP 5.3.0中已弃用,在PHP 7.0.0中已删除。
函数原型为eregi ( string $pattern , string $string , array &$regs = ? ) : int。第一个参数是匹配模式,根据第7点条件,$b的第一个字符不能是4,但是还得满足eregi的正则匹配,所以这里用一个通配符来绕过,可以让$b.12345(“111”.substr( b , 0 , 1 ) 拼 接 后 为 " 111. " , " . " 表 示 任 意 单 个 字 符 , 匹 配 成 功 ) , 或 者 ‘ ∗ 12345 ‘ ( " 111 " . s u b s t r ( b,0,1)拼接后为"111.","."表示任意单个字符,匹配成功),或者`*12345`("111".substr( b,0,1)"111."".")12345"111".substr(b,0,1)拼接后为"111*","*“表示前面可以出现0个或者多个"111”,更多细节请百度正则表达式)。

最后的payload为?id=0e123&a=php://input&b=.12345, 并将"bugku is a nice plateform!"通过POST方法传递。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值