![]() |
Нужна помощь со сложной двойной sql инъекцией.
Сабж.
Имеем уязвимый скрипт, в котором с полученными параметрами выполняется 2 запроса (в указанном порядке): 1) insert into DBinfo (user, text1, text2, text3 ) values ('$USER','$text1', now(), '$text3') 2) select id from DBinfo where user='$USER' and text1='$text1' and text3='$text3' magic_quotes = ON, при этом кавычки можно вставить только в одно поле - $USER (у него вероятно стоит stripslashes()). Исходные данные: mysql 4.0.10 (а значит никаких подзапросов :() Как видно, отсылаемые данные сначала заносятся в таблицу, где автоинкрементом вырастает соответсвующий им id, а затем идет запрос, чтобы узнать этот id. Полученный во втором запросе id я могу впоследствии увидеть. Сразу возникает мысль, что нужно сделать так, чтобы во втором запросе вместо айди я получил что-то нужное мне с помощью union: Код:
'+union+select+ascii(substring(password,2,1))+from+admin_table/*Код:
select id from DBinfo where user='' union select ascii(substring(password,2,1)) from admin_table/*' and text1='$text1' and text3='$text3'Спасибо всем, кто напряжет мозг :) |
если внимательно присмотрется в оба запроса, можно заметить, что в инсерте участвует на 1 переменную больше, что дает нам возможность реализовать фрагментированную sqli
было: Цитата:
Цитата:
$USER='or $text1=or $text2=,1,1,1)/* $text3=union select xek/* стало: Цитата:
Цитата:
|
l1ght
Необычно, однако $text2 = now(), сам я ее задать не могу. Извиняюсь, что сразу не указал, не думал, что может сыграть роль. |
| Время: 19:50 |