JavaWeb代码审计实战之迷你天猫商城系统详细分析版,实战应用级系统的Log4j2shell代码审计

嗨,大家好,我是闪石星曜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、环境要求

1、Windows 10系统。

2、Java版本为1.8.0_261

3、Mysql版本为5.7。我用的是PHPstudy集成的。

4、IDEA版本随意。

2、项目部署流程

①、命令行进入Mysql后,创建数据库名为tmalldemodb,并切换使用该数据库,如下图所示:

②、将项目文件中的/sqls/tmalldemodb.sql的数据导入到tmalldemodb数据库,注意导入路径中应使用正斜杠/,如下图所示:

③、使用IDEA打开本项目,等待Maven自动加载依赖项,如果时间较长需要自行配置Maven加速源。几个现象表明项目部署成功。pom.xml文件无报错,项目代码已编译为classRun/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

三、代码审计漏洞挖掘

1、第三方组件漏洞审计

本项目是基于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等网站查询。

2、组件漏洞代码审计

通过查看pom.xml文件中引入的第三方插件,且经过搜索查询,发现Fastjson、Log4j、Mybatis引入存在漏洞的版本,我们进一步验证是否存在漏洞。

2.1、Fastjson漏洞代码审计

本项目引入的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反序列化漏洞点。我们通过渗透测试进一步验证。

2.2、Log4j漏洞代码审计

本项目引入的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-corelog4j-api是不存在该问题的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值