嗨,大家好,我是闪石星曜CyberSecurity创始人Power7089。
欢迎大家搜索并关注我的VX:闪石星曜CyberSecurity
本文是【炼石计划@Java代码审计】内部圈子原创课程,公益分享给大家学习。
如需转载,请详细注明来源。
欢迎大家搜索并添加我的好友【Power_7089】,备注CSDN,邀请你进入安全交流群。
配套练习环境获取:
百度云链接:
链接:https://pan.baidu.com/s/11rDre4Q32wqn7gMRyEmIyw
提取码:4nee
123云盘(不限速不用登录):
https://www.123pan.com/s/FWzDVv-JxCud
迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。
1、Windows 10
系统。
2、Java版本为1.8.0_261
。
3、Mysql版本为5.7
。我用的是PHPstudy集成的。
4、IDEA版本随意。
①、命令行进入Mysql后,创建数据库名为tmalldemodb
,并切换使用该数据库,如下图所示:
②、将项目文件中的/sqls/tmalldemodb.sql
的数据导入到tmalldemodb
数据库,注意导入路径中应使用正斜杠/
,如下图所示:
③、使用IDEA打开本项目,等待Maven自动加载依赖项,如果时间较长需要自行配置Maven加速源。几个现象表明项目部署成功。pom.xml
文件无报错,项目代码已编译为class
,Run/Debug Configurations...
处显示可以运行。如下图所示:
④、修改src/main/resouces/application.properties
配置文件内容,具体如下图所示:
⑤、点击启动Run/Debug Configurations...
本项目,启动成功如下图所示:
⑥、项目访问地址如下:
前台地址:http://127.0.0.1:8088/tmall
后台地址:http://127.0.0.1:8088/tmall/admin
本项目Github地址:
https://gitee.com/project_team/Tmall_demo
本项目是基于Maven构建的。对于Maven项目,我们首先从pom.xml
文件开始审计引入的第三方组件是否存在漏洞版本,然后进一步验证该组件是否存在漏洞点。
本项目引入的组件以及组件版本整理如下。
组件名称 | 组件版本 |
---|---|
SpringBoot | 2.1.6.RELEASE |
Fastjson | 1.2.58 |
Mysql | 5.1.47 |
Druid | 1.1.19 |
Taglibs | 1.2.5 |
Mybatis | 3.5.1 |
Log4j | 2.10.0 |
整理完成后,如何确定该组件版本存在漏洞?最简单的方法无疑于从搜索引擎进行搜索,比如关键字:Fastjson 漏洞
。进一步可从组件官网,CVE,CNVD,CNNVD等网站查询。
通过查看pom.xml
文件中引入的第三方插件,且经过搜索查询,发现Fastjson、Log4j、Mybatis引入存在漏洞的版本,我们进一步验证是否存在漏洞。
本项目引入的Fastjson版本为1.2.58,该版本存在反序列化漏洞。我们进一步探索一番。
2.1.1、Fastjson简述
Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java对象之间相互转换。
两个主要接口是JSON.toJSONString和JSON.parseObject/JSON.parse,分别实现序列化和反序列化操作。
2.1.1、Fastjson反序列化简述
Fastjson反序列化漏洞简单来说是出现在将JSON数据反序列化过程中出现的漏洞。
攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。
2.1.2、寻找漏洞触发点
已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。我们关注两个函数JSON.parse()
和JSON.parseObject()
。
全局搜索两个关键字,发现本项目存在JSON.parseObject()
,如下图所示:
双击进入ProductController.java
文件,问题代码出现在了第151行
,使用JSON.parseObject()
方法反序列化了propertyJson
参数,我们向上追踪propertyJson
参数,该参数是添加产品信息
接口中产品属性JSON
字段。如下图所示:
通过代码审计,找到了Fastjson反序列化漏洞点。我们通过渗透测试进一步验证。
本项目引入的Log4j版本为2.10.0,该版本存在远程代码执行漏洞。我们进一步探索一下。
2.2.1、Log4j简述
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2.2.2、Log4j远程代码执行漏洞(CVE-2021-44228)简述
由于Apache Log4j2某些功能存在递归解析,攻击者可在未经身份验证的情况下构造发送带有攻击语句的数据请求包,最终造成在目标服务器上执行任意代码。
其中涉及到的lookup的主要功能就是提供另外一种方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置属性供使用者以约定的格式进行调用。
该组件漏洞主要发生在引入的log4j-core
,