SizweMarole-21389/web-application-penetration-test

GitHub: SizweMarole-21389/web-application-penetration-test

一份脱敏的黑盒 Web 应用渗透测试作品集报告,记录了 11 个漏洞的完整发现过程、攻击链分析及修复建议。

Stars: 0 | Forks: 0

# Web 应用渗透测试 - Web 应用门户 这是一份经过脱敏处理的个人作品集报告,记录了在受控实验室环境中对一个**故意设计存在漏洞的 Web 应用门户**进行的**黑盒 Web 应用渗透测试**。本次评估从一个普通注册用户的角度开始,没有源代码或后端访问权限——这与任何外部攻击者的起点相同——最终通过一系列四个高风险漏洞链,实现了完全的服务器控制和账户接管。 **评估员:** Sizwe Marole  |  **评估类型:** 黑盒 Web 应用渗透测试 **目标(已匿名化):** `portal.target.local`  |  **报告版本:** 2.1(已脱敏以公开发布) ## 执行摘要 本次黑盒渗透测试是从一个注册用户的角度对一个 Web 应用门户进行的,该用户无法访问源代码或后端配置——这与任何外部攻击者可用的起点相同。整个 Web 应用都在范围内;底层托管基础设施不在范围内。共发现了 11 个漏洞:**四个高危,一个中危,四个低危和两个信息漏洞。** 11 个漏洞中有 4 个是高危漏洞。最严重的是一个无限制文件上传漏洞:普通用户账户可以通过单个请求在服务器上执行命令并完全接管服务器。第二个漏洞位于个人资料更新 endpoint,只需一个经过身份验证的请求就会泄露整个数据库,包括每个用户的电子邮件地址和密码哈希。另外两个漏洞允许任何用户读取任何其他用户的私人资料,并存储在其他用户(包括管理员)浏览器中执行的 JavaScript。 每个问题单独来看都很严重。将它们链接起来后果更糟。数据库泄露暴露了每个候选人简历的文件引用,而且简历目录不需要身份验证,因此这些引用是攻击者下载文件所需的全部条件。存储的 JavaScript 可以捕获实时的 session token;如果管理员查看了恶意资料,攻击者就会继承该管理员会话。注销也无济于事,因为 refresh token 仍然有效,可以从中生成新会话。 最终结果是完全的账户接管以及普通用户绝不应拥有的访问权限。就目前而言,该门户存在严重漏洞,在修复高风险问题之前不应上线——修复顺序为:文件上传、SQL 注入,然后是访问控制和跨站脚本攻击问题。 ## 📋 漏洞概览 | # | 漏洞发现 | 严重性 | CVSS v3.1 | CWE | OWASP 2021 | |---|---------|----------|-----------|-----|------------| | 1 | [无限制文件上传 → 远程代码执行](findings/01-unrestricted-file-upload.md) | **高危** | 8.8 | CWE-434 | A03 / A05 | | 2 | [基于报错的 SQL 注入(个人资料更新)](findings/02-sql-injection.md) | **高危** | 8.1 | CWE-89 | A03 | | 3 | [IDOR - 未经授权访问任何用户资料](findings/03-idor.md) | **高危** | 6.5 | CWE-639 | A01 | | 4 | [存储型跨站脚本攻击(姓氏字段)](findings/04-stored-xss.md) | **高危** | 6.1 | CWE-79 | A03 | | 5 | [赋值逻辑缺陷(评分/重考)](findings/05-assignment-logic-flaws.md) | 低危 | 4.3 | CWE-840 | A04 | | 6 | [注销时 JWT Refresh Token 未失效](findings/06-jwt-refresh-token.md) | 中危 | 5.3 | CWE-613 | A07 | | 7 | [弱密码策略](findings/07-weak-password-policy.md) | 低危 | 3.7 | CWE-521 | A07 | | 8 | [身份验证无速率限制](findings/08-no-rate-limiting.md) | 低危 | 5.3 | CWE-307 | A07 | | 9 | [通过注册响应进行用户枚举](findings/09-user-enumeration.md) | 低危 | 5.3 | CWE-204 | A07 | | 10 | [缺失 HTTP 安全标头](findings/10-missing-security-headers.md) | 低危 | 4.3 | CWE-693 / CWE-1021 | A05 | | 11 | [信息泄露(版本信息/详细报错)](findings/11-information-disclosure.md) | 信息 | 5.3 | CWE-200 / CWE-209 | A05 | **结果:** 11 个漏洞 - 4 个高危,1 个中危,4 个低危,2 个信息漏洞。两个高危发现(文件上传和 SQL 注入)各自单独就足以交出服务器和整个数据库的控制权。点击上方的任何漏洞发现以查看其完整报告:描述、复现步骤、带有内嵌说明的截图、业务影响以及修复建议——所有内容均独立包含在一个文件中。 ## 🧩 攻击链 这些高危发现单独来看已经很危险,但它们的设计目的是相互利用的: ``` Unrestricted Upload (F1) ──► RCE as www-data ──► read DB creds, source, every CV │ SQL Injection (F2) ──► dump users + bcrypt hashes + CV UUIDs │ └──► CV UUIDs + unauthenticated /cv-view (F1) ──► download every candidate's CV IDOR (F3) ──► read any profile (incl. admin) without authorisation Stored XSS (F4) ──► steal a live admin session token from browser storage │ JWT refresh flaw (F6) ──► session survives logout ──► persistent admin access ``` 所有四个高危发现都存在一个根本原因:**用户输入在未经过验证或输出编码的情况下到达了敏感操作。** ## 测试方法论 所有测试均为手工进行。Burp Suite Community Edition 拦截并重放请求,`curl` 直接发送精心构造的请求,而浏览器开发者工具则展示了响应是如何渲染的。未运行任何自动化扫描工具;SQL 注入是使用基于报错的 `extractvalue()` payload 手工提取的,而不是使用诸如 sqlmap 之类的工具。 首先使用普通用户账户对应用进行初步浏览,映射每一个页面、表单和 API endpoint,同时 Burp 记录流量。文件上传、输入字段、访问控制检查和登录流程被标记为优先测试区域。然后对每个 endpoint 进行单独测试:首先发送一个干净的请求以观察正常行为,接着发送测试 payload 以观察是否存在报错、意外输出或不一致的情况。一旦确认了漏洞,就会记录下确切的请求、响应和复现步骤,并在此过程中截取屏幕截图。 此方法论符合 **OWASP Web 安全测试指南 (WSTG)**,漏洞发现使用 **CWE** 进行分类,映射到 **OWASP Top 10 (2021)**,并使用 **CVSS v3.1** 进行评分。 ## 风险评级定义 | 评级 | 定义 | | --- | --- | | **高危** | 攻击者有可能控制、更改或删除电子资产。包括未经授权的访问、数据截获、篡改网页等。 | | **中危** | 结合其他因素,存在资产被攻陷的可能。属于条件性或依赖配置的漏洞利用。 | | **低危** | 被利用的可能性或影响极低。包括弱密码算法、过时的协议、程序化的 CAPTCHA 绕过等。 | | **信息** | 无法直接被利用,但不符合最佳实践。例如信息泄露、版本信息暴露等。 | ## 🛠️ 工具与技术 - **Burp Suite Community Edition** - 拦截代理、请求重放、Intruder - **curl** - 直接发送精心构造的请求 - **浏览器开发者工具** - 渲染/输出编码验证 - 手工构建的基于报错的 **SQL 注入**,使用 MariaDB `extractvalue()`(未使用 sqlmap) - 绕过 WAF 黑名单以实现存储型 XSS (`

`) - JWT 解码与会话处理分析 - 符合 **OWASP Web 安全测试指南 (WSTG)** 的方法论 ## 🎯 展示的技能 - 端到端的黑盒 Web 应用渗透测试 - 使用 **CWE**、**OWASP Top 10 (2021)** 进行漏洞分类,以及 **CVSS v3.1** 评分 - 将独立的漏洞链接成一条贴近实战、高影响的攻击路径 - 清晰且聚焦于业务影响的报告,包含复现步骤和修复建议 - 将技术层面的漏洞发现映射至法律/法规层面的影响(**POPIA**,第 19 及 22 条) ## 结论 仅需一个自行注册的账户,就足以完全控制服务器,并在注销后保持该访问权限。在高危漏洞被修复之前,该门户不应上线。法律风险是真实存在的,而非理论上的:信息监管机构在 2023 年对一个政府部门开出的首张 POPIA 罚单——500 万兰特——正是源于这种相同的安全漏洞模式以及在第 19 条和第 22条中规定的职责缺失。 共发现了 11 个漏洞:四个高危、一个中危、四个低危和两个信息漏洞。其中两个高危漏洞——文件上传和 SQL 注入——各自单独就足以交出服务器和整个数据库的控制权。更大的问题在于这些高危漏洞是如何相互配合的(发现 1 至 4):前一个漏洞泄露的数据成为了进入下一个漏洞的途径,最终导致管理员账户被接管,且这种访问权限在注销后依然有效。 按照风险高低顺序进行修复:首先是文件上传,其次是 SQL 注入,然后是访问控制和跨站脚本问题。所有四个高危漏洞都有相同的根本原因——用户输入在未经过验证或输出编码的情况下到达了敏感操作。只需对每个 endpoint 应用统一的验证和输出编码标准,即可修复整类漏洞,而不仅仅是这几处特定情况。身份验证、密码、枚举、安全标头和信息泄露等问题,可以在高风险修复工作完成后进行处理。 ## 📁 仓库结构 ``` . ├── README.md # this file - overview, methodology, findings table ├── findings/ # one self-contained write-up per finding │ ├── 01-unrestricted-file-upload.md │ ├── 02-sql-injection.md │ ├── 03-idor.md │ ├── 04-stored-xss.md │ ├── 05-assignment-logic-flaws.md │ ├── 06-jwt-refresh-token.md │ ├── 07-weak-password-policy.md │ ├── 08-no-rate-limiting.md │ ├── 09-user-enumeration.md │ ├── 10-missing-security-headers.md │ └── 11-information-disclosure.md └── evidence/ # redacted screenshots, referenced inline by findings/*.md ├── Finding-01-RCE/ ├── Finding-02-SQLi/ ├── Finding-03-IDOR/ ├── Finding-04-XSS/ ├── Finding-05-Assignment/ ├── Finding-06-JWT/ ├── Finding-07-WeakPassword/ ├── Finding-08-RateLimit/ └── Finding-10-Headers/ ``` ## 📚 标准与参考 - **OWASP Top 10 (2021)** - https://owasp.org/Top10/ - **OWASP Web 安全测试指南 (WSTG)** - https://owasp.org/www-project-web-security-testing-guide/ - **MITRE CWE** - https://cwe.mitre.org/ (CWE-434, 89, 639, 79, 840, 613, 521, 307, 204, 693, 1021, 200, 209) - **CVSS v3.1 规范文档** - https://www.first.org/cvss/v3.1/specification-document - **NIST 国家漏洞数据库 (CVE 查询)** - https://nvd.nist.gov/ - **POPIA** - 2013 年第 4 号《个人信息保护法》(南非),第 19 及 22 条 *作者:**Sizwe Marole**。报告版本 2.1(已脱敏以公开发布)。*

标签:CISA项目, OWASP Top 10, Web安全, 渗透测试报告, 漏洞分析, 蓝队分析, 路径探测, 防御加固, 黑盒测试