声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!
什么是批量分配?
批量分配(也称为自动绑定)可能会无意中创建隐藏参数。当软件框架自动将请求参数绑定到内部对象上的字段时,就会发生这种情况。因此,批量分配可能会导致应用程序支持开发人员从未打算处理的参数。------来自PortSwigger
-
API批量分配漏洞学习与实战 https://mp.weixin.qq.com/s/AQ9fw8YbqugyHdm1o8Y9kQ
配置角色
用户ry仅能看到自己,看不到admin用户。
我们可以根据代码中的批量分配漏洞,给ry用户一个admin的权限,从而能够以管理员身份运行某些危险的功能。
代码中发现批量分配
接口 http://192.168.23.1/dev-api/system/user
com/ruoyi/web/controller/system/SysUserController.java
更新用户信息
user.setUpdateBy(getUsername());
return toAjax(userService.updateUser(user));
private ISysUserService userService;
ISysUserService是一个接口,全局搜索实现该接口的类
SysUserMapper.java 对应的 SysUserMapper.xml
可以看到,只要传入的类这几个值存在,就会更新到数据库中。
也就是说,我们在请求包中添加这几个值,就会更新到数据库,其中没有做过滤。也没有只取特定的值,而是一股脑的将所有存在的参数值传入到数据库中,这就是API批量分配。
普通用户提权至管理员
操作成功
看ry的权限
多了一个1,就是管理员
需要注销重新登陆,才会更新权限
此时就能看到所有用户,也能操作其他需要admin权限才能操作的功能点
无api批量分配的接口(修复方案)
http://192.168.23.1/dev-api/system/user/profile
新创建一个对象,然后从接收到的参数中取得需要的参数。这样即可避免批量分配的问题。
往期推荐
原文始发于微信公众号(进击的HACK):代码审计 | API批量分配导致的普通用户垂直越权到admin
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论