Naam | Cengbox |
Auteur | Arslan |
URL | https://www.vulnhub.com/entry/cengbox-1,475/ |
Niveau | Beginner |
Interne ID | 150 |
Interne naam | Cengbox |
Tags | Web, sql, privesc |
Ik begin met een poortscan van de machine om te kijken welke poorten er allemaal open staan en welke services daar achter draaien.
nmap -p- 10.0.1.150 -sV -O -A
De volgende poorten zijn open:
22 | OpenSSH 7.2p2 |
80 | Apache httpd 2.4.18 |
Ik begin met het bekijken van poort 80 door een webbrowser te openen en naar de website te bladeren. http://10.0.1.150
Een startpagina waar je verder niet zo veel mee kunt doen. Misschien is er meer op de server te vinden. Tijd om met gobuster te kijken wat er nog meer te vinden is.
Zelf vind ik het handig om te zoeken naar de volgende bestandsextensies: php, htm, html, old, bck, txt, sql, bak
gobuster dir -u http://10.0.1.150 -w /usr/share/dirb/wordlists/big.txt -x php, html, htm, old, bck, txt, sql, bak
Dit levert een lijstje van interessante mappen op:
/img
/js
/masteradmin
/vendor
/server-status
In de browser open ik de mappen, na wat rondkijken wil ik de masteradmin map wat verder onderzoeken, ook dit keer gebruik ik gobuster.
gobuster dir -u http://10.0.1.150/masteradmin/ -w /usr/share/dirb/wordlists/big.txt -x php, html, htm, old, bck, txt, sql, bak
Het resultaat is veelbelovend:
db.php
login.php
upload.php
/vendor
Ik open login.php in de browser en word met een inlogscherm begroet.
Ik probeer eerst wat standaard gebruikersnamen met leeg wachtwoord gevolgd door standaard gebruikersnamen met standaard wachtwoorden. Bijvoorbeeld: admin:admin of root:toor.
Uiteindelijk blijkt de login gevoelig te zijn voor sql injectie en kan ik inloggen met de meest basale injectiestring die er volgens mij is:
‘ or 1-1 —
Effectief sluit dit een bestaande query, geeft vervolgens een statement wat altijd waar is en zorgt er voor dat de rest van de query als commentaar wordt gezien. In dit geval gebruik ik het op zowel de gebruikersnaam als het wachtwoord.
Zodra ik ben ingelogd kom ik op een upload scherm terecht.
Ik probeer eerst een plaatje te uploaden maar dat mag niet, er volgt een melding dat de extensie niet is toegestaan en dat alleen CENG files geupload kunnen worden.
Ik hernoem mijn plaatje naar .ceng en upload het. Dat mag.
Nu op zoek naar het plaatje, waar is deze terecht gekomen?
Het blijkt onder zijn originele naam in de map /uploads te staan.
Tijd om een shell te proberen, ik gebruik hiervoor eigenlijk altijd p0wny-shell. Die is redelijk klein en werkt erg prettig. Ik hernoem de shell naar shell.php.ceng en upload hem via het upload scherm,
Door nu in een webbrowser de url http://10.0.1.150/uploads/shell.php.ceng te openen krijg ik een nette shell in mijn browser.
Via het id commando kom ik er achter dat ik onder de www-data gebruiker kan werken.
De eerder gevonden file db.php is interessant omdat daar meestal credentials in te vinden zijn. Dus ik zoek het bestand op en bekijk de inhoud.
cat /var/www/html/masteradmin/db.php
Hmm, een root wachtwoord, ik probeer of ik die kan gebruiken om via SSH in te loggen.
ssh root@10.0.1.150
Na het ingeven van het gevonden wachtwoord krijg ik een ‘permission denied’. Helaas, het is dus niet het wachtwoord van root op het systeem. Maar misschien staat er een wachtwoord in de cengbox database.
Ik probeer mysqldump uit met de gegeven credentials en stuur de uitvoer naar /tmp/cengbox.sql
mysqldump -uroot -pSuperS3cR3TPassw0rd1! cengbox > /tmp/cengbox.sql
Dit levert een bestandje op in /tmp welke ik download via mijn P0wnyshell door download /tmp/cengbox.sql in te tikken.
Het bestand open ik in een tekst editor en al snel valt de volgende regel op:
INSERT INTO admin
VALUES (1,’masteradmin’,’C3ng0v3R00T1!’);
Dit is de login voor de masteradmin/login.php pagina, maar misschien is het wachtwoord ook ergens anders voor te gebruiken. Ik probeer de passwd file /etc/passwd te openen vanuit mijn shell. (Dit had ik op een eerder punt al uitgevoerd maar het is nu pas relevant).
cat /etc/passwd
Dit levert heel wat records op maar er zijn eigenlijk maar 2 users:
root
cengover
Ik probeer het gevonden wachtwoord uit via SSH.
ssh root@10.0.1.150
ssh cengover@10.0.1.150
Met de cengover gebruiker kom ik het systeem in. Ik heb nu een volledige shell onder de gebruiker cengover.
In de homedirectory van deze user staat de eerste vlag.
cat /home/cengover/user.txt
Ik upload het linenum script via P0wnyshell en voer het uit.
Er is echter niets gevonden wat ik kan gebruiken om mijn rechten te verhogen.
Ik onderzoek de cron scripts en kijk welke commando’s er uitgevoerd worden, misschien kan ik hier iets mee. Ook vraag ik de draaiende processen op met ps -aux, maar ook hier zit niets bruikbaars tussen.
Terwijl ik op zoek ga naar privesc exploits voor het besturingssysteem probeer ik nog één ander dingetje, ik upload process spy naar de machine (pspy64) en voer deze uit om een gedetailleerder overzicht van alle draaiende processen te krijgen. Daar waar ps -aux een momentopname geeft van de draaiende processen geeft pspsy64 een continu overzicht van de processen, ook processen die heel even gestart worden zie je hierin terug.
./pspy64
Het pspy scherm toont de processen die ik eerder ook heb gezien, ik laat het draaien terwijl ik op zoek ga naar een privesc exploit.
Als ik na een paar minuten terugkom in mijn shell zie ik een interessante regel op het scherm. Er wordt onder de root gebruiker een python script gestart.
Nader onderzoek brengt aan het licht dat het betreffende script /opt/md5check.py door de cengover gebruiker is aan te passen. Dit is de ingang die nodig is om root rechten te verkrijgen.
Het is nu mogelijk om ieder commando vanuit root uit te voeren door dit in het python script te plaatsen. Ik kies voor een reverse shell maar had net zo goed het root wachtwoord kunnen wijzigen of een nieuwe gebruiker aan kunnen maken met sudo rechten.
Het python script breid ik uit met het volgende stukje code:
Ik start op mijn pc een luisterend proces op poort 4444 en wacht.
nc -nvlp 4444
Na enige tijd wordt er een verbinding gelegd en komt er een shell tevoorschijn.
Ik controleer met whoami of dit inderdaad een root shell is, en dat is zo.