Tmall_demo商城代码审计

admin 2026-01-31 02:01:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文对Tmall_demo商城系统进行代码审计,发现多处高危漏洞。核心发现包括后台鉴权绕过、前台任意文件上传、基于MyBatis排序参数的多处SQL注入,以及产品、订单及管理员处的存储型XSS。文章提供了详细的漏洞复现过程与环境搭建指南,建议修复鉴权逻辑、加强文件后端校验及使用预编译SQL语句。 综合评分: 88 文章分类: 代码审计,WEB安全,漏洞分析,漏洞POC


cover_image

Tmall_demo商城代码审计

原创

时针 时针

船山信安

2026年1月30日 20:00 广东

与作者沟通过可发布他的作品并标注原创,原文连接:https://xz.aliyun.com/news/19037

环境搭建

项目地址:https://gitee.com/project_team/Tmall_demo

修改src/main/resources/application.properties中的对应数据库配置信息,创建对应数据库,导入sql文件。

jdk版本1.8

前台地址:http://127.0.0.1:8080/tmall

后台地址:http://127.0.0.1:8080/tmall/admin

后台管理员账户密码:admin/123456

如果登录后台出现500,系统错误的提示,可以将src/main/resources/mybatis/mapper/ProductMapper.xml中的最后一条select语句改成如下即可

&nbsp;<select&nbsp;id="selectTotalByGroupCategory" resultType="map">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;SELECT&nbsp;category.category_name name,&nbsp;COUNT(0)&nbsp;value&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;FROM&nbsp;product&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;LEFT&nbsp;JOIN&nbsp;category&nbsp;ON&nbsp;category.category_id&nbsp;=&nbsp;product.product_category_id&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;GROUP&nbsp;BY&nbsp;category.category_id, category.category_name&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;ORDER&nbsp;BY&nbsp;category.category_id&nbsp; &nbsp;&nbsp;</select>

代码审计

鉴权绕过

在pom.xml中没有发现jwt或者shiro之类的鉴权关键字,看一下目录结构是否有filter或者Interceptor

可以看到存在filter,里面只有一个鉴权文件

里面只有一段,可以看到这里,只有url中包含/admin/login/admin/account即可直接放行,绕过鉴权。

在后台找个需要登录才能查看的功能点

抓包看一下

接着我们退出登录,可以看到直接访问是无法查看人员信息的

在前面加上/admin/login或/admin/account结合目录穿越即可绕过鉴权

前台文件上传

在前台个人资料处的头像上传功能存在文件上传。

在前端校验文件后缀,可以看到使用了uploadImage函数,

在js中搜一下这个函数,可以看到只校验了MIME类型和大小

哥斯拉生成个jsp马,后缀改成png,抓包之后再改成jsp即可。

抓包可以看到对应的路由为/user/uploadUserHeadImage,去源码里全局搜索一下,发现没有对文件进行检测过滤,只是对文件名进行了uuid编码,并且也给了文件路径,也会返回文件名。

在pom.xml文件中也可以看到有jsp解析依赖,传马也能解析。

在前台查看头像地址,再拼接jsp马即可。

http://localhost:8080/tmall/res/images/item/userProfilePicture/ac5f3dcf-b85f-4360-b610-59bdbcfcb455.jsp

多处sql注入

翻一下pom.xml,可以看到使用了Mybatis,那么大概率会使用

直接全局搜${,可以看到好几处都是使用orderUtil.orderBy这个参数,随便找一个跟进去看一下

搜索一下orderUtil类,这里有两个OrderUtil方法,第一个没有引用,看第二个的使用

优先看一下orderBy参数是否可控,看一下使用

这里跟进第二条看一下,可以看到参数是orderBy,通过get方法获取参数,也是可控的。(其他几条也和这种类似)

在查询订单这里搜索

可抓到下面这个包,并且有orderBy参数

直接sqlmap一把梭哈

同样的admin/product/{index}/{count}admin/user/{index}/{count}admin/reward/{index}/{count}product/{index}/{count}路由也一样存在sql注入

多处xss

所有产品处

添加商品这里见框就插

然后搜搜产品名称<script>alert(1)</script>即可弹出多个xss弹窗

前台下单/后台查询订单处

提交订单即可弹出xss弹窗

后台在全部订单这里查看刚刚的订单详情,也会弹窗

管理员昵称处


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:船山信安 时针 时针《Tmall_demo商城代码审计》

评论:0   参与:  0