Показать сообщение отдельно

Multivariant Blind SQL Inject's
  #1  
Старый 24.04.2009, 17:51
Psi.X
Познающий
Регистрация: 12.04.2009
Сообщений: 45
С нами: 8989669

Репутация: 13
Post 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')
После чего парсим заголовки новостей и получаем наше значение.

Последний раз редактировалось Psi.X; 24.04.2009 в 22:25..
 
Ответить с цитированием