课程笔记:注入攻击与 OWASP 靶机平台
课程名称:计算机网络应用 核心摘要:本讲围绕 OWASP Top 10 中排名第一的注入攻击展开,讲解注入的本质(数据与代码不分离)、四种主流注入类型(SQL / NoSQL / OS / LDAP)及防护思路,并介绍用于安全演练的 OWASP 靶机平台(BWA 虚拟机)的部署与使用,为后续 SQL 盲注与拆库实操做铺垫。
一、 核心概念与原理
1.1 注入攻击的本质
- 定义:将不受信任的数据作为命令或查询的一部分发送到解析器,从而诱使解析器在未适当授权的情况下执行非预期命令或访问数据。
- 本质:用户本应输入数据,实际却输入了代码,导致数据与代码不分离。
- 地位:在 OWASP Top 10(2017) 中位列 A1(排名第一),是 Web 应用防护不到位、对用户录入数据校验不充分的典型表现。
1.2 注入产生的两个关键条件
- 用户能够控制输入;
- 原本程序要执行的代码拼接了用户输入的数据,把数据当作代码执行。
1.3 解决注入的核心思想
数据与代码分离——确保用户输入永远只被当作数据,而不被解析为可执行代码。
1.4 防护方向
| 防护方向 | 说明 |
|---|---|
| 严格限制用户输入 | 对用户录入的数据 / 参数进行严格校验、过滤、白名单控制 |
| 提升代码健壮性 | 使用参数化查询、预编译语句,避免字符串拼接 SQL |
二、 技术细节与协议分析
2.1 四种主流注入类型
| 注入类型 | 全称 / 说明 | 攻击目标 | 备注 |
|---|---|---|---|
| SQL 注入 | SQL Injection | 关系型数据库查询 | 最基础、最常见 |
| NoSQL 注入 | NoSQL Injection | 非关系型数据库 | 针对 MongoDB 等 |
| OS 注入 | OS Command Injection | 操作系统命令 | 执行系统级指令 |
| LDAP 注入 | Lightweight Directory Access Protocol Injection | 目录服务查询 | 较难理解,需掌握协议背景 |
此外,XSS 本质上也是一种注入攻击——对 HTML / CSS / JS 脚本的注入;XML 注入与代码注入将在后续课程讲解。
2.2 LDAP 协议详解
- 全称:Lightweight Directory Access Protocol(轻量级目录访问协议)
- L = Lightweight(轻量级)
- D = Directory(目录)
- A = Access(访问)
- P = Protocol(协议)
- 协议层级:运行于 TCP/IP 协议之上。
- 作用:主要用于在目录中对资源进行搜索和访问。
- 注入原理:攻击者利用用户引入的参数,构造恶意的 LDAP 过滤器(即查询),绕过访问控制,访问本无权限的数据,实现权限提升。
- 学习要求:了解即可,非本课程重点。
2.3 SQL 注入风险触发的三种情况
只要满足以下任一条件,程序即面临 SQL 注入风险:
字符串拼接 / 联合查询
- 在 Web 应用中使用**字符串连接(拼接)**方式组合 SQL;
- 或使用
UNION联合查询拼接 SQL。
数据库账户权限过大
- 开发人员习惯使用最高权限账户连接数据库,风险极高;
数据库 常见过高权限账户 MySQL rootSQL Server saOracle scott/system- 应极力避免,按需分配最小权限。
过于信任用户输入
- 对用户输入不做任何校验;
- 未过滤特殊字符(如单引号
'、短杠-等); - 未对用户输入做潜在指令检查;
- 后台代码不够健壮。
2.4 框架并不能消除 SQL 注入
- 无论使用原生 JDBC,还是 ORM 框架(Hibernate、MyBatis、JPA、.NET 等),均存在 SQL 注入风险。
- 框架虽可自动生成 SQL,但若允许自定义 SQL 并进行字符串拼接,仍会引入注入点。
2.5 SQL 注入典型案例
-- 原始查询(字符串拼接,存在注入风险)
SELECT * FROM accounts WHERE custID = '参数值';
-- 攻击者将参数值改为:2' OR '1'='1
-- 拼接后实际执行:
SELECT * FROM accounts WHERE custID = '2' OR '1'='1';
-- 由于 '1'='1' 恒真,导致返回全部账户数据
结论:直接拼 SQL 必然存在 SQL 注入风险;使用框架后若仍自定义拼接 SQL,风险依旧存在。
三、 实践应用与配置命令
3.1 OWASP 靶机平台简介
- 靶机平台:类比军事训练中的"靶子",用于训练安全防护与攻防能力的虚拟机环境。
- 官方提供:OWASP 发布的 BWA(Broken Web Applications) 虚拟机,内置多种含漏洞的 Web 应用。
- 使用方式:下载虚拟机镜像 → 用虚拟机软件(VMware 等)打开 → 启动后即可访问。
3.2 靶机平台部署信息
# OWASP BWA 靶机平台
平台名称:OWASP Broken Web Applications (BWA)
访问 IP :192.168.200.100
访问方式:浏览器打开 http://192.168.200.100
登录信息:虚拟机启动时屏幕会显示登录用户名、密码及访问 URL
3.3 平台内置应用与攻击类型
平台首页展示多个靶机应用,常用包括:
- WebGoat(基于 JSP 开发,与基于 PHP 的 DVWA 不同,但攻防思路一致);
- 其他 OWASP 系列靶机。
内置演练的攻击类型:
攻击类型 说明 SQL 注入(SQL Injection) 本课程重点演练:盲注、拆解数据库 CSRF 跨站请求伪造 文件注入 文件包含 / 文件上传相关 上传漏洞 文件上传安全 XSS(反射型 / 存储型) 跨站脚本攻击
3.4 实操要点
- 将 OWASP BWA 虚拟机下载到本地;
- 使用虚拟机软件打开并启动;
- 启动后记录屏幕显示的登录信息与访问 URL;
- 浏览器访问
http://192.168.200.100; - 进入 SQL Injection 模块,准备进行 SQL 盲注与拆库演练。
四、 重点与难点提示
- 【考点】 注入攻击在 OWASP Top 10(2017) 中排名 A1,地位最高。
- 【考点】 注入的本质 = 数据与代码不分离;解决核心思想 = 数据与代码分离。
- 【考点】 注入产生的两个条件:①用户可控输入;②输入被拼接进代码并执行。
- 【考点】 四种主流注入类型:SQL、NoSQL、OS、LDAP。
- 【考点】 LDAP 全称必记:Lightweight Directory Access Protocol(轻量级目录访问协议),基于 TCP/IP,用于目录资源搜索与访问。
- 【考点】 SQL 注入风险的三种触发条件:字符串拼接、权限过大、不校验用户输入。
- 【易错点】 使用 ORM 框架(MyBatis / Hibernate / JPA)并不能完全避免 SQL 注入——只要存在自定义 SQL 拼接,风险依旧。
- 【易错点】 数据库账户应遵循最小权限原则,避免使用
root/sa/system等高权限账户连接应用。 - 【面试题】 简述 SQL 注入的成因及防护方案。
- 【面试题】 为什么使用了 MyBatis 等框架仍可能发生 SQL 注入?
- 【实操】 OWASP BWA 靶机平台 IP:
192.168.200.100,登录信息见虚拟机启动界面。
五、 课后疑问/遗留问题
- LDAP 注入的具体构造方法与实战案例?(本讲仅做概念了解,未深入)
- XML 注入与代码注入的原理与防护?(后续课程将讲解)
- SQL 盲注(Blind SQL Injection) 的判定方法与流程?(下一讲重点)
- 如何通过 SQL 注入拆解数据库(库名、表名、字段名逐层获取)?(下一讲重点)
- 在生产环境中,如何对已存在的拼接 SQL 进行安全改造(参数化查询 / 预编译)?