【JAVA代码审计】华夏ERP_V2.3

news/2025/3/9 10:33:36/文章来源:https://www.cnblogs.com/o-O-oO/p/18639368

免责声明

由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。

一、项目介绍二、项目搭建三、漏洞挖掘3.1 多处sql注入3.2 多处XSS3.2.1 第一处3.2.2 第二处3.3 鉴权绕过3.3.1 第一种3.3.2 第二种3.4 垂直越权(用户删除)3.5 fastjson反序列化四、总结

一、项目介绍

华夏ERP基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。同时对角色和权限进行了细致全面控制,精确到每个按钮和菜单。

技术框架

核心框架:SpringBoot 2.0.0持久层框架:Mybatis 1.3.2日志管理:Log4j 2.10.0JS框架:Jquery 1.8.0UI框架: EasyUI 1.9.4模板框架: AdminLTE 2.4.0项目管理框架: Maven 3.2.3

二、项目搭建

源码地址:https://gitee.com/jishenghua/JSH_ERP/archive/refs/tags/v2.3.zip

源码下载到本地,IDEA打开,等待MAVEN加载

根据配置文件修改数据库配置

jshERP-2.3\src\main\resources\application.properties

创建对应数据库,并导入数据库文件

sql文件:jshERP-2.3\docs\jsh_erp.sql

导入完成后,spring boot启动项目

账号:jsh/123456

三、漏洞挖掘

3.1 多处sql注入

老规矩,先判断使用技术

使用mybatis,搜索关键词${

有不少,这里点第一个进去看一下

参数是name,对应dao层方法名为selectByCinditionRole,转到dao层

往上跟这个方法

接着跟,跟到功能层

这里可以看到name的获取,是来源于search里面,获取到的是map类型也就是键值对,接着往上跟看下这个search是那里来的

跟到了功能层,这里其实是通用的功能层代码,也就是,多处sql注入都是调用这段代码,什么意思呢?

如果你自己尝试跟了几处${,会发现最后都会跟到这一处功能层代码来,因为它是通用的,那么不同的是什么呢,是路由的访问路径,它会根据/{apiName}/的不同触发对应的功能点,但是主要是访问/list就会触发这里

那么如何确认那个路由的search参数里的键是name呢?

我还没总结出来,有一个相对笨的方法,参数是name,那么就使用burp测试功能点,寻找访问路由为/xxx/list,search中存在name的数据包,那个就是对应的功能点。

这里可以用数据库监控看下是否有语句执行。

可以看到有,但是这里没有报错注入,可以使用时间盲注

3.2 多处XSS

这套系统有很多提交表单的地方,并且会在前端回显,一不注意就会产生XSS

3.2.1 第一处

在创建商品处

哇,这么多框,这谁顶得住

这个要测试哪处有,最简单的就是全插

保存回显XSS3,只有这一个单位这个字段有XSS

只要到选择商品就会触发

3.2.2 第二处

这里三个表单都有

3.3 鉴权绕过

先判断使用技术,看是否存在jwt和shiro

查看pom.xml文件,没发现,去看是否存在filter层

存在,并且只有一个文件,点进去看下,看这个名字就是登入相关的

3.3.1 第一种

熟悉的代🐎

这里先判断用户是否登入,userInfo是否为null,没登入的话肯定是不满足的,我们往下看

requestUrl != null && (requestUrl.contains("/doc.html") requestUrl.contains("/register.html") || requestUrl.contains("/login.html"))

判断requestUrl不为null,并且访问路径包含doc.html || register.html || login.html 就放行

由于使用的是contains方法,只要包含就行,我们可以构造这样的url

127.0.0.1:8080/login.html/../xxx/xxxx这里就满足条件还可以访问后台功能点

我这里随便找一个功能点

现在是登入状态,可以看到有数据回显,退出登入再发包

可以看到返回302跳转,我们构造访问路由

有返回数据,存在绕过

3.3.2 第二种

看下代码解释

该Java注释定义了一个名为LogCostFilter的Web过滤器,用于拦截几乎所有网站路径(/*)。
它具有两个初始化参数:
ignoredUrl:值为.css#.js#.jpg#.png#.gif#.ico,表示过滤器将忽略这些文件类型的请求。

filterPath:值为/user/login#/user/registerUser#/v2/api-docs,指定特定路径,但该参数值格式似乎有误,应为实际路径列表。

可以理解为访问路由中存在上面的值,就不会进行鉴权

这种利用和第一处一样,还有一种

这个也比较好理解,访问路由中存在.ico,就会绕过鉴权,而在Servlet容器中,;后面的内容通常不会影响实际的请求处理路径,;后面的内容会进行截断也就是说实际访问的路径还是/user/getAllList

这里两处鉴权都可以用于访问/user/getAllList这个接口,这个接口会回显网站所有用户的账号密码,密码要md5碰撞解密

3.4 垂直越权(用户删除)

在后台有用户删除的功能(管理员才有),抓包看下

对应路由是deleteUser,控制参数是ids

定位代码段

这里没有看鉴权,跟进batDeleteUser方法

这里也没有看到鉴权方法,而是接收ids的值进行批量删除,那么这里就存在问题

没有对用户进行鉴权,那么普通用户也可以进行删除,接口也没有限制访问

登入个普通用户,替换cookie

成功删除

除此之外还有部分用户操作没有鉴权,比如用户信息修改等等,感兴趣的可以自行下去测试

3.5 fastjson反序列化

项目中引入了fastjson

版本为1.2.55

全局搜索JSON.paeseObject(

可以看到有不少,我这里随便点一处看参数是否可控

这里参数可控,我们尝试构造访问路由访问

测试个简单的dns链

{"@type":"java.net.Inet4Address","val":"xxx.dnslog.cn"}

收到回显,接下来尝试后续利用,找个版本符合的绕过链

仓库:https://github.com/safe6Sec/Fastjson

这个实话实话,我试了几个,不行

应该是有的,但是我没找到,

2022年的蓝帽杯有一题赌怪用的就是华夏erp

参考链接:https://cloud.tencent.com/developer/article/2118748

感兴趣的可以自己下去尝试,就是跑链

总结

这套系统的漏洞应该还有,不局限于我文章中写到的基础,代码中有文件上传代码,是安装插件的,但是网站我没找到安装插件的功能,fastjson链的利用,我在网上找了很多篇文章,这套系统关于这个点只到dns,所以我目前也不知道哪条链可以用,通过爆破应该可以试出来。

原创 C@ig0 菜狗安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860955.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基坑监测识别摄像机

基坑监测识别摄像机的应用能够有效监控基坑施工的过程,提高施工的安全性和效率。同时,它也能减少施工事故的发生,降低施工风险,保障工程的正常进行和人员的安全。总之,基坑监测识别摄像机是一种有益的施工监测工具,可以有效保障基坑施工的安全和稳定,提高施工质量和效率…

微服务架构设计模式PDF免费下载

世界十大软件架构师之一、微服务架构先驱者亲笔撰写,微服务实用落地指南。示例代码使用Java编程和Spring框架适读人群 :本书的重点是架构和开发,适合负责开发和交付软件的任何人(例如开发人员、架构师、 CTO等)阅读。示例代码使用Java语言和Spring框架 世界十大软件架构师…

在抖音发现有一个大一新生求期末作业,顺手做了一下(C语言 学生考勤)

这三个要求很简单 但是这个考核,要求课程结束后,自动完成考核要求有点模糊#include <stdio.h> #include <string.h> #define MAX_STUDENTS 10 #define MAX_CLASSES 4 #define MAX_NAME_LENGTH 50typedef struct {char name[MAX_NAME_LENGTH];char gender[10];int…

Python编程快速上手:让繁琐工作自动化(第2版)PDF免费下载

Python编程从入门到实践姊妹篇,零基础自学Python教程书籍,提供配套同步教学视频、在线编程环境!针对Python3.X版本更新适读人群 :本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用非常强大的编程语言和工具,并且体会…

几页画作

时长由于自己过于菜而痛不欲生而产生画画灵感……时光花火,水月星辰

学业之船航海记录——软工篇

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 软工课程总结学号 102201118引言 上回说道,我的学业之船已在大学的海洋上行驶了一半的航程,这期间也遇到一些危…

这是篇博客

博客:软件工程实践课程回顾与总结 一、学期回顾 1.1 回顾你对于软件工程课程的想象 在学期开始之前,我对软件工程课程的期望在于提升编程能力。我想通过这门课程,能够深入了解软件开发流程中的实际操作,能够自主或协作实现开发出软件产品。 我原以为软件工程会是一个手把手…

苦尽甘来

一、学期回顾 1.1 回顾对于软件工程课程的想象 软件工程(实践者的研究方法)是一门研究如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,并运用计算机科学理论和技术以及工程管理原则和方法,按预算和进度要求开发和维护满足用户要求的软件产品的学科‌。‌在…

【杂谈】Kafka的日志段为什么不用内存映射?

什么是内存映射(Memory-Mapped File)? 内存映射(mmap)是一种将文件内容映射到内存中的技术,应用程序可以像操作内存一样对文件内容进行读写,而不需要显式地进行磁盘 I/O 操作。修改的内容会自动由操作系统同步到磁盘。 内存映射需要读取磁盘文件吗? 需要。毕竟,内存中…

【WEB安全】利用shuji还原webpack打包源码

一、前言二、webpack简介三、怎么确定是webpack打包站点呢四、shuji(周氏)配置4.1 安装nodejs环境4.2 安装shuji工具4.3 .js.map文件存放位置4.4 运行shuji 反编译.js.map文件获取源码4.5 代码审计五、实战记录免责声明 本公众号所分享内容仅用于网络安全技术讨论,切勿用于违…

万兴PDF专家绿色便携版

点击上方蓝字关注我 前言 万兴PDF一款非常实用的国产软件,它就像是一个超级工具箱,里面装满了处理PDF文件的各种工具。你可以用它来新建PDF、修改PDF里的内容、把PDF转成其他格式,还能给PDF签名、压缩大小、合并多个PDF,甚至比较两个PDF文件的不同。 这款软件的中文版设计得…

2024 第一届Solar应急响应

Tw0队伍 writeup 一、简介 欢迎有更好的解题思路一起交流学习。最好能来点写自动化一把梭工具的代码思路,哈哈哈! 二、 解题情况三、CTF题 签到题目描述: 本题作为签到题,请给出邮服发件顺序。 Received: from mail.da4s8gag.com ([140.143.207.229]) by newxmmxszc6-1.qq.co…