项目结构
通过上图可以看到该项目主要使用了分包分模块的架构及若依框架,其他的框架技术不难通过若依框架的通用技术分析出来。引入的开源组件通过pom.xml获取。
漏洞审计
shiro反序列化
pom文件可知shiro版本为1.4.0
同时去查看shiro的配置文件,即shiroConfig.java。发现加密密钥硬编码在代码中。
fCq+/xW488hMTCD+cmJ3aQ==
使用相关工具进行复现
直接使用一把梭工具shiro反序列化检测工具
爆破出密钥
之后就可以命令执行
SQL注入审计
通过查看包可以发现使用了mybatis框架
按照sql注入对应框架的手段,全局搜索$符号。
这里这个params.dataScope不是很明白是什么参数,只能先向上跟进一手。
往上回溯找到SysRoleServiceImpl.java
1 |
|
寻找controller,在RoleControoler.java里面找到
1 |
|
可以知道接口为system/role/list
使用浏览器找到对应功能,对应的是系统角色的刷新功能。
抓包获取也没有获得这个参数
没有办法,就在网上搜索了一下这个关键字。
https://blog.csdn.net/weixin_40967156/article/details/116265306
大致的意思是这个params.dataScope
是Sysrole的一个属性,也确认了Sysrole也有这个属性。
重新抓包,这次选择包含关键字搜索。
发现了关键的
params%5BbeginTime%5D
形式。
于是构造以下payload
1 | params%5BdataScope%5D=and sleep(2) # |
测试成功存在时间注入。
使用报错注入
1 | params%5BdataScope%5D=and updatexml(1,concat(0x7e,(select database()),0x7e),1) |
任意文件下载
文件上传下载漏洞搜索关键字download,upload,write,fileName,filePath.
1 | public class CommonController |
可以知道似乎没有对路径做任何过滤。
在磁盘根目录下新建一个2.txt,里面
构造以下payload
1 | http://127.0.0.1/common/download?fileName=../../../../2.txt |
XSS漏洞审计
全局搜索XSS关键字查看是否有XSS过滤器。就算有过滤器也有可能有以下情况。
- 未开启过滤器。
- 开启了过滤器,但是排除了某些过滤器。
在application.ym里下找到了以下设置
可见对/system/notice/以下排除了XSS过滤。
到指定路由新增一个页面,输入xss。即可复现成功。