
根据提供的渗透测试过程记录,以下是漏洞发现与利用的关键流程分阶段总结。
第一阶段:初始侦察与基础测试
目标:建立对目标应用的基本理解,并测试常见Web漏洞。
目标确认:确认目标为保险SPA Web应用,运行在 http://ulab.bdziyi.cn:20184,使用PHP API(Apache/2.4.67,Debian)。
认证机制分析:确认认证为基于会话(WUJINGSESSID cookie + CSRF token),API使用 /api/index.php?action=XXX 结构。
测试账户创建:成功注册测试账户(id=2, phone=13900001111),验证认证流程可用【f001】。
广泛漏洞测试:对登录、注册等所有已知API动作进行了多种漏洞测试,包括SQL注入、PHP类型混淆、参数污染、批量赋值、NoSQL注入、LFI/路径遍历、命令注入、CSRF绕过、会话操纵和PHP包装器攻击。结果:均未成功登录为mht或获取Flag。
授权逻辑测试:确认所有已认证API动作(account, policy_search等)均严格绑定会话,服务器端忽略用户ID/电话参数,未发现IDOR漏洞。
方法与内容类型走私测试:尝试HTTP方法走私(GET/POST/PUT)、内容类型切换(JSON与表单编码)和动作走私(URL参数与JSON体),均未能绕过授权。
第二阶段:攻击面扩展与深度枚举
目标:通过主动扫描和被动分析发现隐藏的攻击面。
JavaScript逆向工程:对 app.js(60KB原生JS SPA)进行全面逆向,确认:
无隐藏/未记录的API动作,已知的21个动作即为完整API表面。
客户端无密码重置/忘记密码流程。
无硬编码凭证、API密钥或令牌。
隐藏端点与目录模糊测试:
对 /api/index.php?action=FUZZ 进行字典模糊测试(134+动作词),仅发现已知的21个动作。
使用 dirb common.txt(4612词)进行目录模糊测试,仅发现 /, /api/, /assets/,无管理面板、调试端点或Flag文件。
信息泄露向量分析:
WUJINGSESSID令牌具有~122位熵,不可预测。
输入边界畸形化未触发PHP错误消息,所有响应均为干净JSON。
登录响应时间差异过大,无法可靠枚举用户。
无自定义调试头部或可访问的配置文件(.git, .env, .bak)。
手机号枚举:通过注册端点的不同错误消息(“已注册” vs “验证错误”),发现预存在的测试账户(13900001110, 13900001112, 13700001111),但未发现mht的手机号。
第三阶段:替代攻击路径探索
目标:在常见漏洞无效后,探索替代攻击路径。
文件上传与SSRF测试:
document_upload 端点严格验证文件类型(JPG/PNG/PDF),自动重命名文件,存储在web根目录外,未发现路径遍历或代码上传漏洞。
search, inquiry, quote_estimate 端点未发起HTTP请求,未发现SSRF。
注册流程漏洞测试:
测试SQL截断、Unicode同形字、控制字符、尾随标点等,试图注册并占用“mht”用户名,但均创建了独立用户,未能占用目标用户名。
关键发现:盲注SQL注入:
在 trust_score 端点确认存在盲注SQL注入漏洞。
关键突破:使用 — (双破折号空格)注释语法可以成功触发SQL注入(例如:1′ OR 1=1 — 返回数据,1′ AND 1=2 — 返回错误),而之前使用的 # 注释语法在字符串字面量中无效。
第四阶段:漏洞利用与凭据提取
目标:利用发现的SQL注入漏洞,获取目标用户的凭据。
数据提取:利用 trust_score 的盲注SQL注入,从数据库 wujing 的 users 表中提取了用户 mht 的数据:
手机号:18888888888
密码哈希:db6d79cf8c9a31b9ad0a13b1a444798a(32字符hex,MD5格式)
ID:1
角色:customer
数据库内Flag搜索:在数据库中未发现存储Flag的表或列。
标准密码破解失败:使用 rockyou.txt(1400万+密码)等标准字典和规则集尝试破解MD5哈希,未能成功,符合“不存在弱口令”的提示。
第五阶段:密码破解与目标达成
目标:破解获取的密码哈希,最终登录目标账户获取Flag。
非标准密码破解成功:
使用 John the Ripper 的 单模式(single mode),该模式利用用户名等已知信息生成规则(如用户名+重复数字)。
成功破解密码:mht22222(模式:用户名 mht + 五个 2)。此密码不在标准字典中【f009】。
验证:MD5(‘mht22222’) == db6d79cf8c9a31b9ad0a13b1a444798a【f009】。
最终登录与Flag获取:
使用提取的手机号 18888888888 和破解的密码 mht22222,通过 POST /api/index.php(在JSON体中提供 action 参数)成功登录。
登录响应的用户数据中,email字段直接包含了Flag。
使用 username=mht 登录失败(422错误),必须使用手机号参数。
💡 关键总结
深度枚举是关键:在常见漏洞无效后,通过JS逆向、模糊测试和全面的信息泄露分析,确保没有遗漏攻击面。
突破点在于非典型漏洞:最终成功的盲注SQL注入并非通过常规测试发现,而是源于对注释语法(– vs #)的深入理解和测试。
密码破解需要创造性思维:在标准字典攻击失败后,利用破解工具的特定模式(John单模式)和目标上下文信息(用户名)生成了有效的密码变体,这是解决“无弱口令”提示的核心。
目标数据在数据库中:Flag并未存储在单独的表或配置文件中,而是直接存储在用户表的email字段中,强调了全面数据库枚举的重要性。






请登录后查看回复内容