Решение конкурсной задачи от Authority и FEFU Cybersecurity Center
Заходим на сайт http://95.174.93.187:8000/?page=main.php
Что сразу бросается в глаза, так это параметр page, который подгружает php файл. Ну, что ж, пробуем LFI.
Одним таким пейлоадом нельзя ограничиваться, так что пробуем еще (вдруг там стоит «очень высокая защита» от LFI)
А вот и LFI. Сразу видим юзера rick. У него также есть папка в /home/rick.
Можем, конечно, побрутить названия файлов, посмотреть, что в /proc/self и т.д., но все равно, мы должны прийти к одному. Нам нужны .bash-файлы домашней директории пользователя rick. Ну, самые простые из них это
В данному случае нам понадобился файл .bash_history файл с историей команд, введённых с использованием командной строки Bash.
Давайте посмотрим, что это за passchecker.
По слову ELF понятно, что это бинарь.
Скачаем его себе и откроем через иду (IDA).
На самом деле, я не очень реверсер, но примерно могу понять, что бинарь делает. Здесь все интуитивно понятно:
1. Печатает строку `Enter your password`:
3. Бинарь прогоняет ее через какую-то функцию encryptDecrypt
4. Мы получаем ответ (пароль правильный или нет)
Здесь, я также заметил, очень подозрительную строку в хексах. Сохраним ее, вдруг понадобится
«206264204f6071622163214f607c23716323»
Как я понял, здесь происходит xor строки. Дальше я не знал, что делать. Но решил все-таки кое-что проверить (не зря же нам дана та самая строка)
Заходим на https://www.dcode.fr/chiffre-xor и пробуем брутить то, с чем ксорилась наша строка.
Сначала, опять же, не понял что за 0rt0_par1s1_pl3as3, потому что осмысленных слов я здесь видел, кроме слова pl3as3. Именно из-за этого слова решил проверить пароль
Получается, это должен быть пароль от чего-то. Ну, определенно, от ssh.
Осталось вот только узнать, на каком порту крутится ssh сервер. Воспользуемся nmap-ом
Все порты, кроме 8001 это http и https. Так что остается только попробовать подключиться:
Оп, мы внутри! Только нужно нормальный шел заспавнить
python3 -c 'import pty; pty.spawn("/bin/bash")'
Получается, нам нужно эскалировать привилегии и стать рутом. Проводим базовый осмотр, замечаем что у нас есть право на выполнение питоновского скрипта
Здесь я сделал вывод, что именно через него мы должны получить рута
Посмотрим, что в этом скрипте, который, наверное, выполнится от рута, если мы его запустим
Здесь импортируются модули subprocess (который, кстати, так и не используется в проге) и platform (а вот он используется). Гуглим (ну или же вспоминаем, в моем случае, я уже такое встречал).
А вот и то, что нам нужно. Linux Privilege Escalation: Python Library Hijacking. Можем начинать:
1. Создаем собственный модуль platform, который будет находиться в той же директории, что и запускаемая программа. Этим мы «перебьем» импорт настоящего модуля platform. А вот в своём модуле мы можем написать все, что угодно (заспавнить шелл, например):
echo 'import pty;pty.spawn("/bin/bash");' > platform.py
2. Запускаем файл используя sudo
sudo /usr/bin/python3 /home/rick/system_info.py