Last updated
Last updated
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
Info:
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
Info:
Si intentamos entrar en el puerto 80
veremos que esta bajo un dominio llamado cybersec.dl
, por lo que lo tendremos que añadir en nuestro archivo hosts
.
Lo guardamos y ahora si entramos con dicho dominio:
Si inspeccionamos el codigo y nos vamos a donde esta el JavaScript
veremos la siguiente funcion:
Por lo que vemos esta utilizando una API
la cual contiene una contraseña si nos vamos en la siguiente ruta viendo lo siguiente:
Info:
Por lo que vemos parece ser una contraseña de posiblemente algo, pero si volvemos a cargar la pagina veremos que va cambiando la contraseña, vamos a realizar un poco de fuzzing
en la seccion de la API
.
Info:
Vemos que nos saca un directorio llamado /login
, pero si entramos desde la web nos dira que no permite ese tipo de conexiones, como sabemos que esta dedicado al /login
ptobaremos algo asi:
Info:
Por lo que vemos funciona, ahora solo tendremos que descubrir las credenciales de algun usuario valido que este registrado en el sistema.
Antes vamos a realizar tambien un poco de fuzzing
para ver si encontramos algun subdominio
.
Info:
Vemos que obtuvimos uno llamado mail
, por lo que vamos añadirlo a nuestro archivo hosts
.
Lo guardamos y nos metemos con dicho subdominio
.
Veremos un login
, pero no vemos que se pueda hacer mucho, si volvemos e intentamos realizar fuerza bruta con el usuario admin
en la parte de /api/login
de la siguiente forma:
Info:
Veremos que sacamos las credenciales del usuario admin
, ahora vamos a ver que informacion contiene de la siguiente forma:
Info:
Vemos que hay varios subdominios
con rutas, probando todas, la unica que me funciono a parte de mail
es la de 0internal_down.cybersec.dl
, por lo que lo añadiremos al hosts
.
Lo guardamos y entramos con dicho subdominio
veremos lo siguiente:
Vemos que podemos descargarnos lo que parece ser un binario
y una nota .txt
, vamos a descargarnos las 2
cosas.
La nota dice lo siguiente:
Si intentamos ejecutar la aplicacion veremos que nos indica un nombre y despues nos hace un pregunta, se ve una aplicacion normal, pero si desbordamos la pila
de la aplicacion de esta forma:
Info:
Indica que el programa ha experimentado una violación de integridad de pila (stack smashing), lo cual ocurre cuando el programa intenta escribir más allá de la memoria que le ha sido asignada, corrompiendo así el espacio de pila.
Pero vemos que es muy complicado, ya que me tire bastante rato intentandolo, por lo que vamos a modificar los bytes
del binario con la herramienta ghidra
para llamar a una funcion que encontre bastante interesante que se llama factor1
y contiene lo siguiente:
Donde pone info:
veremos que muestra la informacion que queremos saber, desde el codigo no podremos ver cual es esa informacion, pero lo que si podremos hacer es irnos a la funcion main
que es donde se aloja el programa de forma principal y desde hay llamar a dicha funcion para que nos muestre la informacion, por eso tendremos que cambiar algunos bytes
del programa para re-compilarlo
y ejecutarlo, es una tarea bastante tediosa.
La funcion main
es esta en C#
:
Ahora tendremos que darle a este boton de aqui llendonos a la funcion main
y probaremos a cambiar algunos bytes
para que un texto diga otra cosa de lo que normalmente dice, en vez de que diga Bienvenido al programa interactivo.
reemplazarlo por Programa modificado by d1se0.
.
Dandole a ese boton, se nos abrira la cadena de bytes
que corresponde en la posicion de donde tengamos el programa, por lo que pincharemos donde pone la frase y nos marcara la cadena de bytes
, una vez echo eso, pasaremos el texto de ascii
a bytes
con la siguiente pagina:
Tendremos dentro del panel de bytes
que darle al siguiente boton para empezar a modificar el bloque:
Y lo modificaremos...
Una vez modificados los bytes
, le daremos al siguiente boton para guardar la modificacion.
Una vez que lo hayamos guardado se habran modificado los bytes
por lo que el texto tambien se habra modificado, tendremos que re-compilarlo
llendonos a File
:
De esta seccion, seleccionamos Export Program...
:
En el formato lo dejamos como Original File
para que sea el binario y se pueda ejecutar, y el PATH
donde queremos que lo deje, una vez echo todo esto, le daremos a Ok
y con esto ya tendremos el binario modificado.
Vamos a probar a ejecutarlo:
Info:
Vemos que ha funcionado, ahora vamos a modificar los bytes
de lo que realmente queremos hacer, que sera llamar a la funcion factor1
para ver que obtenemos de informacion.
Pero es demasiado complejo para realizarlo en Ghidra
, por lo que vamos a utilizar la herramienta radare2
.
Vamos a ejecutar radare2
en modo escritura
para poder escribir en las direcciones de memoria la funcion que queremos que llame.
Vamos a cargar el binario
que modificamos con ghidra
, una vez que estemos dentro del binario con radare2
, vamos a identificar donde esta la direccion de memoria a la que se esta llamando la funcion factor2
:
Info:
Vemos esta parte de aqui que es la que queremos modificar:
Y corresponde con 0x000023dc
por lo que vamos a modificar ese sym.factor2
por sym.factor1
, pero antes tendremos que saber la direccion de memoria de factor1
:
Info:
Aqui vemos esta parte:
Por lo que vemos corresponde sym.factor1
con 0x22d2
, teniendo todo esto, ya podremos realizar el calculo de los bytes
que tendremos que poner en la direccion que comente antes para poder llamar a sym.factor1
.
La instrucción call
usa una dirección relativa y se calcula así:
Sabemos que:
factor1
= 0x000020a7
call
en 0x000023dc
Convertimos -0x33A
a little-endian en 4 bytes:
Si tambien contamos con el opcode
del CALL
que es e8
nos quedaria algo asi:
Por lo que tendremos que sobreescribirlo de la siguiente forma:
Info:
Vemos que efectivamente se modifico de forma correcta, por lo que si nos salimos poniendo q
y ejecutamos el binario:
Info:
Vemos que ha funcionado y nos devuelve la informacion por lo que se ve de forma codificada, vamos a intentar decodificarlo.
NOTA:
Os dejo el binario modificado en el siguiente link:
Veremos que esta en Base58
, si lo decodificamos veremos lo sguiente:
Obtuvimos lo que parece ser una contraseña, ahora la tendremos que probar a conectarnos por SSH
como el usuario flypsi
.
No nos va a dejar, por lo que podremos realizar varias combinaciones, entre ellas probar con flipsy
ya que tiene mas sentido que el anterior.
Metemos como contraseña Chocolate.1704
y veremos que estamos dentro.
Si hacemos sudo -l
veremos lo siguiente:
Vemos que podemos ejecutar exim
como el usuario darksblack
, por lo que haremos lo siguiente:
Si lo ejecutamos veremos lo siguiente:
Info:
Podemos ejecutar un script con dicho binario siguiendo unos parametros, pero antes crearemos un archivo con una reverse shell
.
Lo guardamos y antes de ejecutar el script con exim
nos pondremos a la escucha:
Ahora si lo vamos a ejecutar en la maquina victima.
exim -be
?exim
: Es un servidor de correo electrónico (MTA - Mail Transfer Agent) utilizado para enviar y recibir correos. Es un software muy común en servidores de correo.
-be
: Es una opción de Exim que ejecuta el programa en un "modo de prueba" (prueba de envío de correo). En este modo, Exim procesa y muestra cómo manejaría un mensaje de correo, pero no envía el correo de verdad. Es un modo que se usa para depurar o verificar configuraciones de correo.
${run{/tmp/shell}}
?${run{...}}
: Esta es una característica especial de Exim que permite ejecutar comandos o scripts desde dentro de su configuración. Es como una "instrucción" para que Exim ejecute un comando externo.
/tmp/shell
: Es una ruta de archivo. En este caso, se está indicando a Exim que ejecute el archivo ubicado en /tmp/shell
. Este archivo contiene la reverse shell
.
¿Qué pasa cuando Exim ejecuta ${run{/tmp/shell}}
?
Cuando Exim recibe esta instrucción, ejecuta el archivo que está en /tmp/shell
. Este archivo contendra la reverse shell
. Si este archivo tiene el código adecuado, puede ejecutar una shell (como sh
), lo que le permite al atacante obtener acceso al sistema, si este archivo ha sido modificado maliciosamente.
Si volvemos a donde tenemos la escucha, veremos lo siguiente:
Por lo que vemos somo dicho usuario, tendremos que sanitizar la shell (TTY
).
Si vemos que id
tenemos, veremos lo siguiente:
Info:
Vemos que estamos en el grupo cyber
por lo que vamos a buscar por grupos
con find
.
Info:
Vemos que ese script .py
esta dentro de dicho grupo y si lo leemos veremos lo siguiente:
Si lo decodificamos veremos lo siguiente:
Vemos que dentro de la maquina a nivel local en el puerto 25000
esta corriendo esta aplicacion en la que se puede ejecutar 2
comando ls
y whoami
, vamos a probar a ejecutar por ejemplo whoami
:
Info:
Vemos que se esta ejecutando como root
, por lo que haremos lo siguiente.
Vamos a probar si se pueden concatenar comandos con ;
de la siguiente forma:
Tendremos que URLEncodearlo
para que funcione:
Info:
Vamos realizar lo siguiente para poder ser root
.
Con esto vamos a poner el archivo passwd
con todos los permisos posibles, para poder quitar la contraseña a root
, una vez ejecutado haremos lo siguiente:
Info:
Ahora que sabemos que funciono, haremos esto:
Lo guardamos y hacemos lo siguiente:
Info:
Con esto ya seremos root
directamente, por lo que habremos terminado la maquina.
URL =
URL =