逻辑让我崩溃之越权姿势分享
字数 1196 2025-08-27 12:33:37
越权漏洞测试的三种高级技巧
0x00 前言
本文详细分析三种越权测试的高级技巧,每种方法都配有实际案例说明。这些方法适用于不同加密场景下的越权测试,能够帮助安全测试人员在复杂环境中发现越权漏洞。
0x01 修改返回包实现越权
应用场景
- 系统使用加密算法加密请求参数
- 返回包为明文格式
- 前端展示依赖返回包中的明文数据
案例详解
测试目标:银行账户系统"我的账户"功能
-
正常流程:
- 请求"我的账户"功能(加密POST请求)
POST /users/cardcenter.do HTTP/1.1 HOST: 1.1.1.1 RSA=WEFGH%^UYBF&HF)WHG($@hh9h9HG)FKJHSKGBGIEBUGIBG(&S(GHEW(*GHHG)))- 返回明文账户信息:
{ "body": { "Name": "王刚", "cardNO": "12345678", "value": "24.33", "Address": "北京市朝阳区亮马桥", "tel": "13333333333" } } -
漏洞利用:
- 修改返回包中的
cardNO为其他账户号"62308452" - 前端展示修改后的账户信息
- 点击"账户详情"时,系统使用篡改后的卡号查询
- 修改返回包中的
-
结果:
- 成功获取他人账户详情:
{ "body": { "Name": "郭德岗", "cardNO": "222222", "Type": "CNY", "calType": "001", "bankAddr": "2334", "cardValue": "24.33", "Address": "北京市朝阳区亮马桥", "tel": "13333333333" }, "sublist": { "2222220102": { "cardValue": "1000.00" } } }
危害
- 水平越权查询他人敏感信息(卡号、证件号、手机号)
- 在某些功能点可能实现使用他人银行卡进行缴费等操作
0x02 寻找解密接口实现数据解密
应用场景
- 请求不加密,POST参数为明文
- 返回数据中部分字段加密,部分字段明文
- 前端需要使用的参数返回明文,其他参数为密文
案例详解
测试目标:密码找回功能
-
正常流程:
- 使用证件号找回密码,返回部分信息:
{ "name": "加密数据1", "phone": "加密数据2", "id_number": "加密数据3" }- 仅显示"姓名"和"联系方式"的明文
-
漏洞发现:
- 在"验证身份"步骤的返回JS代码中发现手机号明文
- 测试发现可将其他加密参数放入相同位置获取明文
-
攻击方法:
- 对忘记密码功能进行暴力破解,收集所有返回的加密数据
- 在验证身份步骤,使用收集的加密数据作为参数
- 从返回信息中获取对应明文
危害
- 可获取所有用户的完整信息(证件号、手机号、姓名、用户名)
- 形成完整的用户数据字典
0x03 制造错误获取请求结构
应用场景
- 请求数据为JSON格式
- 主要参数在data部分进行加密
- 常规测试无法获取请求结构
案例详解
测试目标:加密API接口
-
正常请求:
POST /hello.do HTTP/1.1 Host: 127.0.0.1 { "_zh": "1324", "data": "QWERT+YHFGGi+fgfyefgyef+6/" } -
测试方法:
- 使用其他接口的data部分替换当前请求的data部分
- 触发系统报错,返回缺失参数信息
-
结果分析:
- 系统返回错误信息指明缺失参数:
Missing required parameters: name, ID, phone- 根据报错信息构造明文请求:
{ "name": "test1", "ID": "123456", "phone": "13333333333" }- 测试发现系统接受并处理明文请求
关键点
- 确认系统是否接受明文请求并返回明文响应
- 通过错误信息获取必要参数名称,减少猜测工作
0x04 总结
| 方法 | 适用场景 | 关键技巧 | 危害程度 |
|---|---|---|---|
| 修改返回包 | 请求加密,返回明文 | 篡改返回数据影响后续请求 | 高(可获取他人信息并操作) |
| 寻找解密接口 | 返回部分字段加密 | 利用系统自身的解密机制 | 高(可获取完整用户数据) |
| 制造错误 | 请求结构未知 | 通过错误信息反推参数结构 | 中高(取决于获取的信息量) |
这三种方法针对不同加密场景提供了有效的越权测试思路,在实际测试中可根据系统特点选择合适的方法或组合使用。