)
Web 安全实战DVWA Low 级别手工检测 SQL 注入完整教程原理 实操分步详解文章前言SQL 注入SQLi是 Web 安全中最经典、危害最高的高危漏洞之一大量企业站点、管理后台曾因未过滤用户输入导致数据库脱库、数据篡改、服务器沦陷等严重安全事故。 很多新手入门 SQL 注入时直接上手工具扫描忽略手工判断注入点的核心思路。本文依托 DVWA 靶场 Low 安全等级从零演示纯手工识别、验证、利用 SQL 注入漏洞全流程拆解底层 SQL 语句原理适合 Web 安全入门、渗透测试实训、网络安全课程作业使用步骤可复现附完整实验截图与原理剖析。实验环境DVWA 1.10 PHP MySQL安全级别Low无输入过滤最适合新手理解注入逻辑一、SQL 注入漏洞基础原理1.1 漏洞产生根源Web 程序接收用户可控输入URL 参数、表单、Cookie 等未做过滤、转义、预处理直接拼接进 SQL 查询语句执行攻击者可通过特殊字符破坏原有 SQL 语句逻辑篡改查询逻辑。DVWA Low 等级后端核心查询代码PHPphp运行$query SELECT * FROM users WHERE id . $_GET[id] . ;代码直接读取 URL 传入的id参数原样拼接进 SQL无任何防护是典型的危险写法。1.2 单引号为什么是注入判断核心标识MySQL 中字符串使用单引号包裹当输入会提前闭合原有 SQL 语句的引号造成语法报错输入成对可抵消引号破坏消除报错以此判断页面是否存在注入点。二、实验前置准备启动 DVWA 靶场登录管理员账号左侧导航切换至Setup / Reset DB重置数据库进入DVWA Security将安全级别调整为Low并提交切换到SQL Injection功能页面进入实验靶点三、分步手工识别 SQL 注入完整实操步骤 1测试页面正常查询逻辑在User ID输入框输入数字1点击Submit提交。 页面返回ID1用户名 admin姓氏 admin。 底层执行 SQLsqlSELECT * FROM users WHERE id1;作用确认页面接收 ID 参数、正常查询数据库明确基础查询逻辑。步骤 2异常输入1通过报错判断存在注入风险输入 payload1提交页面直接返回 MySQL 语法错误plaintextYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 1报错原理用户输入1拼接后完整 SQLsqlSELECT * FROM users WHERE id1;原始语句末尾自带单引号我们输入的多闭合一层引号SQL 引号不匹配数据库抛出语法错误。关键结论页面直接输出数据库报错说明输入内容直接拼接 SQL存在极高 SQL 注入风险。步骤 3输入1验证注入漏洞真实存在输入 payload1提交页面不再报错正常返回 ID1 用户数据。 拼接后 SQL 语句sqlSELECT * FROM users WHERE id1;逻辑说明我们输入两个单引号第一个闭合原有查询第二个和后端自带的引号配对抵消语法恢复正常无报错。 这一步实锤页面存在可利用的 SQL 注入漏洞。步骤 4万能注入 payload or 11脱库所有用户输入核心注入语句 or 11提交后页面打印出数据库users表全部 6 条用户数据。拆解拼接后的完整 SQL原始模板sqlSELECT * FROM users WHERE id【用户输入】;带入恶意输入后sqlSELECT * FROM users WHERE id or 11;逻辑拆解第一个闭合id后的原有单引号or是 SQL 逻辑或只要任意一侧条件成立整条 where 语句结果为真11是永久成立的恒真条件后端末尾自带的和语句内1的前引号配对语法合法。最终WHERE条件等价于WHERE true查询返回 users 表全部记录实现数据库信息泄露。四、手工注入核心判断技巧总结4.1 快速判断是否存在注入点手工三步法数字测试输入正常数字确认页面能正常查询数据单引号报错测试输入页面出现数据库语法报错 → 大概率存在注入双引号抵消验证输入报错消失、页面正常展示数据 → 确认漏洞可利用。4.2 万能恒真 payload 作用 or 11是字符型 SQL 注入最基础利用语句适用于单引号包裹字符串的查询场景可一次性查询表内全部数据是手工验证漏洞可用性的标准载荷。4.3 区分数字型 / 字符型注入字符型本次实验查询参数用单引号包裹必须用闭合才能注入数字型参数无引号包裹直接输入or 11即可实现脱库。五、漏洞危害与防护方案5.1 SQL 注入可造成的危害敏感数据泄露账号、密码、手机号、后台管理员信息全部脱库恶意篡改数据更新、删除数据库内全部业务数据服务器提权配合数据库高权限执行系统命令拿下服务器控制权业务瘫痪删除核心业务表导致网站无法访问。5.2 生产环境防护手段开发必看使用预编译语句参数化查询PHP PDO、Java MyBatis 预编译彻底隔离输入与 SQL 语句输入白名单过滤ID 类参数仅允许数字拒绝单引号、or、union 等特殊字符关闭详细数据库报错线上环境统一返回自定义错误页面禁止输出 SQL 语法报错最小权限数据库账号Web 程序连接数据库账号仅分配查询权限禁止 drop、alter 等高权限操作部署 WAF Web 应用防火墙拦截携带注入特征的恶意请求。六、实验总结本文通过 DVWA Low 靶场完整演示纯手工识别 SQL 注入全流程从正常访问、单引号报错探测、双引号漏洞确认到万能语句批量读取数据库数据完整复现字符型注入原理。 手工检测是渗透测试的基础工具扫描仅作为辅助只有理解底层 SQL 拼接逻辑才能精准判断复杂场景下的注入漏洞同时在开发中针对性规避此类高危安全缺陷。拓展练习可尝试 DVWA Medium、High 安全级别对比不同过滤策略下手工注入的绕过思路进阶学习 Union 查询、盲注等注入手法。