RoarCTF Easy Calc wp

点开界面:
在这里插入图片描述
随便输入数字,抓包,发现有个php文件:
在这里插入图片描述
我们跳转看看:
在这里插入图片描述
看到了eval(),很容易想代码执行。
试着传入num参数为字符,发现:
在这里插入图片描述

方法一:

官方wp表示考点为php字符串解析绕过WAF(这做题的时候谁知道啊)
这里有一篇文章进行了详细介绍。

文章中对本题最关键的就是:
在这里插入图片描述
因此,我们可以试试用空格绕过forbidden。
经过测试之后,我发现只有将+%20放在num前面时才有用,即?+num=phpinfo()。此时有回显:
在这里插入图片描述
看来确实有代码执行。下一步就是通过函数来读取文件目录了。
我们先看看php禁用了啥函数:
在这里插入图片描述
我们常用的读取目录的php函数为scandir(),还好没被禁掉。
scandir()函数的作用为返回指定目录中的文件和目录的数组,用法如:

scandir('./');

但是在黑名单中,单引号和双引号被过滤了。
在这里插入图片描述
在这里插入图片描述
我们一般是用hexdec()bin2hex()将字符串转成16进制再转成10进制,这样就没有包含字符,就能绕过黑名单了。
hexdec()函数把十六进制转换为十进制。
bin2hex()函数把 ASCII 字符的字符串转换为十六进制值。
hex2bin()函数将十六进制转换成ASCII字符的字符串。
dechex()函数把十进制转换为十六进制。
于是,我们先得到十进制,然后用hex2bin(dechex())转回来。
/的十六进制为47。
所以我们写payload:?+num=scandir(hex2bin(dechex(47)))(尴尬的是,我测试的环境没有写出来,返回的为空的数组,很迷)
长这样
然后用file_get_contents()函数来读取文件,即可得到flag(虽然读取不到文件夹,但我用wp的语句读取到了flag,更迷了)

方法二:

利用http走私过狗,这里有一篇文章介绍了什么是http走私。我再尝试之后,发现CL-CL可用,于是我构造:
在这里插入图片描述
可以看到有phpinfo的回显,于是和刚才的流程一样,用scandir()函数读取文件目录,用readfile读取文件。即可得到flag。

发布了27 篇原创文章 · 获赞 1 · 访问量 817

猜你喜欢

转载自blog.csdn.net/weixin_44377940/article/details/102816692