Web 渗透测试中的注入漏洞:从原理到实战的完整攻防指南

一、引言:注入漏洞,常年稳居高危漏洞榜首

注入漏洞的本质只有一句话:可信数据与执行代码边界混淆,用户可控输入被解释器直接解析为程序指令。吃透这个核心逻辑,就能融会贯通所有注入类漏洞。

在 OWASP Top 10:2025 中,注入漏洞(Injection)位列 A05。相较 2021 版本排名下降,不代表风险降低,只是主流 Web 框架内置了基础防护;但老旧系统、第三方组件、开发不规范编码,仍持续产生大量注入风险。

结合 2025 国内政企 Web 安全年度报告核心数据:

  1. 命令注入在企业业务系统检出率 42%,成功利用后 78% 可直接获取服务器最高权限;
  2. SQL 注入引发的数据泄露事件,占全年数据泄露安全事件总量 37%;
  3. XSS、NoSQL 注入、SSTI 模板注入在小程序、前后端分离新项目中逐年爆发。

注入漏洞四大核心危害:

  1. 攻击门槛低:公开 Payload、自动化工具丰富,新手可快速上手利用;
  2. 破坏程度高:可查询、篡改、删除业务数据,窃取管理员凭证,远程接管服务器;
  3. 攻击链路长:单一注入点可延伸至文件读写、内网横向渗透;
  4. 隐蔽性极强:注入点藏在接口参数、Cookie、请求头、隐藏表单,常规扫描工具极易漏报。

二、注入漏洞基础概述

2.1 标准定义

注入漏洞指程序未对外部输入做校验、转义、隔离,直接拼接不可信用户输入至解释器执行语句,解释器误将输入内容识别为可执行代码,篡改原有业务执行逻辑。

2.2 核心底层逻辑

  • 正常业务逻辑:用户输入 = 纯数据,仅用于匹配、展示,不会参与指令编译;
  • 漏洞触发逻辑:输入携带特殊指令符号,代码未做隔离,解释器拆分执行额外恶意代码;
  • 漏洞根源:没有严格区分数据层指令层

2.3 全品类注入漏洞分类(补齐新型注入,篇幅均衡)

表格

漏洞类型目标解释器典型业务场景核心危害
SQL 注入MySQL/Oracle/MSSQL 数据库登录、搜索、订单查询后台脱库、篡改、删除数据表
NoSQL 注入MongoDB/Redis 非关系数据库小程序、前后端分离接口绕过登录、读取全量集合数据
命令注入Linux/Windows 系统 Shell在线 ping、文件解压、运维工具服务器完全沦陷,获取系统 Shell
XSS 跨站注入浏览器 JavaScript 引擎评论区、用户昵称、站内消息劫持 Cookie、伪造身份、钓鱼攻击
LDAP 注入LDAP 目录服务企业 OA、统一身份认证平台越权登录管理员、遍历员工隐私信息
SSTI 模板注入Jinja2/FreeMarker 模板引擎Python/Java 页面渲染功能远程代码执行、读取服务器敏感文件

三、SQL 注入:最经典的数据库注入漏洞

3.1 漏洞原理

后端直接拼接用户输入构造 SQL 查询语句,无预编译、无特殊字符转义,攻击者可闭合原有查询逻辑,插入自定义恶意 SQL 指令。

危险原生 PHP 代码:

攻击者输入 Payload:admin' --拼接后完整执行 SQL:

--是 SQL 注释符号,后端密码校验逻辑被直接失效,无需密码即可登录管理员账号。

3.2 五大主流 SQL 注入类型

  1. 联合查询注入(UNION-Based)适用场景:页面直接回显数据库查询结果,是最易上手的注入方式。 实战步骤:判断字段数→查询表名→查询字段→导出敏感数据 关键注意:UNION 前后查询字段数量、数据类型必须完全匹配。

  2. 基于错误的注入(Error-Based)构造报错语句,利用数据库抛出的异常堆栈泄露库、表、字段信息; 防御核心:生产环境关闭详细 SQL 报错页面。

  3. 基于布尔的盲注(Boolean-Based)页面无数据回显、无报错,依靠页面正常 / 异常两种状态逐字符猜解数据;多用于无回显后台接口。

  4. 基于时间的盲注(Time-Based Blind)页面无状态差异,通过sleep()延时函数,根据接口响应延迟判断条件真假,常用来绕过简单 WAF 拦截。

  5. 堆叠查询注入(Stacked Queries)利用分号;分割多条 SQL 语句,仅支持多语句执行的数据库驱动,可执行删表、新建账户等高风险操作。

3.3 标准化手工注入检测流程

Step1 判断闭合符号:依次测试'单引号、"双引号、)括号 Step2 使用注释符抵消后续 SQL 校验逻辑:--#/*注释*/Step3 ORDER BY 二分法确定查询字段总数 Step4 UNION SELECT 寻找页面显示位 Step5 替换查询内容,读取库名、表、账号密码等敏感信息

3.4 自动化工具:SQLMap 实操命令

SQLMap 支持 MySQL、Oracle、SQL Server 等全主流数据库,一键自动化注入。

常用 Tamper 作用:

  • space2comment:空格替换注释/**/绕过空格过滤
  • randomcase:关键字随机大小写变形
  • equaltolike:等号替换 like 绕过符号拦截

四、命令注入:风险最高的系统级注入漏洞

4.1 漏洞原理

Web 应用调用系统 Shell 执行命令时,未过滤用户可控输入,攻击者拼接系统指令分隔符,执行任意操作系统命令。 高危 PHP 内置执行函数:system()exec()shell_exec()passthru()

4.2 系统命令分隔符

Linux 可用分隔符:;&&||&|Windows 可用分隔符:&&&|||

4.3 实战案例

页面 ping 功能危险代码:

正常请求:/ping.php?ip=8.8.8.8恶意 Linux 注入请求:/ping.php?ip=8.8.8.8; id后端实际执行两条命令:先 ping,再查询当前系统用户权限。

4.4 常见过滤绕过技巧

  1. 通配符绕过:cat /etc/pass*cat /etc/pass?d
  2. 空变量替代空格:cat$a /etc$a/passwd$a
  3. Base64 编码执行:echo "Y2F0IC9ldGMvcGFzc3dk" | base64 -d | bash

五、LDAP、NoSQL、SSTI、XSS 补充讲解

5.1 LDAP 注入(企业内网高频漏洞)

认证原始过滤器:(&(cn=username)(password=pass))注入 Payload:*)(&,拼接后语句(&(cn=*)(&)(password=pass)),匹配全部用户,直接绕过登录校验。 危害:伪造管理员身份、遍历企业员工全部隐私数据。

5.2 NoSQL 注入(前后端分离高发)

MongoDB 无预编译机制,输入直接拼接查询对象,通过$gt$ne等操作符绕过登录,批量读取集合数据。

5.3 SSTI 模板注入

Jinja2、Freemarker 模板直接渲染用户输入,攻击者构造模板语法读取服务器文件、执行系统命令,危害等同于命令注入。

5.4 XSS 跨站注入

分为反射型、存储型、DOM 型三类,输入恶意 JS 脚本劫持用户会话、伪造操作;2025 OWASP 将 XSS 统一归类至 Injection 注入大类。

六、注入漏洞五层完整防御体系

第一层:参数化预编译查询(根治 SQL 注入最优解)

将 SQL 语句与用户参数完全隔离,输入永远被识别为纯数据。 Python 示例:

Java 示例:

第二层:严格输入白名单校验

只放行业务允许的字符格式,拒绝单引号、分号、管道符、括号等危险特殊字符。

第三层:最小权限运行原则

  1. 数据库账号仅分配查询、修改基础权限,禁用 DROP、ALTER 等高风险权限;
  2. Web 服务进程使用普通低权限账户运行,禁止 root / 管理员启动。

第四层:Web 应用防火墙 WAF 防护

部署支持语法解析的专业 WAF(ModSecurity、商业 WAF),识别异常注入语句并拦截。

第五层:环境安全配置

生产环境关闭数据库、模板引擎详细错误堆栈,防止泄露系统结构信息。

命令注入专属加固方案

  1. 尽量使用编程语言内置 API 替代系统命令调用;
  2. 必须调用 Shell 时,对输入做完整白名单过滤。

七、实战学习靶场推荐

【配图 7:靶场功能分类介绍图】

表格

靶场名称适合学习阶段覆盖注入相关内容
DVWA入门新手SQL 注入、命令注入、XSS 基础
SQLi-labsSQL 注入专项65 关全场景手工注入练习
Pikachu综合练习命令执行、XSS、SSTI 基础
VulHub进阶实战真实 CVE 注入漏洞复现

八、全文总结

注入漏洞发展二十余年依旧是 Web 安全头号风险,万变不离其宗:数据与代码边界混淆。 学习与防御核心思路:

  1. 攻击侧:掌握手工注入标准流程,搭配自动化工具快速验证漏洞;
  2. 防御侧:优先使用预编译、白名单校验,配合多层防护形成闭环;
  3. 开发侧:杜绝直接拼接用户输入至 SQL、Shell、模板、LDAP 语句。