sqlmap --tamper 绕过WAF脚本分类整理
sqlmap --tamper 绕过WAF脚本分类整理
但很多时候还是得静下来分析过滤系统到底过滤了哪些参数,该如何绕过。
sqlmap中的tamper给我们带来了很多防过滤的脚本,非常实用,可能有的朋友还不知道怎样才能最有效的利用tamper脚本。
当然使用脚本之前需要确定的就是系统过滤了哪些关键字,比如单引号、空格、select、union、admin等等。
所以有的时候我们会发现,注入成功了但是dump不出数据,很可能是select被过滤了等等原因。
如何判断使用哪个脚本
最简单的办法就是在url参数中手工带入关键词,判断是否被过滤。
如图:
直接加个单引号被过滤,说明注入时单引号是没法用的。
空格、等于号都没有过滤,成功报错。
select被过滤。
以此类推,当sqlmap注入出现问题时,比如不出数据,就要检查对应的关键词是否被过滤。
比如空格被过滤可以使用space2comment.py,过滤系统对大小写敏感可以使用randomcase.py等等。
下面对于sqlmap的tamper参数详细讲解。
使用方法
根据实际情况,可以同时使用多个脚本,使用-v参数可以看到payload的变化。
sqlmap.py -u "http://www.target.com/test.php?id=12" --dbms mysql --tamper "space2comment,versionedmorekeywords.py" -v 3 --dbs
脚本分类说明
使用参考
目前官方提供53个绕过脚本,在平常使用中,咱们会对一些网站是否有安全防御(WAF/IDS/IPS)进行试探,可使用参数--identify-waf进行检测。下面介绍一些经常使用的tamper脚本。数据库
1、apostrophemask.py :将引号替换为UTF-8,用于过滤单引号。安全
2、base64encode.py :替换为base64编码。app
3、multiplespaces.py:围绕SQL关键字添加多个空格。dom
4、space2plus.py:用+号替换为空格。ide
5、nonrecursivereplacement.py:做为双重查询语句,用双重语句替代预约义的SQL关键字(适用于很是弱的自定义过滤器,例如将SELECT替换为空)。函数
6、space2randomblank.py:将空格替换为其余有效字符。post
7、unionalltounion.py:将UNION ALL SELECT替换为UNION SELECT。测试
8、securespher.py:追加特制的字符串。
9、space2hash.py:将空格替换为#号,并添加一个随机字符串和换行符。
10、space2mssqlblank.py(mssql):将空格替换为其余空符号。
11、spce2mssqlhash.py:将空格替换为#号,并添加一个换行符。
12、between.py:用NOT BETWEEN 0 AND 替换大于号(>),用BETWEN AND 替换等号(=)。
13、percentage.py:ASP容许在每一个字符前面添加一个%号1.
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:绕过对”>"的过滤,用GREATEEST替换大于号。
以上测试经过的数据库类型和版本:
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关键字。