攻防世界-favorite_number

打开题目,看到一些php的代码,我们来审计一下

 第一个if

($stuff === $array && $stuff[0] != 'admin') //强等于,并且首元素不等于admin

(preg_match("/^\d+$/im",$num) //必须是纯数字,并且前面的/是开启了多行匹配,加上^和$,匹配开头和结尾,合起来就是匹配每行的开头和结尾

(!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)) //过滤了很多的字符串,相当于一个黑名单

我们只要绕过这三个if,就可以执行system(),

看到了这里有个php的版本号,顺便百度了下这个php版本的漏洞,有一个整数溢出漏洞,这里就不给大家放链接了,大家自己动手找吧

漏洞就是说数组中[]里0的元素与4294967296的元素是一样的,所以可以进行绕过第一个if,第二个if我们用到%0a进行换行,这样就只能匹配到第一行,从而绕过,

可以看到成功返回数值了,我们进行抓包修改数据

成功执行,我们进行查看flag

这里被第三个if拦截掉了,我们用反引号进行绕过

 拿到flag。

本人菜鸟一枚,参考了下大佬的思路。

おすすめ

転載: blog.csdn.net/m0_47571887/article/details/121425768