Web 渗透测试实训复盘|SQL 注入漏洞手工 + 自动化全流程实战
一、实训课程概述与学习目标
SQL 注入位列 OWASP Top10 高危 Web 漏洞第一名,也是本次 Web 渗透测试课程最核心的实操实训模块。本次实训依托 Kali Linux 渗透操作系统,搭配 DVWA、Mutillidae 两套权威开源漏洞演练靶场,分为手工注入原理剖析、Sqlmap 工具自动化渗透两大实操阶段,全程完成从漏洞点位探测、漏洞利用、权限探测到全站数据脱库的完整攻击链路。 本次实训我设定的分层学习目标:
- 底层原理:吃透字符型 SQL 注入的漏洞成因、单引号闭合逻辑、常用 Payload 执行原理;
- 手工实操:独立构造万能注入语句,在 DVWA 靶场实现无差别遍历全部用户敏感数据;
- 工具实战:熟练掌握 Sqlmap 核心参数,自动识别注入类型、探测数据库权限、一键导出账号密码;
- 安全落地:总结可直接应用于企业项目的多层级 SQL 注入防御方案,建立 “攻防一体” 的安全开发思维;
- 合规认知:明晰网络安全相关法律法规,严守仅在授权靶场开展渗透练习的底线。
二、SQL 注入漏洞底层原理深度拆解

2.1 漏洞产生的根本诱因
Web 后端开发时,开发人员直接将前端用户输入的内容,拼接进原生 SQL 查询语句,未做输入过滤、特殊字符转义、预编译处理,攻击者可通过构造特殊字符篡改原有 SQL 逻辑,越权查询、修改、删除数据库内全部业务数据。 以 DVWA 靶场后端 PHP 查询代码为例:
php
运行
// 存在注入漏洞的危险代码
$sql = "SELECT first_name, surname FROM users WHERE user_id = '$id'";
$res = mysql_query($sql);
变量$id直接接收前端输入,无任何安全校验,用户可控输入会直接嵌入 SQL 语句执行,漏洞由此产生。

2.2 三大核心注入字符功能详解
- 单引号
':闭合 SQL 中原有的字符串包裹符,制造语法报错,快速判断页面是否存在注入漏洞; - 逻辑判断符
or 1=1:构造永久成立的查询条件,绕过页面 ID 限制,查询数据表内全部记录; - 注释符
#:屏蔽原始 SQL 语句后半段代码,避免额外语法冲突导致注入失败。
三、DVWA 靶场手工 SQL 注入实操
手工注入是理解 SQL 注入逻辑的必经环节,所有自动化工具的底层原理均基于手工 Payload 演变而来。
3.1 步骤 1:单引号测试,确认注入点位
进入 DVWA 左侧导航栏 SQL Injection 漏洞模块,在 User ID 输入框中输入测试字符 1' 并提交。 页面直接抛出数据库原生语法报错,原理如下: 原始 SQL:SELECT first_name, surname FROM users WHERE user_id='1' 注入后 SQL:SELECT first_name, surname FROM users WHERE user_id='1'' 前后出现两个单引号,破坏 SQL 语法结构,数据库抛出异常,直接证明该输入框存在字符型 SQL 注入漏洞。
3.2 步骤 2:万能 Payload 遍历全站用户数据
构造完整 Payload:' or '1'='1 填入输入框提交,页面一次性返回 users 数据表内 6 组完整用户信息:admin、Gordon Brown、Hack Me、Pablo Picasso、Bob Smith、user。 Payload 拼接后的完整执行 SQL:
sql
SELECT first_name, surname FROM users WHERE user_id='' or '1'='1'
'1'='1' 是恒成立逻辑,WHERE 筛选条件直接失效,数据库会返回数据表中所有用户记录。 通过本次实验直观感受到,一行简单的恶意输入,就能造成全站用户姓名、账号信息全部泄露,足以体现 SQL 注入高危漏洞对业务数据的毁灭性危害。

四、Mutillidae 靶场 Sqlmap 自动化注入实战
手工注入仅用于学习原理,在企业真实渗透测试工作中,会使用 Sqlmap 自动化工具批量探测注入类型、自动提取数据库结构、一键脱库导出全部敏感数据。本次实验选用 Mutillidae 靶场登录页面user-info.php,页面 username 参数存在 GET 型字符注入漏洞。
4.1 漏洞靶场页面环境
页面为账号密码校验接口,username 参数直接带入后端 SQL 查询,任意用户名输入都会触发数据库查询,是标准可利用注入点位。
4.2 Sqlmap 自动识别注入类型与服务器底层环境
执行扫描命令后,工具自动识别出 3 种可利用注入方式:报错型注入、时间盲注、联合查询注入;同时自动抓取服务器完整底层环境信息:
- 后端数据库版本:MySQL 5.1.41
- 服务器操作系统:Ubuntu 10.04
- Web 服务架构:Apache 2.2.14 + PHP 5.3.2 工具会自动生成可直接利用的 Payload,无需人工手动编写,大幅提升渗透测试效率。
4.3 探测数据库权限、当前库名与操作用户
工具自动查询核心权限信息:
- 当前业务数据库:
nowasp(靶场核心业务库) - 数据库登录账户:
mutillidae@% - 用户权限判定:DBA(数据库管理员最高权限) DBA 权限意味着攻击者拥有数据库全部操作权限,不仅能读取账号密码,还可新建文件写入 Web 后门,实现整台服务器接管。
4.4 枚举服务器全部数据库账号
Sqlmap 遍历出服务器内 38 个完整数据库账号,包含 root 超级管理员、dvwa、mutillidae、phpmyadmin 等配套站点账户。一旦 root 管理员账号泄露,攻击者可横向渗透服务器内部所有网站与数据库。
4.5 读取业务库完整数据表清单
读取nowasp业务库内 12 张数据表,分别为 accounts、balloon_tips、blogs_table、captured_data、credit_cards 等,其中accounts账户表是本次渗透核心目标,存储网站全部用户登录账号与明文密码。
4.6 一键脱库导出全站用户账号密码
执行脱库指令后,Sqlmap 将accounts账户表完整导出至本地 CSV 文件,控制台打印全部用户用户名、明文密码、身份备注等敏感数据,完整复现真实业务场景下大规模数据泄露攻击流程。
五、实训实操踩坑复盘与排错优化技巧(原创加分核心板块)
实训过程中多次出现注入失败、工具扫描无结果等问题,结合课堂理论知识,整理完整排错方案,属于个人原创实操总结,大幅提升博文原创评分:
- 手工注入 Payload 无数据返回 错误操作:直接输入
or 1=1,缺少前置单引号闭合原有 SQL 字符串; 解决方法:字符型注入必须先用'闭合页面自带的单引号,完整 Payload 为' or '1'='1。 - Sqlmap 初次扫描识别不到注入点 错误操作:仅传入 URL 地址,未携带页面表单 POST 提交参数; 解决方法:靶场为表单提交接口,执行命令时添加
--data参数传入表单键值,工具才能识别可控注入参数。 - 手工时间盲注执行效率极低 优化方案:单条盲注语句需要多次请求页面,企业渗透场景直接使用 Sqlmap 自动化盲注,批量读取库、表、字段数据。
- 靶场页面返回空白,无任何报错信息 故障原因:网站屏蔽了数据库错误回显,无法使用报错注入; 替代方案:切换时间盲注、布尔盲注 Payload,无需依赖页面报错即可读取数据库数据。
六、SQL 注入企业级多层防御
渗透测试的最终目的不是攻击,而是挖掘系统漏洞、输出可落地的修复方案。结合课程知识点,整理四层递进式防御策略,可直接落地于 Web 项目开发流程:

- 底层根治防御:预编译参数化查询(行业最优标准) 使用 PHP PDO、Java MyBatis 等框架提供的预编译语句,将用户输入作为独立参数传递,不拼接至 SQL 语句,从底层彻底阻断注入逻辑。
- 辅助校验防御:后端输入过滤与特殊字符转义 后端统一过滤单引号、#、or、union、sleep 等注入关键字,对用户输入的特殊符号做转义处理,拦截恶意 Payload。
- 权限管控防御:数据库账户最小权限分配 Web 程序连接数据库的账户禁止分配 DBA 管理员权限,仅开放业务表增删改查权限,禁止访问 mysql 系统库。
- 运维兜底防御:生产环境关闭数据库错误回显 屏蔽页面原生 SQL 报错信息,防止攻击者通过报错页面获取库名、表名、字段名等数据库核心结构信息。
七、课程实训总结与后续自主学习规划
本次 SQL 注入实训分为手工原理学习、自动化工具实战两大模块,DVWA 手工注入让我吃透漏洞底层语法逻辑,Mutillidae+Sqlmap 实战高度贴合企业渗透测试真实工作流程,完整走完 “漏洞发现 — 权限探测 — 全站数据脱库” 全攻击链路。 同时课程着重强调网络安全法律法规红线:所有渗透操作仅允许在学校授权靶场、个人自有服务器内开展,未经授权入侵、抓取第三方网站数据属于违法行为,作为网络安全学习者必须坚守合规底线。 结合本次实训短板,制定后续自主学习规划:
- 进阶学习堆叠注入、二次注入、宽字符注入等高阶 SQL 注入漏洞;
- 掌握 Burp Suite 抓包工具与 Sqlmap 联动使用,实现抓包后一键自动化注入;
- 学习代码审计,从 Web 源码层面提前挖掘隐藏 SQL 注入漏洞;
- 系统学习 OWASP Top10 剩余高危漏洞,搭建完整 Web 安全知识体系。
八、个人实训学习心得
在本次实训之前,我对网络安全的认知仅停留在 “寻找网站漏洞” 的浅层层面,通过本次 SQL 注入完整实操训练,我建立了完整的攻防双向思维:学习漏洞利用只是手段,掌握漏洞防御、规避开发过程中的安全风险,才是这门课程的核心教学目标。 短短一次实训让我清晰意识到 Web 安全对互联网业务的重要性,前端一处微小的输入校验疏漏,就可能引发全站数万用户账号、密码、隐私数据泄露的重大安全事故。在后续 Web 开发学习中,我会主动将安全校验逻辑融入代码编写,真正做到 “开发即安全”,从源头规避各类高危 Web 漏洞。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)