Ломаем AzoRULT 3.0

Мои дорогие и немногочисленные друзья, сейчас я Вам расскажу  увлекательную историю про то, как Величайший азорульт ломал.

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

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

Очень вскоре вы поймете, отчего же был написан столь саркастичный комментарий.

Приступим-с.

XSS через гейт.

Функция ShowHomePage(), строка 183 (gate.php):

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

POC:

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

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

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

SQL-injection внутри админки

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

Примеры:

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

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

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

Произвольные имена отчетов и перезапись отчетов

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

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

Удаление файлов

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

Активная XSS в config.json

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

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

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

That's all folks.

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

- Говна наверните-с. Мне похуй вообще.

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

P.S.S. Скидывай донат, если не хочешь наворачивать говна.

P.S.S.S Прикиньте, каково быть пиндосом, который пытается вникнуть в текст (RU->EN->RU):