Есть много ресурсов для обучения тестированию на проникновение, один из них это TryHackMe.
Там в разделе Learn -> Practice есть бесплатные машины, разного уровня сложности, на которых можно потренироваться, улучшить навыки или приобрести их. Сегодня попробуем пройти популярную машину «RootMe», которая помечена как «Easy», то есть легкая. Это то, что нам нужно. Заранее скажу, что после прохождения машины можно будет приобрести навык работы с утилитами сканирования директорий веб-серверов, использования reverse shell для получения доступа на машину, а также один из способов повышения своих привилегий до root в системе.
Машинка выглядит так:
Скачиваем openvpn конфиг по ссылке и подключаемся:
openvpn --config /path/to/opevpncofnig
От нас ожидают выполнение 4 заданий, первое из которых просто запуск уязвимой ВМ. Запускаем и переходим ко второму пункту.
Задание 2. Сбор информации о ВМ:
Первый вопрос, сколько портов открыто на ВМ?
Используем nmap для сканирования, также укажем ключ V для получения версий запущенных на портах программ.
nmap -sV 10.10.196.133
Видим следующий вывод:
Ответ на первый вопрос — 2 порта.
Затем нас спрашивают, какая версия apache запущена на ВМ. Ответ — 2.4.29
Третий вопрос — что запущено на 22 порту? Ответ ssh.
Дальше уже интересней, нас просят ответить на вопрос, какая скрытая директория есть на сервере? Если нажать на подсказку, то увидим следующее:
Нам предлагают воспользоваться утилитой gobuster для сканирования директорий. В целом, можно использовать любую утилиту для этого, например dirsearch, но мы хотим узнать что-то новое поэтому идем в google за gobuster.
Забираем с github со странице релизов последнею версию.
wget https://github.com/OJ/gobuster/releases/download/v3.6.0/gobuster_Linux_x86_64.tar.gz
tar xvf gobuster_Linux_x86_64.tar.gz
cp gobuster /bin/
Далее забираем словарь для gobuster.
git clone https://github.com/aels/subdirectories-discover
Пробуем запустить с первым словарем из списка:
gobuster dir -u 10.10.196.133 -w ./gobuster-subdir-wordlist/dsplusleakypaths.txt
Из интересного видим /uploads, где пока ничего нет и /panel. Заходим в браузере на /panel.
Видим UI для загруки файлов. Отлично. Сдаем ответ о скрытой директории /panel/.
Мы прошли 2 пункт. Корректные ответы выглядят так:
Задание 3. Получить shell доступ на ВМ и забрать флаг user.txt:
Окей. У нас есть некая форма загрузки файлов, это означает, что мы можем загрузить туда reverse shell на php и получить доступ к shell от того пользователя, из под которого будет выполнен наш reverse shell, вероятно это будет www-data или nginx.
Для того, чтобы сгенерировать код для reverse shell есть отличный ресурс — https://www.revshells.com/. Для php там много разных вариаций, мне подошел вот этот:
В графе IP & Port мы указываем свой IP адрес и желаемый порт. Из «Listener» забираем команду для прослушивание подключения.
Сохраним скрипт в виде файла r.php и попробуем загрузить.
Похоже, что у нас ничего не вышло. Смотрим подсказку:
Про php reverse shell мы уже узнали, гуглим первую рекомендации и находим этот сайт — https://book.hacktricks.xyz/pentesting-web/file-upload
Можно пробовать ставить файлу разные расширения, я попробовал несколько, подошло .php5.
Загружаем файл еще раз и проверяем его наличие в /uploads:
Отлично, теперь осталось запустить netcat на нашей стороне и выполнить r.php5.
nc -lvnp 9001
Нажимаем на r.php5 и мы внутри ВМ.
Нас пустило под пользователем www-data от которого запущен веб-сервер. Давайте найдем файл user.txt:
find / -name "user.txt" 2> /dev/null
Читаем его и сдаем.
Задание 4. Повышение привелегий:
Нас просят найти все файлы с битом SUID и спрашивают какой из них выглядит странно.
find / -user root -perm /4000 2> /dev/null
Напомню, что SUID это бит, который позволяем пользователю повысить привилегии до владельца файла. Например этот бит обязательно выставляется на утилите passwd, так как обычный пользователь должен мочь менять себе пароль, но при этом утилита passwd делаем запись в системные файлы, которые не доступны обычному пользователю. Бит SUID решает это проблему.
Подозрительным тут является интерпретатор python.
Чтобы повысить свои привилегии нас просят «загуглить» gtfobins:
GTFOBins — это тщательно подобранный список двоичных файлов Unix, которые можно использовать для обхода локальных ограничений безопасности в неправильно сконфигурированных системах.
Ищем на сайте gtfobins по слову python и находим то, что нам нужно.
Выполняем команду и проверяем повысились ли наши привилегии:
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
whoami
Отлично смотрим директорию /root и забираем оттуда файл.
ls /root
cat /root/root.txt
4 задание выполнено успешно.