0x00 前言

学了很久的代审基础,终于到审计项目了。在这一阶段,应该要先学习前辈们的经验,同时要有自己的思考与实践。师傅们尝试过的,没尝试过的,都要尝试一遍。

0x01 基础

环境配置

本次审计使用华夏ERP的两个版本,最新版v3.5和老版本v2.3。项目地址:

搭建过程不必多言,麻烦事还是很多的,自行根据报错解决吧。

需要注意的是,v3.5是前后端独立部署的,后端如果没有配置好Redis,前端是收不到验证码的。

审计思路

  1. 首先要分析项目配置和依赖,如pom.xml、web.xml等,特别是pom.xml,可以从组件中寻找漏洞。

0x02 组件漏洞

Fastjson 反序列化漏洞

先看pom.xml,v2.3的Fastjson版本是1.2.55,v3.5的版本是1.2.83。前者存在漏洞,后者目前不存在漏洞。

关键字parseObject,限定目录为controller:

image-20250601145638313

这里很多选项都可以攻击,就不一一列举了。parseObject(search)是最明显的;可能有些人会对parseObject(beanJson, Class)类型的产生怀疑,觉得不可行,也没有去多尝试。事实上,这也是可行的。这个项目没有对参数做检测,只要第一个参数是可控的,就可以进行攻击,不需要在乎第二个参数。

所以代码审计的一个基本素质,就是多尝试,多思考

仅仅这样,就够了吗?我还没有探索为什么parseObject(beanJson, Class)也可以。

······ 探索了一段时间,没搞明白,以后再说。

Log4j2尝试

2.3版本的Log4j2依赖:

image-20250616145533101

这个版本存在漏洞,但是该项目实际上并不是使用Log4j2管理日志,而主要是Logback,em,乱得很。3.5也一样。

但是,关于组件漏洞,我还是获得了一些收获:

  1. 先确定组件版本,了解对应漏洞
  2. 观察漏洞所在功能点是否被使用,或者说组件是否得到应用(这很反直觉,难道添加了组件不去用?)
  3. 构造payload,尝试攻击

第二点看起来很反直觉,但是该erp就是这种情况。它用到了Log4j2,但是桥接给了Logback,日志系统本质上还是Logback处理,所以这里Log4j2相关的漏洞就不存在了。

Filter鉴权漏洞

v2.3,该项目只有一个Filter:LogCostFilter,用于判断用户是否登录。

下面的几个判断只要满足其一即可

首先找会话session里的userinfo:image-20250616165135874

再判断url是否包含/doc.html*或者/register.html*或者/login.html*image-20250616165233844

再判断是否是访问静态资源:

image-20250616165339888

最后判断是否是允许的路由:image-20250616165507548

具体的代码请读者自行去看,这里的重点是如何绕过这些判断,使得我们在非登录状态下可以访问任意路由和资源。

第一个判断是从session里面拿,不知道绕过方法。

第二个判断的关键在于contains方法,该方法会判断url里是否存在给定的参数字符串,很容易绕过:image-20250616170419259

第三个判断如下绕过:image-20250616170538376

最后一个判断采用第二个判断的绕过方法即可。这些都是基本的URL绕过技巧。

现在我们可以在非登录状态下访问任意路由,正好/user/getAllList路由会爆出所有用户的信息:image-20250616171141353

0x03 路由分析

0x0x 参考教程

深入学习Java代码审计技巧—详细剖析某erp漏洞-先知社区

【代码审计系列】第一篇:华夏ERP(附java代码审计方法论总结) | CN-SEC 中文网


© 2024 Pax 使用 Stellar 创建
总访问 0 次 | 本页访问 0

本博客所有文章除特别声明外,均采用 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可协议,转载请注明出处。