若依CMS-4.5.1代码审计
前期准备
源码
Releases · yangzongzhuan/RuoYi
导入sql文件
修改配置文件src/main/resources/application-druid.yml
Shiro反序列化
pom.xml中发现引入了Shiro组件
全局搜索cipherKey在src/main/resources/application.yml
找到硬编码了密钥信息
1 | zSyK5Kp6PZAAjlT+eeNMlg== |
发现login逻辑中有一个Boolean参数rememberMe
抓包验证
查看subject.login跳转到jetbrains://idea/navigate/reference?project=RuoYi-4.5.1&path=~\.m2\repository\org\apache\shiro\shiro-core\1.7.0\shiro-core-1.7.0.jar!\org\apache\shiro\subject\Subject.class
说明已经来到了Shiro对应的Jar包中,用的Shiro进行的鉴权
在知道Shiro加密密钥和确认Web使用了Shiro进行登录认证鉴权的前提下可以通过漏洞利用工具直接进行利用
Apache Shiro <=1.2.4版本属于密钥硬编码且使用AES-CBC加密模式,在Apache Shiro 1.2.4版本之后则是由用户指定密钥且加密模式更改为了AES-GCM
查看版本
工具直接打即可
Thymeleaf模版注入
发现thymeleaf组件 版本为2.0.0
先全局搜一下::
查看哪些组件可控
src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java
接受两个参数
1 | * @param fragment 页面中的模板名称 |
构造payload
攻击参考
1 | POST /demo/form/localrefresh/task HTTP/1.1 |
SQLInjection安全问题
RuoYI CMS使用了Mybatis持久层框架,而在MyBatis中会使用XML或注解来配置和映射原生信息将接口和Java的POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录,所以我们可以通过全局检索”${}”来确定未使用预编译的可疑位置,随后进行参数回溯分析来确定漏洞是否真实存在
根据对应的mapper接口<mapper namespace="com.ruoyi.system.mapper.SysDeptMapper">
检索接口的具体调用点有那些位置
向上回溯Controller层
@RequiresPermissions注解表明接口访问权限
@ResponseBody注解表明会将返回值写入http响应
还需要看一下上层在调用接口的时候是否有做过滤处理
发现没有 那么就可以确定/system/dept/list存在sql注入
正常请求没有参数,可以手动构造params[dataScope]
丢给sqlmap跑一下
在 Java 后端中,这样的参数会自动映射为一个嵌套的 Map:
1
2 Map<String, Object> params;
// params.get("dataScope") -> 值为 ""或者,如果是实体类中写了
Map<String, Object> params
字段,也会映射进去。
1 | deptName= |
1 | python sqlmap.py -r C:\Users\31702\Desktop\req.txt --batch |
其余的漏洞点同理,这里再给一处
从SysUserMapper出发
回溯Controller层
抓个包
手动添加params[dataScope]
1 | pageSize=10&pageNum=1&orderByColumn=createTime&isAsc=desc&deptId=100&parentId=&loginName=&phonenumber=&status=¶ms%5BbeginTime%5D=¶ms%5BendTime%5D=¶ms[dataScope]= |
文件上传导致XSS
文件上传位置
全局搜FileUpload定位到上传位置
跟进
紧接着在这里调用重载的upload方法来进行文件上传操作
然后就是文件后缀和长度的检测
1 | public static final void assertAllowed(MultipartFile file, String[] allowedExtension) |
包含了html文件和pdf文件可以用于进行上传对应类型的文件,如果支持在线解析则可以导致XSS