October 12

Решение конкурсной задачи от Authority и FEFU Cybersecurity Center

Автор решения - @Fastyyy123

Заходим на сайт http://95.174.93.187:8000/?page=main.php

Что сразу бросается в глаза, так это параметр page, который подгружает php файл. Ну, что ж, пробуем LFI.

Одним таким пейлоадом нельзя ограничиваться, так что пробуем еще (вдруг там стоит «очень высокая защита» от LFI)

А вот и LFI. Сразу видим юзера rick. У него также есть папка в /home/rick.

Можем, конечно, побрутить названия файлов, посмотреть, что в /proc/self и т.д., но все равно, мы должны прийти к одному. Нам нужны .bash-файлы домашней директории пользователя rick. Ну, самые простые из них это

  • .bash_profile
  • .bashrc
  • .bash_history

В данному случае нам понадобился файл .bash_history файл с историей команд, введённых с использованием командной строки Bash.

Давайте посмотрим, что это за passchecker.

По слову ELF понятно, что это бинарь.

Скачаем его себе и откроем через иду (IDA).

На самом деле, я не очень реверсер, но примерно могу понять, что бинарь делает. Здесь все интуитивно понятно:

1.    Печатает строку `Enter your password`:

2.    Мы вводим какую-то строку

3.    Бинарь прогоняет ее через какую-то функцию encryptDecrypt

4.    Мы получаем ответ (пароль правильный или нет)

Здесь, я также заметил, очень подозрительную строку в хексах. Сохраним ее, вдруг понадобится

«206264204f6071622163214f607c23716323»

Функция encryptDecrypt:

Как я понял, здесь происходит 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

Получаем рут

Читаем /root/root.txt