Bootstrap

SQLMAP tamper使用场景解析

sqlmap是一款人见人爱的自动化SQL渗透工具,能够以良好的引擎发现给定URL中的可注入处,并自动化的完成注入。但是由于SQL注入的影响过于广泛,致使现代程序的防护越来越严密。sqlmap/tamper是官方给出的一些绕过脚本,可以配合渗透测试人员完成更高效更高质量的测试。

本文共分为三个部分,第一部分简要对tamper进行介绍,以及为何要使用它,如何使用;第二部分给出当前最新版本(1.2.7-26)的官方sqlmap提供的tamper脚本,第三部分以数据库为区分,给出相应数据库可使用的tamper脚本,以便使用。

Part 1

【为什么】WAF,Web Application Firewall,即网站应用级入侵防御系统,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护,有很强的输入验证功能,通过一定的判断机制检测输入的内容是否含有非法攻击语句。

为了绕过输入验证,达到预期的SQL注入目标,须对原本SQL语句进行同义改写,这种改写在很多情况下是莫名其妙的,但就是这莫名其妙的语句可以通过严密的WAF防守,达到数据库层面。更为神奇的是,数据库可以执行这段看似奇怪的SQL语句,实现预期的攻击。

【怎么做】当原始注入遇到困难时,可尝试加载相应脚本,进行绕过,说不定会有意外惊喜。在sqlmap的原命令中加入以下代码,即可使用脚本,进行更加强有力的渗透。

--tamper“脚本名称”

Part 2

sqlmap版本当前为1.2.7.20,共有57个tamper脚本,与1.0版本相比新增了19个脚本。

序号脚本名称注释
10x2char将每个编码后的字符转换为等价表达
2apostrophemask单引号替换为Utf8字符
3apostrophenullencode替换双引号为%00%27
4appendnullbyte有效代码后添加%00
5base64encode使用base64编码
6between比较符替换为between
7bluecoat空格替换为随机空白字符,等号替换为like
8chardoubleencode双url编码
9charencode将url编码
10charunicodeencode使用unicode编码
11charunicodeescape以指定的payload反向编码未编码的字符
12commalesslimit改变limit语句的写法
13commalessmid改变mid语句的写法
14commentbeforeparentheses在括号前加内联注释
15concat2concatws替换CONCAT为CONCAT_WS
16equaltolike等号替换为like
17escapequotes双引号替换为\\\\
18greatest大于号替换为greatest
19halfversionedmorekeywords在每个关键字前加注释
20htmlencodehtml编码所有非字母和数字的字符
21ifnull2casewhenisnull改变ifnull语句的写法
22ifnull2ifisnull替换ifnull为if(isnull(A))
23informationschemacomment标示符后添加注释
24least替换大于号为least
25lowercase全部替换为小写值
26modsecurityversioned空格替换为查询版本的注释
27modsecurityzeroversioned添加完整的查询版本的注释
28multiplespaces添加多个空格
29nonrecursivereplacement替换预定义的关键字
30overlongutf8将所有字符转义为utf8
31overlongutf8more以指定的payload转换所有字符
32percentage每个字符前添加%
33plus2concat将加号替换为concat函数
34plus2fnconcat将加号替换为ODBC函数{fn CONCAT()}
35randomcase字符大小写随机替换
36randomcomments/**/分割关键字
37securesphere添加某字符串
38sp_password追加sp_password字符串
39space2comment空格替换为/**/
40space2dash空格替换为–加随机字符
41space2hash空格替换为#加随机字符
42space2morecomment空格替换为/**_**/
43space2morehash空格替换为#加随机字符及换行符
44space2mssqlblank空格替换为其他空符号
45space2mssqlhash空格替换为%23%0A
46space2mysqlblank空格替换为其他空白符号
47space2mysqldash空格替换为–%0A
48space2plus空格替换为加号
49space2randomblank空格替换为备选字符集中的随机字符
50symboliclogicalAND和OR替换为&&和||
51unionalltounionunion all select替换为union select
52unmagicquotes宽字符绕过GPC
53uppercase全部替换为大写值
54varnish添加HTTP头
55versionedkeywords用注释封装每个非函数的关键字
56versionedmorekeywords使用注释绕过
57xforwardedfor添加伪造的HTTP头

Part 3

下面以数据库为区分,给出每种数据库可供选择的tamper。若同一脚本适用不同数据库,则在每个数据库中都指出。

【MySQL】

版本可用tamper编号脚本名称
4/5.0/5.510x2char
6between
9charencode
16concat2concatws
18greatest
24least
25lowercase
35randomcase
39space2comment
49space2randomblank
53uppercase
5.17bluecoat
46space2mysqlblank
5.0/5.512commalesslimit
13commalessmid
21ifnull2casewhenisnull
22ifnull2ifisnull
42space2morecomment
5.015concat2concatws
26modsecurityversioned
27modsecurityzeroversioned
4.0/5.041space2hash
5.1.5610charunicodeencode
5.1.56/5.5.1132percentage
56versionedmorekeywords
4.0.18/5.0.2219halfversionedmorekeywords
4.0.18/5.1.56/5.5.1155versionedkeywords
5.1.4143space2morehash
未指定版本14commentbeforeparentheses
40space2dash
45space2mssqlhash
47space2mysqldash

【SQLServer】

版本可用tamper编号脚本名称
2005/200010charunicodeencode
32percentage
44space2mssqlblank
20056between
9charencode
16equaltolike
25lowercase
35randomcase
39space2comment
49space2randomblank
53uppercase
2002+33plus2concat
2008+34plus2fnconcat
未指定14commentbeforeparentheses

 【Access】

版本可用tamper编号脚本名称
未指定4appendnullbyte

 【Oracle】

版本可用tamper编号脚本名称
10g6between
9charencode
14commentbeforeparentheses
18greatest
24least
25lowercase
35randomcase
39space2comment
49space2randomblank
53uppercase

 【PostgreSQL】

版本可用tamper编号脚本名称
8.3/8.4/9.06between
9charencode
18greatest
24least
25lowercase
39space2comment
49space2randomblank
53uppercase
9.032percentage
9.0.310charunicodeencode
未指定14commentbeforeparentheses
35randomcase

 【MSSQL】

版本可用tamper编号脚本名称
未指定38sp_password

 【SQLite】

版本可用tamper编号脚本名称
未指定40space2dash

 【未知适用范围】

若以上脚本未解决问题,可尝试使用一下脚本。

版本可用tamper编号脚本名称
 2apostrophemask
3apostrophenullencode
5base64encode
8chardoubleencode
11charunicodeescape
17escapequotes
20htmlencode
23informationschemacomment
28multiplespaces
29nonrecursivereplacement
30overlongutf8
31overlongutf8more
36randomcomments
37securesphere
48space2plus
50symboliclogical

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;