EASY calcc的学习
今天不碰到带了一个从来没有遇到的题型,特地在这里记录一下。
向往常一样打开,靶场竟然有输入框:
我的第一反应是这个是一道sql注入于是尝试输入字母测试一下看看能不能输入:
很好,不行(微笑微笑),肯定是没有这麽简单,那就看看源码吧:
以我匮乏的html代码知识依稀可以看出,他的想法是将输入框中获得的值传入这个calc.php中进行计算。那么就战术性的查看一下这个php文件里面都是啥:
以我菜鸡的php代码阅读能力来看,这个简(bian)单(tai)的php文件把能注释的特殊符号都注释了,也不让输入字母,这就解释了我们一看是的输入错误的原因,参数无法传入,但好就好在它是以GET方式传入的,可以简单地进行参数传入。
这里题主就陷入了瓶颈,又没有纯数字的参数传递,这让我怎莫办,但是向上翻我看到一句话:
hhhhhh,他这不就提醒了我吗,百度上无脑搜一下:
假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
不错,这个waf真的是第一次见,网上说时web的一种防火墙,借用这个防火墙可以进行字符的过滤。我在网上找到了一些绕过的方法,链接就发在这里了:
深入理解SQL注入绕过WAF和过滤机制 - r00tgrok - 博客园 (cnblogs.com)
这次也真是长了姿势,原来还有这样简单的绕过过滤的机制,现在就来使用一番吧:
奥对了他把特殊符号都过滤了(😂)
这里我们借用了一个函数var_dump(),这个可以将php的命令直接执行。
接下来就是一些php的现成的函数使用scandir()扫描服务器上的所有文件但是他将特殊符号过滤了,我们只能将这个斜杠替换成ascii码在借用相应的函数进行解析了借用chr()实现对该ascii码的解析:
http://node3.buuoj.cn:28713/calc.php?%20num=var_dump(scandir(chr(47)))
看看得到的结果:
那么接下来就是扫描看看现成的flagg文件了:
这里要把scandir修改为file_get_contents这样就能查看了。
总结
这道题还是从上学期开始刷题到现在,一直没有遇到过的一道题,这个里面涉及到了一个WAF的知识点,就是主要是对输入字符的过滤,能将需要的字符进行过滤,过滤获得字符,进行处理。但是嫩果饶过他的方法居然这么简单,那就是看来,还是要加强对php的基本知识的学习。