代码审计 | API批量分配导致的普通用户垂直越权到admin

admin 2024年9月9日23:02:33评论25 views字数 1081阅读3分36秒阅读模式
代码审计 | API批量分配导致的普通用户垂直越权到admin

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

代码审计 | API批量分配导致的普通用户垂直越权到admin

什么是批量分配?

批量分配(也称为自动绑定)可能会无意中创建隐藏参数。当软件框架自动将请求参数绑定到内部对象上的字段时,就会发生这种情况。因此,批量分配可能会导致应用程序支持开发人员从未打算处理的参数。------来自PortSwigger

配置角色

代码审计 | API批量分配导致的普通用户垂直越权到admin

代码审计 | API批量分配导致的普通用户垂直越权到admin

代码审计 | API批量分配导致的普通用户垂直越权到admin

用户ry仅能看到自己,看不到admin用户。
我们可以根据代码中的批量分配漏洞,给ry用户一个admin的权限,从而能够以管理员身份运行某些危险的功能。

代码中发现批量分配

接口 http://192.168.23.1/dev-api/system/user
com/ruoyi/web/controller/system/SysUserController.java

代码审计 | API批量分配导致的普通用户垂直越权到admin

代码审计 | API批量分配导致的普通用户垂直越权到admin

更新用户信息

        user.setUpdateBy(getUsername());
return toAjax(userService.updateUser(user));
private ISysUserService userService;

ISysUserService是一个接口,全局搜索实现该接口的类

代码审计 | API批量分配导致的普通用户垂直越权到admin

代码审计 | API批量分配导致的普通用户垂直越权到admin

SysUserMapper.java 对应的 SysUserMapper.xml

代码审计 | API批量分配导致的普通用户垂直越权到admin

可以看到,只要传入的类这几个值存在,就会更新到数据库中。
也就是说,我们在请求包中添加这几个值,就会更新到数据库,其中没有做过滤。也没有只取特定的值,而是一股脑的将所有存在的参数值传入到数据库中,这就是API批量分配。

普通用户提权至管理员

代码审计 | API批量分配导致的普通用户垂直越权到admin

操作成功

代码审计 | API批量分配导致的普通用户垂直越权到admin

看ry的权限

代码审计 | API批量分配导致的普通用户垂直越权到admin

多了一个1,就是管理员
需要注销重新登陆,才会更新权限

代码审计 | API批量分配导致的普通用户垂直越权到admin

此时就能看到所有用户,也能操作其他需要admin权限才能操作的功能点

无api批量分配的接口(修复方案)

http://192.168.23.1/dev-api/system/user/profile

代码审计 | API批量分配导致的普通用户垂直越权到admin

新创建一个对象,然后从接收到的参数中取得需要的参数。这样即可避免批量分配的问题。

往期推荐

代码审计 | 发现项目的swagger-ui未授权访问

记一次绕过限制SQL注入bypass

好用!一键化搭建各种虚拟机

Windows上搭建黑苹果(非从头开始)以及一些心得

避免错过隐蔽资产,burpsuite识别网站指纹

微信小程序/网页动态调试的方法

原文始发于微信公众号(进击的HACK):代码审计 | API批量分配导致的普通用户垂直越权到admin

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月9日23:02:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   代码审计 | API批量分配导致的普通用户垂直越权到adminhttps://cn-sec.com/archives/3141131.html

发表评论

匿名网友 填写信息