从spring未授权到任意用户密码获取
字数 1161 2025-08-12 11:34:11
Spring框架未授权访问漏洞利用与用户密码获取实战教学
漏洞背景
Spring框架在Web应用中广泛使用,但由于配置不当可能导致未授权访问漏洞,攻击者可以利用这些漏洞获取敏感信息,包括用户凭证。
漏洞发现流程
1. 信息收集阶段
- 观察错误页面:访问网站时注意错误页面特征,识别Spring框架特有的错误信息
- 使用浏览器插件:通过插件识别网站使用的技术栈,确认Spring框架使用情况
- 经验判断:内网项目中Spring未授权访问漏洞出现概率较高
2. 路径爆破
-
初始尝试:
- 使用常见路径字典进行爆破(如祖传字典)
- 初始爆破失败表明API可能需要特定前缀路径
-
路径分析:
- 观察用户跳转页面,发现
/common/api/user/login路径 - 使用Spring常见未授权路径字典爆破
/common{/}路径
- 观察用户跳转页面,发现
3. 敏感信息获取
-
heapdump分析(虽然本例未使用):
- 下载heapdump文件
- 搜索AKSK、password等敏感字段
- 本例中因服务器未上云,无AKSK信息
-
mappings端点利用:
- 访问
/mappings端点查看所有URL映射 - 从下往上仔细检查每个URL,寻找可疑端点
- 访问
漏洞利用过程
关键接口发现
发现敏感接口路径://common//public/xxx/userInfo/12138
请求构造
GET //common//public/xxx/userInfo/12138 HTTP/1.1
Host: xxx.xxx.com
referer: 123
Connection: close
关键点:
- 服务端校验Referer字段存在性但不校验值
- 这种设计通常是为了防止扫描器自动扫描
- 接口直接返回了用户密码(MD5加密形式)
密码破解
- 识别加密方式为MD5
- 使用MD5解密网站尝试破解
- 注意:部分解密网站需要付费
- 批量利用:
- 通过修改userID参数批量获取其他用户密码
- 如
userInfo/{userid}形式
防御建议
-
权限控制:
- 严格配置Spring Security权限
- 避免敏感接口未授权访问
-
Referer校验:
- 如需使用Referer校验,应验证其合法性而非仅检查存在性
-
敏感信息保护:
- 避免在接口中直接返回密码明文或可逆加密形式
- 使用不可逆的强哈希算法(如bcrypt)
-
端点管理:
- 生产环境关闭/mappings等调试端点
- 禁用或保护swagger-ui等API文档界面
经验总结
-
API发现技巧:
- mappings端点是发现隐藏API的有效途径
- swagger-ui是理想的信息来源(虽然本例未发现)
-
参数构造:
- 注意观察服务端校验逻辑(如本例中Referer的校验方式)
- 尝试各种路径变形(如
//path//形式)
-
加密分析:
- 熟悉常见加密方式特征(如MD5的32位十六进制形式)
- 准备多个解密渠道应对付费限制
本教学详细展示了从Spring未授权访问到获取用户密码的完整攻击链,强调了配置安全的重要性及常见防护措施。