打开后发现是一道php代码审计题
1.首先是个判断,既要数组强等,又要首元素不为admin
2.做了一个正则匹配,要求字符串全为数字,大小写不敏感,跨行检测
3.写了一个黑名单,把常用的都排除了
数组判断
这个第一个绕过就让人头疼
想了想他这提示了php5.5.9,那应该是从php5.5.9这个版本的本身漏洞着手
查了查有数组溢出漏洞
参考:
PHP的信息安全(入侵获取$flag)的题目【Q2】
PHP数组的key溢出问题
看了其他大佬的wp,发现这个php5.5.9版本的数组溢出值为4294967296,当数值溢出的时候就会覆盖0键值(我没有php5.5.9的环境,用5.4测试反正是没过)
然后构造payload
stuff[4294967296]=admin&stuff[1]=user&num=123
成功绕过了
数字检测
然后是数字检测
查了查
跨行检测可以绕过
用换行符%0a
payload如下:
stuff[4294967296]=admin&stuff[1]=user&num=123%0als
这里发现用hackbar没有用,我们可以用burp来试试。
hackbar不能成功的原因是浏览器会自动在换行符%0a前面加上回车符%0d,凑成%0d%0a,使绕过失败。
第二个条件
最后是命令执行
查了查
显示有如下的办法
我们可以用tac
文件则有两个比较好用的方法
方法1
用inode
索引节点
找的flag的inode
读取flag
payload如下:
stuff[4294967296]=admin&stuff[1]=user&num=123%0atac ` find / -inum 23337141`
反引号的命令,首先将反引号内的命令执行一次,然后再将已经执行过的命令得到的结果再执行一次
方法2
输出到文件里
然后执行文件
得到flag