本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法。之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑。有一些简单过滤很容易绕过却不能检测。虽然麻烦点,手工yyds~~。

1、大小写变种

UNION SELECT=>uNIon SElecT  

选择几个字母变换大小写,可以绕过部分不太聪明的过滤器。在sql查询中是不区分大小写的所以查询语句正常执行

2、使用SQL注释

union select=>/**/UNION/**/SELECT/**/

在每个需要使用“空格”隔开的地方将“空格”换成/**/(mysql、orcale数据库中的注释符号其他数据库同理)因为一些过滤器是检查你的每个关键词后边是不是存在“空格”。

3、使用URL编码

union select=>%75%6e%6f%69%6e  %73%65%6c%65%63%74

每次输入URL浏览器都会自动进行一次URL解码。这样我们在URL栏中输入的内容就不会出现那些被过滤的关键词了

4、使用动态查询(用数据库中的一些函数)

前提是知道有什么函数,这就需要用到前期收集信息时候了解到的数据库种类及版本了

mysql:union select=>'uni'+'on' 'sele'+'ct'

orcale:union select=>'uni'||'on'  'sel'||ect''  select=>cha(83)||cha(69)||cha(76)||cha(69)||cha(67)||cha(84)

MS_SQL:union select=>'uni''on'  'sele''ct'  select=>char(83)+char(69)+char(76)+char(69)+char(67)+char(84)

这样就可以绕过那些过滤含有完整的select或union关键词的过滤器了

5、绕过剥离关键词(套娃)

union select=>uniunionon seselectlect

可以绕过那些剥离关键词之后传入查询的过滤器当ununionion中的完整union被过滤掉之后就得到了我们想使用的关键词

6、使用空字节

union select=>%00 union select

在过滤器过滤的关键词前面加上URL编码的空字节%00即可。因为性能原因一些过滤器用的语言往往是C/C++,在C/C++中空字节代表语句的结束(过滤结束)。而SQL语句对空字节的解释则不同,它会继续执行后边的代码

有时候想要绕过注入不是单单靠一种方法就可以的(因为你想到的大部分做防护的也可能想到)可以尝试联合这几种过滤方法一起使用。如果实在不行~~ 还可以盲注嘛~~

参考《SQL注入的攻击预防》Justin Clarke

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐