代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

 


最近在开发项目没什么能发的,就把前段时间Bootdo这个开源框架的审计结果发一下吧。

 

01

项目介绍



– 项目名称:lcg0124/bootdo

– 项目地址:

https://github.com/lcg0124/bootdo

 – 项目描述:一个资产挺多且有超多大型企业单位使用的java框架。

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

 

02

资产情况


代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

 

03

代审分析


01

越权+信息泄露

代码侧接口未全部使用鉴权注解,导致部分高危功能任意账户即可越权操做,信息泄露在于user的密码/session的获取。

 

当我使用管理员账户进行登录时:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

随便访问一个接口,比如数字字典会触发shiro权限认证:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

得到所有应该有的权限。

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

这两张表是用于得到该角色有什么样的权限的角色权限绑定的表。

然后我们看下低权限用户(ldh)的功能:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

只有一个后台进入界面的权限。

然后我们分析数据库:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

先用用户ID绑定角色ID然后用角色ID绑定菜单权限。

逻辑是这样,但是我们登录的ldh没有绑定任何角色。

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

访问菜单是没有权限的,我们确定他是用注解的方式加入权限控制的,所以我们要找没有鉴权的。

比如获取所有用户的:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

http://192.168.0.105/sys/user/list?limit=10&offset=1&name=&deptId=

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

越权得到所有用户及其密码密文。

比如越权获取所有用户的在线session或者强制退出某个session的用户:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

sessionlist

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

又比如用户处理节点的全部:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

比如查看所有的请假审批流程:

http://192.168.0.105/activiti/task/gotoList?limit=1000000&offset=0

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

都是没鉴权的:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

包括定时任务的添加删除:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

其余的增删不做过多截图,威胁点都已经提供。

通用型:CNVD-C-2024-22302

 

02

SQL注入


 

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

以Log查询的日志模块为例:

Sort

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

Order

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

有druid的sql waf,稍微小测试一下。

通过报错注入对其进行注入。注入点在排序的sort和order。

但是线上环境中存在对报错统一处理的情况,这里我用sqlmap跑出注入payload,无论是盲注还是延时都可以。

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

从源码中看待此处注入:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

全局搜索未做预编译处理的代码:

以Log日志模块为例子:

如果不想下载源码进行调试,可以直接访问github的源码地址:

https://github.com/lcg0124/bootdo/blob/master/bootdo/src/main/resources/mybatis/common/LogMapper.xml

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

只要让offset即sort的传入值不为空即可进入该条件,然后对sort直接报错注入即可,对order需要加入,使其另成语句。

结果就是sort处payload:updatexml(1,concat(0x7e,current_user,0x7e),1)

order处payload:,updatexml(1,concat(0x7e,current_user,0x7e),1)

 

03

存储XSS

代码侧拦截器对XSS的过滤条件太粗糙,导致普通构造一下语句即可绕过,此为全站问题,甚至随意在URL上输入payload,也会在日志模块弹出。

 先到com.bootdo.system.filter.XssHttpServletRequestWrapper,我们可以直接看到:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

Xss的处理是Jsonp.clean()方法:

处理过滤:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

白名单属性和方法都写明。

所以我们构建一个简单的payload<script>top[“al”+”ert”](`xss`);</script>

方法还有很多,随便找个写入的地方:

比如数据字典中点添加的随便一个文本框:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

提交后:

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

 

04

随便聊聊


 最近没啥能发的,没啥好看的,三天两头像这样发个报告得了。

原文始发于微信公众号(阿呆攻防):代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审)

版权声明:admin 发表于 2024年2月5日 下午1:30。
转载请注明:代审分析|Bootdo框架通用型漏洞SQL注入+越权+信息泄露+存储XSS(一文全审) | CTF导航

相关文章