官方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 """ 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
他的调用编辑器进行解析
代码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
上面的添加\
应为是'
可能会让编辑器给作为字符执行,就用\
,
编写脚本绕过安全狗