Java代码审计实战分享 | 一文详解RuoYi 4.2
2023-11-13 14:22:53 Author: www.freebuf.com(查看原文) 阅读量:12 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

项目运行环境

环境搭建:

Ruoyi:4.2

MYSQL: 8.0.32 MySQL Community Server

JDK:jdk-8u161-windows-x64

MAVEN:apache-maven-3.2.3-bin

Shiro反序列化漏洞

Shiro反序列化漏洞

Shiro(<=1.2.4):AES加密的密钥默认硬编码在代码里,任何有权访问源代码的人都可以知道默认加密密钥。攻击者可以通过秘钥创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。

Shiro(1.2.4<=版本<=1.4.1):需要一个合法的登录账号,利用用户的RememberMe cookie作为Padding Oracle Attack 的前缀,然后制作精心制作的RememberMe来执行Java反序列化攻击。

Shiro(1.4.2<=):Shiro 1.4.2 版本对于Shiro 反序列化来说是个分水岭,由AES-CBC加密模式改为AES-GCM,在不知道秘钥的情况下可利用工具对秘钥进行爆破,但是相对来说是很困难的。

虽然不同的版本攻击方式有所区别,但是只要秘钥泄露或者秘钥硬编码在代码中该系统就是不安全的。

查看pom.xml文件可以查看Shiro依赖包的版本为1.4.2,如下图所示:1699847088_65519bb081150573e897e.png!small?1699847089125

在项目中搜索CipherKey,可以发现Shiro的秘钥是硬编码在代码中,如下图所示:

1699847148_65519bece47ffd4c6ea4c.png!small?1699847149556

直接利用工具shiro_attack-2.2.jar

1699847177_65519c09bf40e7e189e6d.png!small?1699847178442

执行相关命令,如下图所示:

1699847204_65519c2422f03e3ea3301.png!small?1699847204714

SQL注入

该项目使用Mybatis作为数据库持久化框架,全局搜索${寻找SQL注入,如下图所示:

1699847247_65519c4f6f082bdf80a78.png!small?1699847248028

点击进入SysRoleMapper.xml,SQL注入点在第58行,直接使用占位符$,如下图所示:

1699847275_65519c6b1441e65040ff3.png!small?1699847275859

点击左侧箭头快速跳转到DAO层,如下图所示:

1699847309_65519c8d34328995b13eb.png!small?1699847309857

Ctrl加鼠标左键,选择第一个。最终来到 SysRoleServiceImpl 的实现层,如下图所示:1699847368_65519cc80fca590a2fd80.png!small?16998473687341699847376_65519cd068ddb4c124210.png!small?1699847377130

进入SysRoleServiceImpl后,再回溯到Controller层,SysRoleController中第59行和第69行都有调用这个方法,如下图所示:1699847406_65519cee3f3ed678a6820.png!small?1699847407000

键盘按住Ctrl加鼠标左键,点击 SysRole ,查看SysRole 具体代码,其中发现了 DataScope ,如下图所示:16998


文章来源: https://www.freebuf.com/articles/web/383646.html
如有侵权请联系:admin#unsafe.sh