官方http://sqlmap.org/

sqlmap脚本介绍

sqlmap的脚步都在下面的文件夹里面

1
/usr/share/sqlmap/tamper

在这里插入图片描述

在这个博客有脚本的分类

https://blog.csdn.net/whatday/article/details/54774043

脚本的作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
apostrophemask.py-用其UTF-8全角字符替换撇号(')(例如'->%EF%BC%87)
apostrophenullencode.py-用非法的双unicode替换撇号(')(例如'->%00%27)
appendnullbyte.py-在有效载荷的末尾附加(访问)NULL字节字符(%00)
base64encode.py-Base64对给定有效载荷中的所有字符进行编码
between.py- 替换较大比运算符('>')带有'NOT BETWEEN 0 AND#',等于运算符('=')与'BETWEEN#AND#'
bluecoat.py-用有效的随机空白字符替换SQL语句后的空格字符。然后用运算符LIKE替换字符'='
chardoubleencode.py-双重URL编码给定有效负载中的所有字符(未处理已编码)(例如SELECT->%2553%2545%254C%2545%2543%2554)
charencode.py-URL编码中的所有字符给定的有效载荷(不处理已经编码的)(例如SELECT->%53%45%4C%45%43%54)
charunicodeencode.py-Unicode-URL编码给定的有效载荷中的所有字符(不处理已经编码的)(例如SELECT->%u0053%u0045%u004C%u0045%u0043%u0054)
charunicodeescape.py-Unicode转义给定有效负载中的未编码字符(未处理已编码的字符)(例如SELECT-> \ u0053 \ u0045 \ u004C \ u0045 \ u0043 \ u0054)
commalesslimit.py-用'LIMIT N OFFSET M'替换(MySQL)实例,例如'LIMIT M,N'
commalessmid.py-用'MID(A FROM B FOR C)'替换(MySQL)实例,例如'MID(A,B,C)'
commentbeforeparentheses.py-在括号前加(内联)注释(例如((-> / ** /()
concat2concatws.py-用'CONCAT_WS(MID(CHAR(0),0,0),A,B)' 等价物(相当于)替换(MySQL)实例,例如'CONCAT(A,B)' 。
equaltolike.py- 将所有出现的等于('=')运算符替换为'LIKE'
escapequotes.py-斜杠转义单引号和双引号(例如'-> \')
great.py- 替换大于运算符('>' )和'GREATEST'对应
Halfversionedmorekeywords.py-在每个关键字
hex2char.py-替换每个(MySQL)0x等效的CONCAT(CHAR(),...)编码字符串
htmlencode.py-HTML编码(使用代码点)所有非字母数字字符(例如'->')
ifnull2casewhenisnull.py-替换'IFNULL( A,B)'与'CASE WHEN ISNULL(A)THEN(B)ELSE(A)END'对应
ifnull2ifisnull.py-用'IF(ISNULL(A),B)替换'IFNULL(A,B)'之类的实例,A)'对应
informationschemacomment.py-在所有出现的(MySQL)“ information_schema”标识符的末尾添加一个内联注释(/ ** /)
least.py 用'LEAST'对应替换大于运算符('>')
lowercase.py-用小写值替换每个关键字字符(例如SELECT->选择)
luanginx.py-LUA-Nginx WAF绕过(例如Cloudflare)
modsecurityversioned.py-包含带有(MySQL)版本注释的完整查询
modsecurityzeroversioned.py-包含带有(MySQL)零版本注释的完整查询
multiplespaces.py-在SQL关键字周围添加多个空格('')
overlongutf8.py-将给定有效载荷中的所有(非字母数字)字符转换为超长UTF8(未处理已编码)(例如'->%C0%A7)
overlongutf8more.py-将给定有效载荷中的所有字符转换为超长UTF8(尚未处理编码)(例如SELECT->%C1%93%C1%85%C1%8C%C1%85%C1%83%C1%94)
percent.py-在每个字符前面添加一个百分号('%') (例如SELECT->%S%E%L%E%C%T)
plus2concat.py-替换加号运算符('+')与(MsSQL)函数CONCAT()对应
plus2fnconcat.py-用(MsSQL)ODBC函数{fn CONCAT()}替换加号('+')对应项
randomcase.py-用随机大小写值替换每个关键字字符(例如SELECT-> SEleCt)
randomcomments.py -在SQL关键字内添加随机内联注释(例如SELECT-> S / ** / E / ** / LECT)
sp_password.py-将(MsSQL)函数'sp_password'附加到有效负载的末尾,以便从DBMS日志中自动进行混淆
space2comment.py-用注释'/ ** /' 替换空格字符('')
space2dash.py-用短划线注释('-')替换空格字符(''),后跟一个随机字符串和一个新的行('\ n')
space2hash.py-用井字符('#')替换(MySQL)空格字符('')实例,后跟随机字符串和换行('\ n')
space2morecomment.py-替换(MySQL)带注释'/ ** _ ** /' 的空格字符('')实例
space2morehash.py-用井号('#')后面跟一个随机字符串替换(MySQL)空格字符('')实例和新行('\ n')
space2mssqlblank.py-用有效的替代字符集中的随机空白字符替换空间字符('')的(MsSQL)实例
space2mssqlhash.py-替换空间字符('' )和井号('#'),后接换行('\ n')
space2mysqlblank.py-用有效替代字符集中的随机空白字符替换(MySQL)空格字符('')实例
space2mysqldash.py-用破折号('-')替换空格字符('') )后跟换行('\ n')
space2plus.py-用加号('+')替换空格字符('')
space2randomblank.py-用空格中的随机空白字符替换空格字符('')有效的替代字符集
substring2leftright.py-用LEFT和RIGHT替换PostgreSQL SUBSTRING
symbolicologic.py-用其符号对应物(&&和||)替换AND和OR逻辑运算符
unionalltounion.py-用UNION SELECT对应项替换UNION ALL SELECT的实例
unmagicquotes.py-用多字节组合%BF%27替换引号字符('),并在末尾添加通用注释(以使其起作用)
uppercase.py-用大写值替换每个关键字字符(例如select -> SELECT)
varnish.py-附加HTTP标头'X-originating-IP'以绕过Varnish防火墙
versionedkeywords.py-用(MySQL)版本注释将每个非功能性关键字括起来
versionedmorekeywords.py-将每个关键字包含(MySQL)版本注释
xforwardedfor.py-附加伪造的HTTP标头'X-Forwarded-For'

Tamper脚本编写

代码的编写

用脚本里面的apostrophenullencode.py为例
源代码是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python

"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST

def dependencies():
pass

def tamper(payload, **kwargs):
"""
Replaces apostrophe character (') with its illegal double unicode counterpart (e.g. ' -> %00%27)

>>> tamper("1 AND '1'='1")
'1 AND %00%271%00%27=%00%271'
"""

return payload.replace('\'', "%00%27") if payload else payload


上面的代码介绍

代码1

1
#!/usr/bin/env python

他的调用编辑器进行解析

代码2

1
2
3
4
"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

是脚本的介绍可以不填写

代码3

1
2
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOWEST

__priority__ = PRIORITY.LOW是定义优先级的,上面这个是LOWEST(最低)他等于 -100

1
2
3
4
5
6
7
8
class PRIORITY(object):
LOWEST = -100
LOWER = -50
LOW = -10
NORMAL = 0
HIGH = 10
HIGHER = 50
HIGHEST = 100

PRIORITY.LOW调用的lib.core.enums库在/usr/share/sqlmap/lib/core/enums.py文件里面

代码4

1
2
def dependencies():
pass

dependencies():此处是为了和整体脚本的结构保持一致。

pass:什么都不做,Python填充空内容,这样不会报错,代码的完整

代码5

1
2
3
4
5
6
7
8
9
def tamper(payload, **kwargs):
"""
Replaces apostrophe character (') with its illegal double unicode counterpart (e.g. ' -> %00%27)

>>> tamper("1 AND '1'='1")
'1 AND %00%271%00%27=%00%271'
"""

return payload.replace('\'', "%00%27") if payload else payload

def tamper(payload, **kwargs):
定义tamper脚本,payload, kwargs 为定义的参数,其中**kwargs为字典存储,类似于 {‘a’: 1, ‘c’: 3, ‘b’: 2}

""" """里面的是脚本的作用,介绍
return payload.replace('\'', "%00%27") if payload else payload
才是核心
上面的代码的作用就是叫'转换成%00%27


上面的添加\应为是'可能会让编辑器给作为字符执行,就用\

编写脚本绕过安全狗