使用Hydra暴力破解OWASP Juice-Shop登录时出现假阳性问题求助
解决OWASP Juice-Shop(Angular SPA)中Hydra暴力破解假阳性问题
核心原因
- Juice Shop是Angular单页应用(SPA),你之前请求的
/#/login是前端路由路径,而非真实的后端登录API接口。后端不会处理这个路径,返回的是SPA的入口HTML文件,其中包含登录失败提示的模板文本(比如"Invalid email or password")——不管密码正确与否,这个文本都会存在于HTML中,导致Hydra误判大量假阳性。 - 另外,Juice Shop的登录API接收JSON格式的请求体,而非你之前命令中使用的表单格式(
email=^USER^&password=^PASS^),参数格式不匹配也会导致请求无效,无法触发正确的登录验证逻辑。
解决步骤
1. 定位真实登录API端点
打开浏览器开发者工具(F12)→ 切换到「网络」标签页,在Juice Shop登录页面提交任意账号密码,找到POST类型的请求:
- 真实登录API路径通常是
/api/Users/login - 请求体格式为JSON:
{"email":"admin@juice-sh.op","password":"your-password"} - 响应中,登录成功会返回包含
authenticationToken的JSON,失败则返回包含"Invalid email or password"的JSON。
2. 调整Hydra命令针对真实API
使用以下命令(适配JSON请求体与API路径):
hydra 127.0.0.1 -s 3000 -l admin@juice-sh.op -P rockyou.txt http-post-form "/api/Users/login:{\\"email\\":\\"^USER^\\",\\"password\\":\\"^PASS^\\"}:Content-Type:application/json:F=Invalid email or password"
- 参数说明:
/api/Users/login:真实后端API路径{\\"email\\":\\"^USER^\\",\\"password\\":\\"^PASS^\\"}:转义后的JSON请求体,^USER^和^PASS^会被Hydra替换为遍历的账号密码值Content-Type:application/json:指定请求头,告知后端接收JSON格式数据F=Invalid email or password:用失败响应的特征字符串判断,若响应中找不到该字符串则视为登录成功
你也可以用成功特征来判断(准确率更高),将F=...替换为S=authenticationToken,因为登录成功的响应会包含该字段:
hydra 127.0.0.1 -s 3000 -l admin@juice-sh.op -P rockyou.txt http-post-form "/api/Users/login:{\\"email\\":\\"^USER^\\",\\"password\\":\\"^PASS^\\"}:Content-Type:application/json:S=authenticationToken"
为什么之前的命令无效
- 第一个命令请求前端路由
/#/login:后端返回的SPA入口HTML里本来就包含"Invalid email or password"的模板文本,Hydra每次请求都能匹配到该字符串,要么误判为失败,要么因HTML内容的微小变化误判为成功。 - 第二个命令用
login路径:既不是真实API路径,也没有使用正确的JSON参数格式,请求无法被后端正确处理,自然得不到有效结果。
内容的提问来源于stack exchange,提问作者G6G
相关产品推荐
相关产品推荐

