SQLMap自带绕过脚本tamper的讲解
sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改,还可以使用--tamper参数对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替代攻击载荷字符编码的方式来绕过WAF的检测规则。
sqlmap.py xxxx --tamper ”模块名“
目前官方提供53个绕过脚本
priority定义脚本的优先级,用于有多个tamper脚本的情况。
dependencies函数声明该脚本使用/不适用的范围,可以为空。
在日常使用中,我们会对一些网站是否有安全防护(WAF/IDS/IPS)进行试探,可以使用参数--identify-waf进行检测。下面介绍一些常用的tamper脚本。
1、apostrophemask.py:将引号替换为UTF-8,用于过滤单引号
2、base64encode.py:替换为base64编码
3、multiplespaces.py:围绕SQL关键字添加多个空格
4、space2plus.py:用+号替换为空格
5、nonrecursivereplacement.py:作为双重查询语句,用双重语句替代预定义的SQL关键字(适用于非常弱的自定义过滤器,例如将SELECT替换为空)
6、space2randomblank.py:将空格替换为其他有效字符
7、unionalltounion.py:将UNION ALL SELECT替换为UNION SELECT
8、securesphere.py:追加特制的字符串
9、space2hash.py:将空格替换为#号,并添加一个随机字符串和换行符
10、space2mssqlblank.py(mssql):将空格替换为其他空符号
11、spce2mssqlhash.py:将空格替换为#号,并添加一个换行符
12、between.py:用NOT BETWEEN 0 AND替换大于号(>),用BETWEN AND替换等号(=)
13、percentage.py:ASP允许在每个字符前面添加一个%号
14、sp_password.py:从DBMS日志的自动模糊处理的有效载荷中追加sp_password
15、charencode.py:对给定的Payload全部字符使用URL编码(不处理已经编码的字符)
16、randomcase.py:随机大小写
17、charunicodeencode.py:字符串unicode编码
18、space2comment.py:将空格替换为/**/
19、equaltolike.py:将等号替换为like
20、greatest.py:绕过对“>”的过滤,用GREATEST替换大于号
以上测试通过的数据库类型和版本:
mysql4、mysql5.0和mysql5.5
orcale10g
postgresql8.3、postgresql 8.4和postgresql9.0
21、ifnull2ifisnull.py:绕过对IFNULL的过滤,替换类似IFNULL(A,B)为IF(ISNULL(A),B,A)
测试通过的数据库类型和版本为MySQL 5.0和MySQL 5.5
22、modsecurityversioned.py:过滤空格,使用MySQL内联注释的方式进行注入
测试通过的数据库类型和版本为MySQL5.0
23、space2mysalblank.py:将空格替换为其它空白符号(适用于MySQL)
测试通过的数据库类型和版本为MySQL5.1
24、modesecurityzeroversioned.py:使用MySQL内联注释的方式(/*!00000*/)进行注入
测试通过的数据库类型和版本为MySQL 5.0
25、space2mysqldash.py:将空格替换为--,并添加一个换行符
26、bluecoat.py:在SQL语句之后用有效的随机空白符替换空格符,随后用LIKE替换等于号
测试通过的数据库类型和版本为MySQL5.1和SGOS
27、versionedkeywords.py:注释绕过
28、halfversionedmorekeywords.py:当数据库为MySQL时绕过防火墙,在每个关键字之前添加MySQL版本注释
测试通过的数据库类型和版本为MySQL 4.0.18和MySQL 5.0.22
29、space2morehash.py:将空格替换为#号,并添加一个随机字符串和换行符
测试通过的数据库类型和版本为MySQL5.1.14
30、apostrophenullencode.py:用非法双字节unicode字符替换单引号
31、appendnullbyte.py:在有效负荷的结束位置加载零字节字符编码
32、chardoubleeencode.py:对给定的Payload全部字符使用双重URL编码(不处理已编码的字符)
33、unmagicquotes.py:用一个多字节组合(%bf%27)和末尾通用注释也一起替换空格
34、randomcomments.py:用/**/分割SQL关键字
虽然SQLMAP自带的tamper可以做很多事情,但在实际环境中,往往比较复杂,可能会遇到很多情况,tamper不可能很全面地应对各种环境。