JAVA代码审计-迷你天猫商城

admin 2023年5月4日21:01:50评论28 views字数 6055阅读20分11秒阅读模式

一、项目简介

迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。

二、项目搭建

1、环境要求

1、Windows 10系统。

2、Java版本为1.8.0_261

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

4、IDEA版本随意。

2、项目部署流程

JAVA代码审计-迷你天猫商城

然后使用source命令导入数据库。

JAVA代码审计-迷你天猫商城

然后启动环境。

JAVA代码审计-迷你天猫商城

三、代码审计:

1、第三方组件漏洞

本项目是基于Maven构建的。对于Maven项目,我们首先从pom.xml文件开始审计引入的第三方组件是否存在漏洞版本,然后进一步验证该组件是否存在漏洞点。

本项目引入的组件以及组件版本整理如下。

JAVA代码审计-迷你天猫商城

2、组件漏洞

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

3、Fastjson命令执行漏洞

本项目引入的Fastjson版本为1.2.58,该版本存在反序列化漏洞。

fastjson简介:

Fastjson是一个Java语言编写的高性能JSON处理器和序列化/反序列化库。它支持Java对象到JSON字符串的转换,以及JSON字符串到Java对象的转换。Fastjson具有以下特点:

  1. 高性能:Fastjson采用了一系列优化策略,如缓存、预编译等,使得它在JSON处理方面具有非常高的性能表现。

  2. 功能丰富:Fastjson支持多种JSON数据格式,如JSON对象、JSON数组、JSON字符串等。同时,它还支持自定义序列化和反序列化器,可以满足各种复杂的业务需求。

  3. 易用性:Fastjson的API设计简洁明了,易于使用。用户可以通过简单的几行代码就可以完成JSON数据的序列化和反序列化操作。

  4. 安全性:Fastjson采用了一系列安全策略,如防止JSON注入攻击等,保证了数据的安全性。

总之,Fastjson是一个功能强大、性能优异、易于使用的JSON处理器和序列化/反序列化库。

3.1 Fastjson反序列化简述:

Fastjson反序列化漏洞简单来说是出现在将JSON数据反序列化过程中出现的漏洞。

攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。

寻找漏洞触发点

全局搜索两个关键字JSON.parseObject()JSON.parse(),发现本项目存在JSON.parseObject()

JAVA代码审计-迷你天猫商城

进入ProductController.java这个文件。

找到了问题代码,发现使用JSON.parseObject()方法反序列化了

propertyJson参数。

JAVA代码审计-迷你天猫商城

接着我们向上追踪propertyJson参数。

JAVA代码审计-迷你天猫商城

3.2  漏洞复现:

进入于所有产品-添加一件产品。

JAVA代码审计-迷你天猫商城

然后使用dnslog进行验证。

JAVA代码审计-迷你天猫商城

发现收到了回显。

JAVA代码审计-迷你天猫商城

也可以使用burp自带的dnslog进行验证。

JAVA代码审计-迷你天猫商城

JAVA代码审计-迷你天猫商城

4、Log4j命令执行漏洞

本项目引入的Log4j版本为2.10.0,该版本存在远程代码执行漏洞。

4.1 Log4j简述

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

4.2 漏洞简述:

由于Apache Log4j2某些功能存在递归解析,攻击者可在未经身份验证的情况下构造发送带有攻击语句的数据请求包,最终造成在目标服务器上执行任意代码。

其中涉及到的lookup的主要功能就是提供另外一种方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置属性供使用者以约定的格式进行调用。

该组件漏洞主要发生在引入的log4j-corelog4j-api是不存在该问题的。log4j-core是源码,log4j-api是接口。

pom.xml文件引入Log4j组件情况如下图所示,引入了log4j-core,以及版本为2.10.0

JAVA代码审计-迷你天猫商城

由于SprinBoot默认自带日志记录框架,一般不需要引入。

JAVA代码审计-迷你天猫商城

寻找漏洞触发点

全局搜索关键字logger

JAVA代码审计-迷你天猫商城

进入

srcmainjavacomxqtmallcontrolleradminAccountController.java。该代码文件位于Controller层。

JAVA代码审计-迷你天猫商城

4.3 漏洞复现:

JAVA代码审计-迷你天猫商城

JAVA代码审计-迷你天猫商城

同样也可以使用burpsuite的dnslog进行漏洞验证。

JAVA代码审计-迷你天猫商城

也可以使用JDNI反弹shell。

JAVA代码审计-迷你天猫商城

JAVA代码审计-迷你天猫商城

5、Mybatis漏洞代码审计

本项目引入的Mybatis版本为3.5.1,该版本存在远程命令执行漏洞。

Mybatis < 3.5.6存在远程代码执行漏洞,CVE编号为CVE-2020-26945

在满足以下三个条件的时候,攻击者可以触发远程代码执行:

1、用户启用了内置的二级缓存(默认不开启,需手动配置)

2、用户未设置JEP-290过滤器

3、攻击者找到了一种修改私有Map字段条目的方法,即修改org.apache.ibatis.cache.impl.PerpetualCache.cache有效的缓存密钥

所谓二级缓存,也就是将查询结果放到缓存中,下次查询时结果相同的话直接从缓存中获取结果。

经过探索srcmainresourcesmybatis下面的配置文件,本项目并未开启二级缓存。

Mybatis开启二级缓存语句
<setting name = "cacheEnabled" value = "true" />

关键条件被否定,即不存在该漏洞,故忽略。

6、SQL注入漏洞

全局搜索关键字$,确实存在几处order by使用了$拼接SQL语句,因为order by是没办法使用#{}的。

JAVA代码审计-迷你天猫商城

以`UserMapper.xml`文件为例,进行逆向追踪。

1、双击进入`UserMapper.xml`文件,第78行存在问题。向上查看根据`select id`追踪该dao层的代码文件。追踪select函数。

JAVA代码审计-迷你天猫商城

然后全局搜索之后,进入UserServiceImpl.java文件。

JAVA代码审计-迷你天猫商城

getList方法中需要orderUtil参数,我们继续逆向追踪getlist函数。

JAVA代码审计-迷你天猫商城

发现UserController.java使用了该方法。

JAVA代码审计-迷你天猫商城

发现先实例化OrderUitl工具类,该类需要两个参数即,orderyBy和isDesc。点击进入查看该类的代码,

该类文件位于srcmainjavacomxqtmallutilOrderUtil.java

JAVA代码审计-迷你天猫商城

通过注释了解该类用于排序/倒序字段。

JAVA代码审计-迷你天猫商城

然后追踪orderBy函数。

JAVA代码审计-迷你天猫商城

然后去定位功能点。

JAVA代码审计-迷你天猫商城

6.1 漏洞复现:

JAVA代码审计-迷你天猫商城
JAVA代码审计-迷你天猫商城

使用sqlmap验证。

JAVA代码审计-迷你天猫商城

7、 XSS漏洞

我们去看filter层是否存在XSS过滤代码。发现filter层并没有关于防护XSS的代码。

JAVA代码审计-迷你天猫商城

经过搜索之后,我们发现filter层并没有对xss漏洞进行防护。

JAVA代码审计-迷你天猫商城

7.1漏洞复现:

直接在登录框进弹xss。

JAVA代码审计-迷你天猫商城

然后进行我的账户处也可以弹框。

JAVA代码审计-迷你天猫商城

8、任意文件上传代码审计

我们先去查看一下引入的相关依赖。

JAVA代码审计-迷你天猫商城

这次,我们先关注本项目的管理员头像上传文件上传功能,进行代码审计。

代码分析:

我们通过功能点定位到源代码。

JAVA代码审计-迷你天猫商城首先在第62行,通过@RequestMapping注解,得到一些信息。

1.上传接口为admin/uploadAdminHeadImage(如果找不到前端页面,可以直接向该接口发送构造好的数据包)
2.上传方法为POST
3.produces = "application/json;charset=UTF-8,定义了返回格式为JSON
关键信息为接口地址

发现uploadAdminHeadImage方法接受绑定的file参数session参数,我们查看file参数。然后接着进入第64行,获取到文件名称后赋值给originalFileName。然后获取文件后缀名,先看括号内originalFileName.lastIndexOf('.'),获取originalFileName字符串最后一次出现.的地方。然后通过substring截取子串的方式得到文件后缀名,赋值给变量extension。发现传入.jsp.jsp.jsp这种形式后缀名,最后得到的结果也只有.jsp。第69行,随机命名文件,采用UUID+extension方式,并赋值给fileName参数。第71行,获取上传路径,赋值给filePath。第76到80行,上传文件关键代码,创建文件流将文件上传到filePath路径中,上传成功后,会返回该文件的文件名。

JAVA代码审计-迷你天猫商城

8.1、漏洞复现:

JAVA代码审计-迷你天猫商城

然后获取文件路径。

/tmall/res/images/admin/loginPage/default_profile_picture-128x128.png

/tmall/res/images/item/adminProfilePicture/c23e0597-2f15-4d3b-ac9c-153697362b82.jsp

JAVA代码审计-迷你天猫商城

成功getshell。

JAVA代码审计-迷你天猫商城

REF:

https://blog.csdn.net/Power7089/article/details/126462225

https://www.cnblogs.com/Gejkdj/p/16969068.html

https://cbatl.gitee.io/2022/03/25/minitmallshop/

原文首发在Freebuf社区:

https://www.freebuf.com/articles/web/364477.html



【Hacking黑白红】,一线渗透攻防实战交流公众号

JAVA代码审计-迷你天猫商城

回复“电子书”获取web渗透、CTF电子书:

回复“视频教程”获取渗透测试视频教程;  

回复“内网书籍”获取内网学习书籍;        

回复“CTF工具”获取渗透、CTF全套工具;

回复“内网渗透;获取内网渗透资料;

回复护网;获取护网学习资料 ;

回复python,获取python视频教程;

回复java,获取Java视频教程;

回复go,获取go视频教程


知识星球



【Hacking藏经阁】知识星球致力于分享技术认知

1、技术方面。主攻渗透测试(web和内网)、CTF比赛、逆向、护网行动等;

400G渗透教学视频、80多本安全类电子书、50个渗透靶场(资料主要来自本人总结、以及学习过程中购买的课程)

2、认知方面。副业经营、人设IP打造,具体点公众号运营、抖*yin等自媒体运营(目前主要在运营两个平台4个号)。


如果你也想像我一样,不想35岁以后被动的去面试,那么加入星球我们一起成长。




JAVA代码审计-迷你天猫商城


欢迎加入99米/年,平均每天2毛7分钱,学习网络安全一整年。


JAVA代码审计-迷你天猫商城



渗透实战系列



【渗透实战系列】51|- 一次BC站点的GetShell过程

【渗透实战系列】50|- Log4j打点后与管理员斗智斗勇

【渗透实战系列】49|-实战某高校的一次挖矿病毒的应急处置

【渗透实战系列】|48-一次内网渗透

渗透实战系列】|47-记一次对某鱼骗子卖家的溯源

【渗透实战系列】|46-渗透测试:从Web到内网

【渗透实战系列】|45-记一次渗透实战-代码审计到getshell

【渗透实战系列】|44-记一次授权渗透实战(过程曲折,Java getshell)

【渗透实战系列】|43-某次通用型漏洞挖掘思路分享

【渗透实战系列】|42-防范诈骗,记一次帮助粉丝渗透黑入某盘诈骗的实战

【渗透实战系列】|41-记一次色*情app渗透测试

【渗透实战系列】|40-APP渗透测试步骤(环境、代理、抓包挖洞)

▶【渗透实战系列】|39-BC渗透的常见切入点(总结)

【渗透实战系列】|38-对某色情直播渗透

【渗透实战系列】|37-6年级小学生把学校的网站给搞了!

【渗透实战系列】|36-一次bc推广渗透实战

【渗透实战系列】|35-旁站信息泄露的dedecms站点渗透

【渗透实战系列】|34-如何用渗透思路分析网贷诈骗链

【渗透实战系列】|33-App渗透 ,由sql注入、绕过人脸识别、成功登录APP

【渗透实战系列】|32-FOFA寻找漏洞,绕过杀软拿下目标站

【渗透实战系列】|31-记一次对学校的渗透测试

【渗透实战系列】|30-从SQL注入渗透内网(渗透的本质就是信息搜集)

【渗透实战系列】|29-实战|对某勒索APP的Getshell

【渗透实战系列】|28-我是如何拿下BC站的服务器

【渗透实战系列】|27-对钓鱼诈骗网站的渗透测试(成功获取管理员真实IP)

【渗透实战系列】|26一记某cms审计过程(步骤详细)

【渗透实战系列】|25一次从 APP 逆向到 Getshell 的过程

【渗透实战系列】|24-针对CMS的SQL注入漏洞的代码审计思路和方法

【渗透实战系列】|23-某菠菜网站渗透实战

【渗透实战系列】|22-渗透系列之打击彩票站

【渗透实战系列】|21一次理财杀猪盘渗透测试案例

【渗透实战系列】|20-渗透直播网站

【渗透实战系列】|19-杀猪盘渗透测试

【渗透实战系列】|18-手动拿学校站点 得到上万人的信息(漏洞已提交)

【渗透实战系列】|17-巧用fofa对目标网站进行getshell

【渗透实战系列】|16-裸聊APP渗透测试

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试

【渗透实战系列】|13-waf绕过拿下赌博网站

【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局

【渗透实战系列】|11 - 赌博站人人得而诛之

【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)

【渗透实战系列】|9-对境外网站开展的一次web渗透测试(非常详细,适合打战练手)

【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)

【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例

【渗透实战系列】|6- BC杀猪盘渗透一条龙

【渗透实战系列】|5-记一次内衣网站渗透测试

【渗透实战系列】|4-看我如何拿下BC站的服务器

【渗透实战系列】|3-一次简单的渗透

【渗透实战系列】|2-记一次后门爆破到提权实战案例

【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

JAVA代码审计-迷你天猫商城

    

长按-识别-关注

JAVA代码审计-迷你天猫商城

Hacking黑白红

一个专注信息安全技术的学习平台

JAVA代码审计-迷你天猫商城

点分享

JAVA代码审计-迷你天猫商城

点收藏

JAVA代码审计-迷你天猫商城

点点赞

JAVA代码审计-迷你天猫商城

点在看

原文始发于微信公众号(Hacking黑白红):JAVA代码审计-迷你天猫商城

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月4日21:01:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JAVA代码审计-迷你天猫商城http://cn-sec.com/archives/1706526.html

发表评论

匿名网友 填写信息