Читаем файлы через слепую инъекцию

Discussion in 'Уязвимости' started by durito, 10 Dec 2010.

  1. durito

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

    Joined:
    6 Jun 2008
    Messages:
    125
    Likes Received:
    24
    Reputations:
    27
    вот тут решил поделиться небольшим опытом

    Недавно столкнулся с такой проблемой, нашел в одном крупном датинге слепую инъекцию. Снял пароль root'a для mysql, благо он крутился под ним. Потом нашел директорию http://www.хороший_датинг.com/phpmyadmin/ и оставалось лишь расшифровать хеш. Но вот тут я завис не 2 месяца. Поднятые на дедиках брутилки так ничего и не дали. Платные онлайн-сервисы тоже мне никак не помогли.

    Короче промучившись с брутом, я решил поискать иной способ проникновения. Возникла мысль прочитать файл коннекта к базе, ведь там пароль должен был лежать в открытом виде. Вся надежда была на то, что админ не пользуется различными приблудами типа Zend Optimizer для шифрования php-кода.

    С помощью сканера директорий и файлов http://scan.0day.in:8080/action/scan я нашел файл http://www.хороший_датинг.com/auth.php. Оставалось вывести его содержимое через слепую инъекцию. Но для начала мне надо было узнать путь до файла. Можно было подставляя служебные символы во все формы сайта попытаться вывести ошибку, но я решил для начала воспользоваться гуглом. По запросу site: www.хороший_датинг.com mysql или home можно иногда получить полный путь до корня, так как иногда скрипты сервера глючат и этот глюк индексирует гугл. Так случилось и в этот раз. И даже не смотря на то, что глюкнувший скрипт уже работал нормально, в хеше гугла сохранился пусть до корня.



    Code:
    /home/ldc/хороший_датинг/public_html/login.php
    Зачарив путь до нужного мне скрипта


    Code:
    +and+ascii(substring((LOAD_FILE(CHAR(47,104,111,109,101,47,108,100,99,47,245,238,240,238,248,232,233,95,228,224,242,232,237,227,47,112,117,98,108,105,99,95,104,116,109,108,47,108,111,103,105,110,46,112,104,112))),1,1))>96
    Я понял что перебирать придется руками, а это не есть гуд. SIMP4 выводит блингом значения до 1 пробела, поэтому все что он мне показал было <?php.
    Руками же перебирать ломало. Тогда я полез в исходники старого пакета для эксплуатации mysql-инъекций от Piflit. В файле blind.php я нашел строку:


    for($i = 1; $i<30; $i++){ которая задавала цикл перебора.

    Сменив значение на for($i = 10; $i<50; $i++){ я получил символы второй строки файла

    Code:
    ude_once("connect.php");
    Стало ясно, что инфа для коннекта к mysql лежит в другом файле. Зачарив путь до connect.php я стал выводить его содержимое.
    И вот через 5 минут у меня были полные реквизиты для доступа к базе сервака:


    Code:
    or_reporting(0);nn=mysql_connect("localhost","root","fVg1S4H4Q5f9R0aFv");
    пароль оказался неслабым, поэтому неудивительно, что сбрутить его неудалось. Зайдя под рутом в phpmyadmin я сразу слил таблицу с юзерами, а после сел и написал эту маленькую заметку.

    Надеюсь она вам пригодиться.

    (c) durito
     
    2 people like this.
  2. totenkopf

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

    Joined:
    19 Jul 2010
    Messages:
    92
    Likes Received:
    64
    Reputations:
    19
    Информация к размышлению

    Code:
    position("pass" IN load_file("/path/config.php"))
    select substring(load_file("/path/config.php"),pos)
    
     
  3. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196

    а что за функция "position"?
     
  4. totenkopf

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

    Joined:
    19 Jul 2010
    Messages:
    92
    Likes Received:
    64
    Reputations:
    19
    Возвращает позицию вхождения подстроки в строку или ноль если строка не найдена.
    Функция таит в себе огромные возможности. Как вам например такой запрос:
    Code:
    http://site.ru/index.php?id=1+UNION+SELECT+1,group_concat(concat_ws(0x3a,table_schema,table_name,column_name))+FROM+information_schema.columns+WHERE+position(0x70617373+in+column_name)+--+
    
    Выводит все таблицы в названии полей которых есть "pass". Причем кавычки не используются.
     
    #4 totenkopf, 15 Dec 2010
    Last edited: 15 Dec 2010
    1 person likes this.
  5. altblitz

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

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,145
    Reputations:
    236
    durito - нашенский ))
    проявил волю, терпение и способности анализировать и исправлять свои ошибки.

    "Папа, а что такое Гугл?"
    "Это хакирский сайт"

    [​IMG]