Shell.ps1
Payload shell.ps1
Explicación de las partes más relevantes del código:
Linea 1:
Crea una instancia de la clase
TCPClient
conectándose a la IP y puerto indicados.Variable
$client
es un objeto TCP que mantiene la conexión con el atacante.Función:
New-Object
es usada para instanciar clases de .NET en PowerShell.En síntesis, esta línea está creando un objeto (instancia) de la clase
.NET
System.Net.Sockets.TCPClient
.
Línea 2:
.GetStream()
es un método deTCPClient
.Devuelve un
NetworkStream
, que es el canal por donde viajan los datos de ida y vuelta
Linea 6:
New-Object System.Text.ASCIIEncoding
→ esto crea una instancia del codificador ASCII, que permite convertir entre bytes ↔ strings.$bytes
es un buffer con datos binarios que vienen por elNetworkStream
..GetString($bytes, 0, $i)
convierte esos bytes en texto plano.
👉 Así, $data
contiene el comando en texto que el atacante escribió desde su lado.
Linea 7: el corazón de la reverse shell:
iex $data
→iex
es una abreviación deInvoke-Expression
, una función de PowerShell que evalúa y ejecuta texto como si fuera código. Si$data
contiene:"Get-Process"
, entonces:iex $data
➜ ejecutaGet-Process
2>&1
→ redirige los errores (canal 2) al canal de salida estándar (1), para no perderlos.| Out-String
→ convierte todo el resultado (incluso errores) a una cadena de texto legible.El resultado final se guarda en
$sendback
.
👉 Esto asegura que incluso si el comando falla, la shell no crashea y el atacante recibe el mensaje de error también.
Linea 9 y 10:
Ese resultado de la ejecución ($sendback
) se convierte a bytes y se envía de vuelta por el NetworkStream
hacia el atacante.
Ver maquina: Archetype (HTB tier 2)
Last updated