APISandbox | 4ASystem: 4A认证系统下的API平行越权
字数 1142 2025-08-29 22:41:38
4A认证系统下的API平行越权漏洞分析与利用教学
一、漏洞背景
4A系统(Account, Authentication, Authorization, Audit)是企业级统一身份认证系统,本案例中涉及:
- 1个4A认证系统
- 3个Web应用(web1, web2, web3)
- 每个应用使用独立的密码体系,无法通过撞库攻击
二、环境搭建
1. 容器部署
docker-compose build
docker-compose up -d
docker ps -a # 查看容器及端口映射关系
2. 初始凭证
通过查看4A系统日志获取:
docker logs <container_id>
输出内容:
sql.db does not exist!
create sql.db success!
web1: admin/admin888
web2: admin/638ef46bd9053f30932c7d4ce08bb2f8
web3: admin/e1168c6a97223bac0b0aef9ab8682fb4
三、漏洞发现过程
1. 弱口令爆破
使用Burp Suite对web1进行爆破:
- 设置Payload位置(用户名和密码字段)
- 使用常见弱口令字典攻击
- 通过响应中的"success"识别有效凭证
成功获取web1凭证:admin/admin888
2. 源代码泄露
通过目录扫描发现源码泄露,审计发现关键漏洞点。
四、漏洞分析
1. 密码重置流程
正常流程:
- 用户登录web1后台
- 在重置密码界面输入:用户名、老密码、新密码
- web1后端向4A系统API验证用户名密码
- 验证通过后,web1后端向4A系统发起改密码请求
2. 漏洞代码片段
$data = array(
'username' => $username,
'newpasswd' => $newpassword,
'application' => 'web1'
);
关键问题:
- 未验证用户输入的
newpassword - 未要求提供旧密码
application参数可被篡改
3. API接口
- 登录验证API:
http://192.168.10.10:8080/api/v1/sys_authenticate - 密码重置API:
http://192.168.10.10:8080/api/v1/sys_passwdreset
五、漏洞利用
1. 平行越权攻击
攻击者可以:
- 使用web1的弱口令登录
- 构造恶意请求修改web2/web3的密码
- 通过修改
application参数指定目标系统
2. 攻击步骤
- 登录web1系统(
admin/admin888) - 访问密码重置功能
- 构造POST请求:
POST /reset.php?action=changepass HTTP/1.1 Host: web1.example.com Content-Type: application/x-www-form-urlencoded Cookie: PHPSESSID=... username=admin&oldpassword=admin888&newpassword=hacked123&application=web2 - 成功将web2的admin密码修改为
hacked123
六、漏洞修复建议
-
输入验证:
- 对
newpassword进行严格验证 - 强制要求提供旧密码
- 对
-
权限控制:
- 在4A系统API端验证请求来源应用的合法性
- 禁止跨应用密码修改
-
会话验证:
- 加强会话令牌的验证
- 确保密码修改请求来自合法会话
-
日志审计:
- 记录所有密码修改操作的详细日志
- 包括请求来源、时间、修改的应用等
-
安全设计:
- 实现CSRF防护机制
- 对敏感操作进行二次认证
七、总结
本案例展示了在4A认证系统架构下,由于API调用缺乏足够的安全验证导致的平行越权漏洞。攻击者可以利用此漏洞跨系统修改其他应用的密码,完全绕过设计中的隔离机制。这类漏洞在企业级统一认证系统中危害极大,需要开发者特别注意API间的权限控制和参数验证。