HackMyVM Adroit — Linux


Para poder hacer uso de esta máquina primero debemos descargar el archivo y así poder desplegar el laboratorio.
Descargamos el archivo de la página https://hackmyvm.eu/machines/
Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos un archivo.
Para desplegar el laboratorio usaremos nuestro hipervisor favorito e iniciamos la máquina. En caso de no observar la IP de la máquina podemos emplear arp-scan
para ver la dirección IP en nuestra red que sería la 192.168.0.140
.
Realizamos un ping a la dirección IP y podemos validar que tenemos alcance.
Realizamos un ping a la dirección IP y podemos validar que tenemos alcance.
Empezamos con un escaneo de puertos y podemos ver que solo tenemos varios puertos abiertos.
Realizando un escaneo más profundo de los puertos encontrados podemos ver que tenemos acceso al servicio FTP por medio del usuario anónimo.
Al ingresar al servicio FTP observamos que tenemos una carpeta llamada pub
que contiene varios archivos que descargaremos.
Leyendo el archivo de texto tenemos one 0 is not 0 but O
, viendo la imagen vemos que puede estar relacionado con algún nombre así también ahora sabemos que el archivo .jar
puede contener información muy útil.
Usando un compilador podemos observar que en AdroitClient.class
tenemos unas credenciales.
Sup3rS3cur3Dr0it
zeus
god.thunder.olympus
Tratamos de ejecutar la aplicación y podemos observar que nos marca que no encontró el host
.
Para este problema lo que haces es agregar el nombre del host con la dirección IP en nuestro archivo hosts
.
Ejecutamos el archivo y vemos que está pasando algo en la parte de la frase.
Revisando lo que sucede en la sección de idea.class
podemos observar como maneja este objeto.
Como maneja dos variables, lo probaremos realizando una consulta SQL para ver si se puede inyectar comandos y tenemos éxito.
1 union select 1,2-- -
Probamos listando la base de datos y podemos ver que tenemos una llamada adroit
.
Revisando si contamos con algún dato más interesante vemos que aparte de adroit
no hay otro interesante.
Listamos las tablas de adroit
y vemos que tenemos 2 resultados.
1 union select 1, table_name from information_schema.tables where table_schema='adroit'-- -
Listamos la tabla users
y podemos ver que tenemos más campos interesantes.
1 union select 1,column_name from information_schema.columns where table_name='users'-- -
Ahora que sabemos qué campos nos importan listaremos estos campos y podemos observar el usuario winter
.
1 union select 1,group_concat(username,':',password) from adroit.users-- -
writer:l4A+n+p+xSxDcYCl0mgxKr015+OEC3aOfdrWafSqwpY=
Ahora tenemos las credenciales y el password encriptado, lo que debemos hacer ahora es obtenerlo en texto claro, ya que en un principio tenemos el código de como se realiza.
Para obtener el texto descifrado usaremos Python. Tener en cuanta que la clave obtenida debemos cambiar el 0 por la O como indicaba la pista obtenida pasos atrás, que dando de esta manera.
l4A+n+p+xSxDcYCl0mgxKrO15+OEC3aOfdrWafSqwpY=
from Crypto.Cipher import AES
import base64
def decrypt(key: str, ciphertext_b64: str) -> str:
# Convertir clave a bytes
key_bytes = key.encode('utf-8')
# Decodificar el texto Base64
encrypted_data = base64.b64decode(ciphertext_b64)
# Crear objeto AES (modo ECB)
cipher = AES.new(key_bytes, AES.MODE_ECB)
# Descifrar
decrypted = cipher.decrypt(encrypted_data)
# Eliminar padding (PKCS5/PKCS7)
pad_len = decrypted[-1]
plaintext = decrypted[:-pad_len].decode('utf-8')
return plaintext
# claves
key = "Sup3rS3cur3Dr0it"
ciphertext = "l4A+n+p+xSxDcYCl0mgxKrO15+OEC3aOfdrWafSqwpY="
print("[+] Texto descifrado:", decrypt(key, ciphertext))
En caso de no dejarles instalar un paquete, es recomendable emplear un entorno virtual.
Luego de ello ejecutamos nuestro archivo y podemos observar el texto claro. Para salir del entorno virtual solo ingresar deactivate
.
Ingresamos las credenciales y ya estamos dentro como writer
.
writer:just.write.my.ideas
Realizamos un sudo -l
y podemos observar que podemos ejecutar un archivo .jar
Si vamos a la carpeta temporal podemos ver que no tenemos ese archivo y nos brinda la libertad de poder ejecutar un .jar
personalizado mientras tenga el mismo nombre.
Para poder abusar de este lo que debemos crear un archivo .java y con este poder obtener una shell. Para agilizar podemos hacer uso de la página revshell La cual en la opción java#3 tenemos el código el cual solo copiamos.
Iniciamos nuestro listener.
Luego de crear el archivo lo que realizamos es generar un archivo llamado MANIFEST.MF
que incluye el nombre de la clase main
, compilamos el archivo .java
, luego de ello debemos empaquetar todo y esto generara el archivo .jar
. Con ello ahora cambiamos de nombre y podemos ejecutar el archivo .jar
.
Si tienen un problema al compilar el primer archivo este debe ser el mismo que la clase, como es en este caso se llama shell.java
y la clase tiene el mismo nombre.
Regresando a nuestro listener podemos observar que ya tenemos conexión. De esta manera culminando esta máquina.
Subscribe to my newsletter
Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
