相信我,坚持就一定会失败!
打开之后是代码审计,P1是原题,P2是我放在编辑器里面(能让大家看全)
审计一下发现关键问题
首先我们要给cmd GET值,然后最后eval()函数会执行cmd中的东西。
我们来了解一下eval()函数,这个函数的用法就是将()中的字符串直接当作php代码执行。
但是!前面我看分析看出有一个过滤机制,它将很多函数都过滤了,它都过滤了什么呢?
除去过滤掉的函数,只剩下了print()。
惊不惊喜,意不意外?
所以是需要想办法绕过判断机制。
所以在这里我们需要用到变量拆解函数,然后URL编码即可!
所以构造如下请求:
$a=”syste”;$b=”m('ls');”;$c=$a.$b;eval($c);
经过URL转码就是
%24a%3D%22syste%22%3B%24b%3D%22m('ls')%3B%22%3B%24c%3D%24a.%24b%3Beval(%24c)%3B
然后一路顺风,getflag
(似乎直接访问flag也可以哦,这个非预期解就很厉害了!)