Изучение веб-панели ботнета Cythosia

Изучение веб-панели ботнета Cythosia

Предисловие: наткнулся в гугле на исходники данного ботнета 2011 года и появилось желание изучить их. Как оказалось позже некоторые его уязвимости уже есть на exploit-db, поэтому цель данной статьи по факту является просто изучение ошибок программиста при создании данной веб-панели:) Выкладывать архив или ссылку на исходники не буду (часть их будет в данной статье).

Распаковав архив, видим следующую картину:

Автор любезно оставил нам в корневой папке архива файл ReadMe.txt со следующим содержанием:

Все это получилось сделать, но оказалось, что редактировать пароль админа нужно не в admin/index.php, а в /index.php.

Перейдем к следующему пункту

Авторизация для людей

Для того, чтобы авторизоваться, требуется заполнить форму по адресу /index.php:

Рассмотрим код index.php:

На третьей строке указан текущий пароль, который нужно было поменять при установке. По-умолчанию установлен пароль admin. Уже на этом пункте есть недочет(или защита от скрипткидди?): смысл сравнения хешей теряется, если у нас в файле присутствует пароль в незахешированном виде.

Далее идет проверка хешей и создание сессии для текущего пользователя с переменной hydra_loggedin=1.

Авторизация для ботов

Обычно авторизация для зараженных компьютеров "плавает" на поверхности.

Так оно и оказалось - за добавление новых компьютеров отвечает файл socks5.php в корне сайта со следующим содержимым:

Уже интереснее) Смотрим на третью строку:

Она проверяет наличие POST параметров hwid, cn, ip, port и в случае их наличия переходит на 5 строку:

Вот мы и наткнулись на второй недочет: при наличии данных параметров совершается SELECT запрос в базу данных с нефильтруемым параметром hwid .

Перефразирую: мы с вами нашли типичную SQL SELECT injection.

Далее у нас идет либо обновление данных бота (строка 9):

Либо в случае отсутствия записей, создает новую запись (строка 13):

А т.к. ни один из POST параметров не фильтруется, то у нас есть не одна, а три SQL injection трех разных типов: SELECT, UPDATE и INSERT!

Предоставляю вам наглядный запрос с ответом сервера:

Остальные скрипты вне папки admin

Так же в корневой директории присутствуют файлы ip.php и connect.php.

Вначале рассмотрим содержимое файла ip.php:

То есть бот вначале посылает GET запрос на /ip.php, получает свой ip адрес и только после этого отсылает его в скрипт /socks5.php для добавления в базу данных.

И файл connect.php, который отвечает за поддержание соединения с ботом и распределение задач. Приводить содержимое connect.php не буду, скажу только, что в отличии от socks5.php каждый POST параметр уже упакован функцией фильтрации mysql_escape_string() и ip жертвы считывает автоматически (не требуется переходить на ip.php).

Такое чувство, что автор ботнета тренировался на скриптах ip.php и socks5.php и только после начал писать уже более-менее безопасный connect.php .

Файлы админки

Вот как выглядит админ панель после авторизации:

Повторно приведу список файлов в папке /admin/:

Быстренько пройдемся по ним:

create_task.php - html форма создания новой задачи для ботов.

delete_task.php - удаление задачи из базы данных. Получает GET параметр taskID, который впоследствии переводится в integer и посылается в БД. Уязвимости нет.

do_new_task.php - обработчик формы create_task.php, создается новое событие с временем начала и завершения, все формы фильтруются.

export_socks.php - предоставляет список всех зараженных компьютеров, которые поддерживают соединение.

info.php - просто html.

logout.php - очищает параметр сессии hydra_loggedin

show_task.php - высвечивает все текущие задачи, основываясь на целочисленном GET параметре taskID.

showbots.php - выводит список всех (включая оффлайн) зараженных компьютеров. Принимает GET параметр query, который фильтруется и отвечает за сортировку.

socks.php - аналогично export_socks.php, только предоставляет вывод в более красивом варианте.

stat.php - вывод всей статистики ботнета.

tasks.php - вывод всех текущих задач ботов.

Так зачем же я перечисляю задачи данных файлов? Это же никому не интересно!

Все достаточно просто! Все эти файлы (кроме быть может файла logout.php) объединяет общее начало:

То есть скрипт проверяет значение параметра сессии hydra_loggedin, и если он не равен единице, то делает редирект на google.com и.. по логике должен завершать свою работу.

Но нет! Далее нет ни exit(), ни die() - скрипты просто продолжают свою работу!

Нам достаточно отключить редирект в нашем браузере, чтобы при переходе на /admin/index.php получить полное управление!

Сказано-сделано: как пример получим список всех зараженных компьютеров

Да, у меня нет ни одного компьютера в ботнет сети - но тк была отрисовка таблицы, то это подтверждает наличие уязвимости!

Подводим итоги

У ботнета присутствует следующее:

1. SQL SELECT injection 2. SQL INSERT injection 3. SQL UPDATE injection 4. Неавторизованный доступ к управлению ботнета 5. Отсутствие robots.txt 6. Наличие пароля по умолчанию

С первыми четырьмя уязвимостями мы с вами уже познакомились, а что же дают нам последние две?

То есть у нас есть список из ботнет панелей, доступ к которым мы можем получить просто отключив перенаправления в браузере! Сами можете поиграться с ними - пароль у большинства из них стоит по-умолчанию - admin :)

Вывод: таким образом сочетание этих шести недочетов во время написания ботнет веб-панели, дает нам возможность получить контроль над всеми ботнетами, основанными на данном вредоносном программном обеспечении!скачать dle 10.5фильмы бесплатно

📎📎📎📎📎📎📎📎📎📎