Web 安全实战手册:OWASP Top 10 原理、绕过与修复
概述#
OWASP Top 10 是 Open Web Application Security Project(开放 Web 应用安全项目)组织发布的全球最权威 Web 安全威胁清单。本文档基于 OWASP Top 10 和实际渗透测试经验,系统梳理 Web 安全中常见的 12 种核心漏洞类型——涵盖原理、危害、绕过技巧与修复方案,供安全开发者和测试人员快速查阅。
(1)SQL 注入漏洞#
原理#
后端代码未对用户输入进行验证和处理,直接拼接到 SQL 查询语句中执行。
危害#
- 信息泄露:读取整个数据库
- 网站挂马:注入恶意 HTML 到网页
- 网页篡改:修改页面内容
- 后门植入:在数据库中写入恶意脚本
绕过技术#
- 关键字模糊匹配:
sel%e%ct - 内联注释:
/*select*/ - 二次编码:对关键字进行 URL 编码
- 参数绕过:利用数组参数注入
- multipart 请求:POST 请求中上传文件绕过检测
修复建议#
- 加 WAF 防护
- 关闭错误提示信息
- 对用户输入进行过滤
- 限制输入长度
- 密码加密:md5 加盐后再 md5
测试方法#
' and 1=1 #
' and 1=2 #(2)XSS 漏洞#
原理#
Web 应用对用户输入验证不严格,导致攻击者可以注入恶意脚本。当其他用户访问该页面时,脚本被执行。
危害#
- 盗取用户 Cookie
- 会话劫持
- 篡改网页内容
- 重定向到恶意网站
- 钓鱼网站
- 破坏网站功能
绕过技术#
- 大小写:
<ScRiPt> - 双写:
<scri<script>pt> - 编码:HTML 编码、URL 编码
- 无分号无引号:利用
alert函数的特性 - 等价符号/函数替换
- HTML 条件注释块
修复建议#
- 对所有用户输入进行验证和处理,避免直接输出到页面
- 使用 CSP(内容安全策略)限制可执行脚本
- 启用浏览器的 XSS 过滤
- 使用
HttpOnly设置 Cookie,防止 JavaScript 读取
(3)CSRF 跨站请求伪造#
原理#
正常请求会将用户的 Session ID 保存在 Cookie 中。当用户使用同一浏览器访问另一个 tab 页时,该页也能获取 Cookie 信息。
举例:管理员登录后,攻击者伪造"修改密码"URL 发给管理员,管理员用同一浏览器打开,密码即被修改。
危害#
- 盗取用户 Cookie
- 执行恶意操作
- 财产损失
绕过技术#
- 更改请求方法:POST 改 GET
- 删除或发空的 Token
- 移除 Referer 字段
修复建议#
- 双重验证:操作前验证用户意图
- 增加 Token:每个表单包含随机 CSRF Token
- 使用 HttpOnly 设置 Cookie
(4)SSRF 服务器请求伪造#
原理#
服务器端提供了从其他服务器获取数据的功能,对目标地址未做安全检测和过滤,攻击者利用此功能访问内网数据。
危害#
- 敏感信息泄露:文件读取、端口探测
- 内网探测:提供横向移动条件
- 内网 DoS 攻击
绕过技术#
- 利用短链接:绕过域名白名单
- 利用特殊协议:
file://、gopher://、dict:// - 利用特殊域名:
0.0.0.0、127.0.0.1的别名
修复建议#
- 对用户输入进行安全检查和严格过滤
- 白名单机制:只允许访问指定域名/IP
- 限制协议:只允许
http、https - 限制端口:禁止访问内网端口(如 6379、27017)
- 不常用的功能直接关闭
(5)XXE(XML 外部实体注入)#
原理#
应用程序未正确验证和处理 XML 数据,攻击者构造包含外部实体引用的 XML,XML 解析器处理外部实体时导致任意文件读取或命令执行。
危害#
- 敏感信息泄露
- 命令/代码执行
- 内部系统扫描
- SSRF
- DoS
- 绕过防火墙
绕过技术#
- 编码:UTF-16BE 等编码绕过
- 伪协议:
data:、file:协议
修复建议#
- 禁用外部实体解析
- 对用户输入严格验证和过滤
- 关闭错误信息提示
- 限制 XML 解析器功能
(6)文件包含漏洞#
原理#
应用程序需要包含外部文件时,接受用户输入作为路径的一部分,未验证过滤,攻击者可利用执行恶意文件。
PHP 文件包含函数:
include()/include_once()require()/require_once()
危害#
- 敏感信息泄露
- 恶意代码执行
绕过技术#
- 伪协议:
php://input、php://filter - %00 截断:
%00截断路径 - # 绕过:利用 URL 片段
- 空格绕过
- 双写绕过
修复建议#
- 对用户输入严格过滤和处理
- 白名单机制:只允许包含指定目录下的文件
- 禁用远程文件包含(
allow_url_include=Off) - 限制文件访问路径
- 使用安全的包含函数
(7)文件上传漏洞#
原理#
服务器对上传文件的后缀和类型未做严格验证和过滤。
危害#
- 上传 WebShell
- 上传木马/病毒
- 内网渗透
绕过技术#
- 前端 JS 验证绕过:浏览器禁用 JS 或抓包修改
- 修改文件后缀:
php→php3、phtml、phpt - 修改 MIME 类型:
Content-Type改为image/jpeg - %00 截断
修复建议#
- 对上传文件严格过滤
- 白名单限制后缀和类型
- 上传目录设为不可执行
- 文件名和路径随机化
(8)命令执行漏洞#
原理#
应用程序执行系统函数时,未对用户输入严格验证,攻击者将恶意命令拼接到正常命令中。
常见函数:system()、exec()、shell_exec()、passthru()、popen()
危害#
- 数据泄露
- 内网渗透
- 权限提升
- 系统控制
绕过技术#
- 编码绕过
- 寻找未禁用的函数
- 字符绕过:空格用
${IFS}、通配符?、*
修复建议#
- 对用户输入严格验证和过滤
- 白名单机制
- 参数化查询和绑定
- 关闭报错信息
(9)逻辑漏洞#
原理#
程序在设计和实现过程中,因逻辑错误或缺陷导致的安全问题——不是代码 bug,而是业务设计问题。
分类#
- 权限缺陷:
- 平行越权:同级用户 A 可修改用户 B 的信息 - 垂直越权:低权限用户可修改高权限用户数据
- 业务逻辑缺陷:支付金额可被修改、订单数量异常
- 验证码缺陷:密码找回验证码可爆破、不校验时效
- 登录缺陷:弱密码、未限制登录次数
危害#
- 信息泄露
- 服务滥用
- 财产损失
修复建议#
- 多重身份验证
- 访问控制策略
- 全面审计
(10)未授权访问漏洞#
原理#
系统或服务对用户访问未做限制和认证,因配置不当、认证机制缺陷或代码逻辑问题,攻击者可未授权访问。
常见场景#
| 服务 | 端口 | 说明 |
|---|---|---|
| Redis | 6379 | 默认无密码,未限制 IP |
| Memcached | 11211 | 无权限控制模块,无密码 |
| JBoss | 8080 | 默认后台无密码 |
| InfluxDB | 8086 | JWT 验证不当 |
| MongoDB | 27017 | 默认无认证 |
绕过利用#
- 系统服务扫描发现暴露端口
- 数据窃取或恶意操作
修复建议#
- 加强认证机制
- 服务配置审查
- 访问权限控制
(11)中间件解析漏洞#
IIS 解析漏洞#
IIS 5.x/6.0:分号 ; 后面不被解析,xx.asp;.jpg 被当成 xx.asp 执行。
IIS 7.0/7.5:Fast-CGI 开启时,xx.jpg/.php 被当成 PHP 执行。
Nginx 解析漏洞#
原理:用户配置不当造成。
利用:上传图片后,访问 xxx.jpg/.php,Nginx 会将图片当作 PHP 执行。
修复建议#
- 关闭多余的解析器
- 配置
location ~ \.php$精确匹配 - 限制上传目录执行权限
(12)反序列化漏洞#
Shiro 反序列化#
原理:Shiro 的"记住我"功能会生成加密编码的 Cookie,服务端对其进行 Base64 解密 → AES 解密 → 反序列化。
关键点:Shiro 默认 AES 密钥固定。
利用:构造恶意序列化数据 → AES 加密 → Base64 编码 → 替换 Cookie 中的 rememberMe 字段。
影响版本:Shiro < 1.2.4
FastJson 反序列化#
原理:FastJson 允许在 JSON 字符串中使用 @type 关键字指定目标类,反序列化时加载并实例化该类。
利用:构造包含 @type 的恶意 JSON,指定恶意类为自动类型值。
JBoss 反序列化#
原理:JBoss 某些版本未对反序列化操作适当过滤,攻击者可构造恶意反序列化数据。
影响版本:JBoss 4.x 之前、5.x/6.x 版本
修复建议#
- 限制反序列化白名单
- 校验序列化数据签名
- 更新到安全版本
- 禁用不需要的反序列化功能
快速参考表#
| 漏洞 | 核心原理 | 关键绕过 | 核心修复 |
|---|---|---|---|
| SQL 注入 | 未验证输入直接拼接 | 注释、编码、multipart | 参数化查询、WAF |
| XSS | 恶意脚本注入页面 | 大小写、双写、编码 | CSP、HttpOnly Cookie |
| CSRF | Cookie 被跨站利用 | 改方法、删 Token | CSRF Token、双重验证 |
| SSRF | 服务端请求未过滤 | 短链接、特殊协议 | 白名单、协议限制 |
| XXE | XML 外部实体解析 | UTF-16、伪协议 | 禁用外部实体 |
| 文件包含 | 用户输入拼接到路径 | 伪协议、%00 截断 | 白名单、禁用远程包含 |
| 文件上传 | 后缀/类型未校验 | JS 绕过、MIME 改后缀 | 白名单、目录不可执行 |
| 命令执行 | 系统函数未过滤输入 | 编码、未禁用函数 | 白名单、参数化 |
| 逻辑漏洞 | 业务设计缺陷 | 改金额、并发请求 | 多重校验、全面审计 |
| 未授权访问 | 未配置认证机制 | 端口扫描 | 加强认证、审查配置 |
| 中间件解析 | 解析器配置不当 | .jpg/.php | 精确匹配、限制执行 |
| 反序列化 | 未校验反序列化数据 | 构造恶意序列化 | 白名单、签名校验 |
本文档结合 OWASP Top 10 与实际渗透测试经验编写,适用于安全开发者、测试人员的快速查阅。