1.10.1 sqlmap使用
简介:
SQLMAP是开源的渗透测试工具,主要用于自动化监测和利用SQL注入漏洞,它具有功能强大的检测引擎,能针对各种不同类型的数据库去获取数据库服务器的权限,获取数据库所存储的数据,访问并且可以导出操作系统的文件,甚至通过外带数据连接的方式执行操作系统命令。
所支持的DBMS:
SQLMAP支持市面上常见的DBMS,包括MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,[Firebird](https://en.wikipedia.org/wiki/Firebird_(database_server))和SAP MaxDB。
五种注入模式:
基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟是否执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句直接返回在页面中。
联合查询注入,在使用union联合查询的情况下注入
堆查询注入,可以在同时执行多条语句的情况下注入
七种测试等级:
使用参数-v指定对应的测试等级,默认是等级1.如果想看到sqlmap发送的测试payload最好的等级是3,。
·0:只显示Python的回溯、错误和关键消息;
·1:同时显示基本信息和警告信息;
·2:同时显示调试信息;
·3:同时显示注入的payload;
·4:同时显示HTTP请求;
·5:同时显示HTTP响应头;
·6:同时显示HTTP响应页面页面。基本功能:
1.在sqlmap 0.8版本之后,提供了数据库直连的功能,使用参数-d作为SQL数据库的客户端程序来连接数据库的端口,需要安装一些python中的依赖库便可以进行访问,其语法格式为:
2.与BurpSuite,Google结合使用,支持正则表达式限定测试目标
3.可以对HTTP头部信息(GET,POST,Cookie,Referer,User-Agent等)进行自动注入或者手动注入。
另外Referer和User-Agent可以具体指定某一个值去进行SQL注入挖掘
如果cookie过期之后,sqlmap会自动处理set-cookie头,更新cookie的信息
4.进行限速处理:设置最大并发和延迟发送。
5.支持基本身份认证(Basic Authentication),摘要认证(Digest Authentication),NTLM认证,CA身份认证
6.能够进行数据库版本的发现,用户的发现,进行提权,hash枚举和字典破解,暴力破解表列名称
7.能够利用SQL注入进行文件上传下载,支持用户定义函数(UDF)利用存储过程执行存储过程,执行操作系统命令,访问Windows注册表
8.与w3af,metasploit集成结合使用,能够基于数据库进程进行提权和上传执行后门。
下载地址:http://sqlmap.org/
操作选项:
基本操作:
指定目标:
枚举模块:
请求模块:
身份认证模块:
代理模块:
优化模块:
注入模块:
检测模块:
技术类型:
指纹信息:
爆破模块:
UDF注入模块:
系统文件操作:
OS系统访问:
Windows注册表模块:
一般性参数:
批处理模块:
杂项模块:
使用技巧
绕过ip限制
好不容易挖到的注入点,结果总是因为请求速度过快被ban掉ip,请求延迟也不管用的时候可以试试下面这种方式
准备一个动态ip,首先使用sqlmap的--tor-type=SOCK5 -identify-waf -skip-waf --randomize -safe-url=SAFURL -safe-freq=SAFREQ --delay=10 --time=sec=10 --string="指定参数" --dbs 跑一下看看,如果还是封ip,就需要使用动态ip了,一定要使用不是一个IP段的动态ip,然后看sqlmap跑的状态,一旦爆红,立马ctrl+c暂停sqlmap,然后断开vpn,换一条ip,接着跑。
更简单的直接使用python采集ip、验证、存储,
网上公开的代码如下
""" 由Lz1y修改: 1.由Python2修改为Python3 2.将ip写入txt文件中,并且去重复了 3.退出程序时更加优雅 请用python3执行
打包好的exe版
链接: https://pan.baidu.com/s/1Y2mSioAqRy-cc-d2eTb1aQ 提取码: irkh
使用方法:使用Python运行脚本,然后sqlmap中命令加入参数–proxy=http://127.0.0.1:9999
脚本同目录下,ips.txt中以
ip:port
的格式放入已验证的多个ip。即可使用sqlmap的代理池拓展脚本。
自动化宏注入
场景如下:
已知信息:ASP.NET SQL Server 存在sql盲注,查看页面源代码,我们可以看到在表单中有一个隐藏的输入字段(token),其值为一个GUID:
服务器每次响应时都会生成新的表单Token,并且如果在POST请求表单中该表单Token不匹配,网页就会报错
尝试用sqlmap而不使用宏来修改请求时会发生什么。 我们运行如下命令:
我们从sqlmap的输出中注意到的第一件事是重定向到错误页面:
很明显这对于sqlmap来说找到并利用SQLi的希望并不大。不过,还是让我们继续这个过程,看看会发生什么。
sqlmap似乎认为该参数不可注入; 但我们知道这里的确存在一处SQLi。让我们现在创建一个Burp宏,它将用一个新的表单Token替换请求中的“token”参数,以便我们可以使用sqlmap继续利用此SQLi漏洞。
Burp Suite中的宏实际上是一系列HTTP请求,这些请求会在由Burp代理的请求发送到服务器之前进行请求。一旦已经执行了宏请求,则从最终的宏请求的响应中取得的参数集合就可以被传递到调用宏的请求中。
首先要做的是记录我们想要的一系列HTTP请求。 在本文这种场景中,只有一个请求:对服务器的GET请求也就是获取token的请求。 “宏”可用于执行复杂的操作,例如登录应用程序和检索Cookie。 在Burp Suite中,转到“项目选项”选项卡和“会话”子选项卡。如下图:
向下滚动到“Macros”(宏)部分,然后单击添加。
将弹出两个对话框。 第一个是宏编辑器,第二个是宏记录器。 为了确定我们想要执行的一系列请求,我们需要“记录”我们想要创建的宏。
可以通过两种方式完成:我们现在可以执行我们想要做为宏的一部分的操作(即浏览登录页面,发送特定的GET请求等),然后从列表中选择登录和特定操作的HTTP请求;
或者直接在“代理历史列表”(Proxy –> HTTP History)中选择已经存在的HTTP请求。在本文的示例中,我们只需要找到一个请求,如下图:
一旦选中我们所需的请求(高亮显示的那一个),点击ok,然后我们进入了宏编辑器。
从这里,我们将需要对截获的请求进行一个小的更改。 选中请求,单击右侧的“配置项目”(Configure item),将显示“配置宏项目”的对话框。 然后,点击“自定义响应的参数位置”中的添加按钮。
然后,我们需要在HTTP响应体中定位我们要的参数——token,Burp会高亮显示我们要提取的值,设置参数的名称,以便在宏完成后可以将其传递给最终的HTTP请求。
当我们在响应中高亮显示我们所需的值的时候,“定义开始和结束”这一部分会自动完成。 所有其他设置可以保留为默认值。 单击确定关闭“定义自定义参数”的对话框,单击确定关闭“配置宏项目”的对话框,最后再次单击确定以关闭宏编辑器。 现在我们创建了我们想要的宏,但是我们仍然需要实现会话处理规则,以允许宏对所需的请求进行操作。 在“会话”选项卡上,转到“会话处理规则”部分,然后单击添加按钮。如下图:
当对话框弹出时,单击“规则操作”下的添加,然后从下拉菜单中选择“运行宏”
之后会打开“会话处理操作编辑器”。 在这里我们选择我们之前添加的宏,然后选择“仅更新以下参数”,并将我们的参数添加到列表中。 如果我们需要根据宏的最终请求修改cookie,那么我们也可以在这里进行添加。本文的演示示例不需要设置cookie。
单击OK关闭此对话框,然后单击会话处理规则编辑器的“范围(Scope)”标签页。
这里我们需要定义受规则影响的请求的范围。在“Tools Scope”下,默认情况下不会选择代理(因为如果没有正确配置的话,可能会影响通过Burp代理的每一个请求)。为了使用此规则与sqlmap一起工作,我们必须选中“Proxy”。 为了限制范围,我们使用“Use suite scope”选项,本文的演示仅包括示例站点。最后,我们将“参数范围”限制为仅影响包含“token”参数的请求,因为这是我们真正需要修改的请求。单击“OK”关闭对话框。 上述设置就是我们需要配置的一个宏来自动修改sqlmap的请求。现在,当sqlmap的请求通过代理时,Burp将首先向服务器发出GET请求,并使用从GET请求中提取的token参数的值替换sqlmap的POST请求中的“token”参数的值。
Burp不会在“代理历史记录”列表中显示被宏修改过的HTTP请求,因此如果你想确认你添加的宏是否按预期工作,那么你可以打开 “项目选项”标签页中的“会话”选项卡中的会话跟踪器来进行观察。 在会话跟踪器里可以按照请求顺序挨个查看通过会话处理规则的处理过的每一个请求,所以,你将能够观察对请求所做的任何更改。 一旦启用了我们添加的宏,sqlmap应该就能够正确地识别我们示例网站中的SQL注入漏洞了,并能够成功利用此漏洞:
常用脚本
tamper编写
tamper概述:
payload主要是传递过来的是每个检测SQL注入的Payload。
首先举个例子,假设我们有一个加工厂,这个加工厂的产品需要经过三个流程,进货、加工、包装、出售。但是我们的货物我们不需要去包装就可以直接出售给客户。
这里的货物就是我们的SQL注入点,你可以把它当作一个向服务器端发送的请求。
这个进货的操作就是我们将检测目标传递给自动化注入工具的过程了。 加工就是自动化注入工具进行分析、构造合适的Payload。
假设这个货物要被包装才可以出售(调用了 –tamper参数),那么我们的加工材料(Payload) 就会经过我们的包装车间(tamper函数),为了兼容不同的产品,所以根据产品的个数设立了可变的车间(payload参数和**kwargs参数)。
最后的出售就是将加工好的产品(请求)卖给客户(存在注入点的服务器)。
整个tamper的作用就在这里,用于判断是否需要包装。
下面我根据刚才这个例子来写一个简单的包装车间(tamper):
另一种玩法就是将我们请求的Header头进行一下篡改:
经常看HTTP数据包的读者肯定注意到了,kwargs[‘headers’]对应我们的请求Header头,它是一个字典。
最后给出网上放出的一个tamper,希望对大家有所帮助
sqlmap进行udf提权
使用

利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:
Last updated
Was this helpful?