我正在尝试使用SQLMAP的基于错误的 SQL 注入技术。SQLMAP 识别的技术是
基于错误 - WHERE、HAVING、ORDER BY 或 GROUP BY 子句 (BIGINT UNSIGNED)
如果有人可以帮助说明 SQLMAP 正在使用的有效负载,那就太好了。
Payload: web/test?abc='' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x716b626b71,(SELECT (ELT(9092=9092,1))),0x71626b7071,0x78))s), 8446744073709551610, 8446744073709551610)))-- pprs
更具体地说,此 SQL 查询中发生了什么
(SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x716b626b71,(SELECT (ELT(9092=9092,1))),0x71626b7071,0x78))s), 8446744073709551610, 8446744073709551610)))
更新1:
格式化的查询如下所示:
SELECT
2*(IF((
SELECT
*
FROM
(
SELECT
CONCAT(0x716b626b71,
(
SELECT
(ELT(9092 = 9092, 1))
)
, 0x71626b7071, 0x78)
)
s), 8446744073709551610, 8446744073709551610))
SELECT (ELT(9092 = 9092, 1))
:查询输出为 1,9092=9092
结果为真(即 1),ELT 函数返回第一个参数,即 1
所以下一个子查询是:
SELECT CONCAT(0x716b626b71, 1, 0x71626b7071, 0x78)
: Query Output results to concatenated string "qkbkq1qbkpqx" (将十六进制转换为字符串后)
但是,结果子查询SELECT * FROM qkbkq1qbkpqx
给出了一个错误说Every derived table must have its own alias
更新2:
我错过了@tcadidot0 提到的查询中的别名。所以现在结果子查询是:
SELECT * FROM qkbkq1qbkpqx s
最后的查询是:
SELECT 2*(IF((SELECT * FROM qkbkq1qbkpqx s), 8446744073709551610, 8446744073709551610))
如果表“qkbkq1qbkpqx”存在,则返回8446744073709551610
else它返回8446744073709551610
,但是2次结果导致此错误:BIGINT value is out of range in '(2 * if((1 > 0),8446744073709551610,8446744073709551610))
,假设1>0
是条件而不是选择语句。