9.10 BUUCTF [RoarCTF 2019]Easy Calc

大概算是RCE漏洞
但是它过滤掉了字母和很多字符 num只能传数字的话完全没有办法RCE
这里的绕过很DAY^-1...
PHP在解析变量名时会自动将空格去掉 但是"? num=1"和"?num=1"上传时是会被视为不同的 所以可以用"? num=1;..."来绕过对非数字的过滤
而后尝试 ls无果
看初始的view-source 可能是因为题目计算后回显的是计算出来的值(字符串)
而ls它没有返回值 他只是linux的命令 显示而已
这里注意PHP的一个函数
scandir:
image
也就是说 scandir在扫描完目录后会返回数组!!!
而我们完全可以用 var_dump 来打印出来!
注意 在打印数组的时候 echo是不行的 学PHP的时候就是因为echo打印数组麻烦才有了 var_dump

再有就是很多符号如'/'都被过滤了 所以我们用 chr().chr()的方法来拼接
又有个细节:
关于诸如 scandir file_get_contents 这种要传 文件路径的
直接写 scandir('...') 单双引号都可以 都要加
而用 chr拼接的话 就不能拼接外层的引号 否则会失败

最后有个注意点:
用burpsuite发送的时候 要注意将空格写为%20 否则好像bp会自动去掉 一样的达不到效果

获取flag位置的payload:

? num=1;var_dump(scandir(chr(47)))

获取flag (熟悉的file_get_contents... 以前只知道用php://input来绕过 没想到有一天还会自己用这个函数...)

? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
posted @ 2023-09-10 09:27  N0zoM1z0  阅读(8)  评论(0编辑  收藏  举报