24-关于华夏ERP的搭建、审计、扫描
1、使用IDEA和PHPStudy搭建华夏erp
需要先下载 jshERP3.3-最新包,JSH_ERP-v3.3源码
-
前端部署
- 在网站根目录下创建一个名为
ERP的文件夹,将前端压缩包前端包/dist.zip解压到该目录下 - 使用小皮创建
huaxi.com网站,连接到刚刚的ERP目录
访问
http://huaxi.com,出现如下页面说明前端部署成功
- 在网站根目录下创建一个名为
-
后端部署
-
使用IDEA打开
JSH_ERP-v3.3\jshERP-boot(使用 jdk1.8 ) -
根据
application.properties文件内容-
配置数据库(
JSH_ERP-v3.3\jshERP-boot\docs\jsh_erp.sql导入数据库)
-
配置redis

运行
ErpApplication.java,出现如下页面说明后端部署成功

-
-
-
连接前后端
-
参考
jshERP3.3-最新包\nginx配置文件-参考配置\nginx.conf来配置华夏erp的nginx配置文件Nginx1.15.11\conf\vhosts\huaxi.com_80.conf仅需添加如下代码,在重启 ngnix 即可
location /jshERP-boot/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:9999/jshERP-boot/; }
再次访问
http://huaxi.com发现已无错误信息,登入管理员账号 admin/123456。自此华夏erp搭建完成。
-
2、审计华夏erp权限绕过漏洞并说明漏洞原理
-
审计代码发现当请求的 URL 包含
/doc.html、/user/login或/user/register,则直接放行,不进行过滤。即如果构造相应的 url 则可以正常访问关键业务,实现权限绕过。
-
漏洞实现:构造下面路径可以实现无需登录,即可获取全部用户数据信息
/jshERP-boot/doc.html/../user/getAllList(注意:防止ngnix代理处理,需要修改端口号,直接让后台服务发包)
-
3、审计华夏erp代码执行漏洞
-
审计代码发现发现需要验证当前登录的用户信息,该接口只能管理员才能访问,在上一步中已经拿到了管理员账号,所以现在只需上传后端可以解析的jar文件,即可造成恶意代码执行

-
上传文件后,开始调试。跟进代码发现内部使用了如下组件
<dependency> <groupId>com.gitee.starblues</groupId> <artifactId>springboot-plugin-framework</artifactId> <version>2.2.1-RELEASE</version> </dependency> -
深入分析发现2.2.1版本依赖了 pf4j 框架3.1.0,相关插件格式和pf4j要求一致

-
因此直接使用 pf4j 生成 jar,下载 pf4j 3.1.0版本官方样例并构造恶意的插件
static { try { Runtime.getRuntime().exec("cmd.exe /c calc"); } catch (IOException e) { throw new RuntimeException(e); } } -
插入后,对文件进行编译

-
编译成功后,将jar包上传,可以执行命令

-
4、结合权限绕过漏洞,分析审计华夏erp任意密码重置漏洞
-
创建新用户test/qaz23,test01/qaz123
-
登入找到重置密码模块,抓包发现疑似密码重置接口
/jshERP-boot/user/resetPwd,在源码中查找,发现存在密码重置接口且审计发现密码一律重置为123456
-
resetPwd方法中包含具体重置密码逻辑,可以看到admin密码无法重置,因此该系统存在一个隐藏账号
admin并且密码是123456,根据传入的id值可以修改管理员以外的任意用户

-
此处结合上面的认证绕过问题,得到test-id:132,test01-id:133,修改test用户重置密码的请求数据包,修改请求行为
/jshERP-boot/doc.html/../user/resetPwdid改为133,发送成功重置了id为133的test01用户密码,即仅需要修改id就可以重置除管理员外任意用户的密码。
-
5、安装Dependency Check并对华夏erp进行漏洞扫描
-
pom.xml文件中引入插件<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> -
运行插件
在IDEA主界面的右边侧边栏上找到
Maven模块,在Plugins目录下双击Depedancy-check即可成功运作。
-
报告生成


6、安装codeql并对华夏erp进行漏洞扫描
-
安装codeql
-
下载 codeql
-
配置环境变量(将下载的文件添加进环境变量,注意路径中不能出现中文等字符)
验证:

-
-
vscode 插件(官方提供了VSCode编写CodeQL的插件)

-
华夏erp进行漏洞扫描
-
配置maven环境变量(由于因为华夏erp项目是基于Maven构建的,CodeQL在创建数据库时,会自动探测并使用对应的编译反式)
D:\idea\IntelliJ IDEA 2024.1.4\plugins\maven\lib\maven3\bin验证:

-
创建“数据库”
数据库是引擎将源码转换为可以识别的格式,用于后续规则分析(注意路径中不能含有中文等特殊字符)
在华夏erp目录下执行如下命令,会自动编译并且为该项目创建⼀个名为HuaXia-qldb的QL数据库。
codeql database create HuaXia-qldb -l java -j 0
-
执行查询
使用官方默认的java漏洞查询规则进行分析并将结果保存到当前目录
codeql database analyze HuaXia-qldb java-security-extended.qls --format=sarif-latest --output=results.sarif -j 0 -M 5000
扫描完成在目录下生成
results.sarif文件 -
分析结果
安装sarif viewer插件

使用vscode打开results.sarif

-

浙公网安备 33010602011771号