hacktricks/pentesting-web/email-injections.md

12 KiB

Injeções de Email


Use Trickest para construir e automatizar fluxos de trabalho com facilidade, utilizando as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje mesmo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Injetar em e-mail enviado

Injetar Cc e Bcc após o argumento do remetente

From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com

A mensagem será enviada para as contas do destinatário e destinatário1.

Injetar argumento

From:sender@domain.com%0ATo:attacker@domain.com

A mensagem será enviada para o destinatário original e para a conta do atacante.

Injetar argumento de Assunto

From:sender@domain.com%0ASubject:This is%20Fake%20Subject

O assunto falso será adicionado ao assunto original e, em alguns casos, o substituirá. Isso depende do comportamento do serviço de e-mail.

Alterar o corpo da mensagem

Injete uma quebra de linha de duas linhas e, em seguida, escreva sua mensagem para alterar o corpo da mensagem.

From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.

Exploração da função mail() do PHP

A função mail() do PHP é comumente usada para enviar e-mails a partir de um servidor web. No entanto, ela também pode ser explorada por hackers para realizar ataques de injeção de e-mail.

O que é uma injeção de e-mail?

Uma injeção de e-mail ocorre quando um invasor consegue inserir código malicioso em um campo de entrada de e-mail, explorando uma falha de segurança no código do aplicativo. Isso pode permitir que o invasor envie e-mails não autorizados, falsifique remetentes ou execute outras ações maliciosas.

Como explorar a função mail() do PHP?

Para explorar a função mail() do PHP, um invasor precisa encontrar um campo de entrada de e-mail vulnerável em um aplicativo da web. Isso pode ser um campo de formulário de contato, um campo de registro de usuário ou qualquer outro campo que aceite endereços de e-mail.

Uma vez identificado o campo vulnerável, o invasor pode inserir código malicioso para explorar a função mail(). Isso pode ser feito inserindo caracteres especiais, como aspas, ponto e vírgula ou caracteres de escape, que podem enganar o código do aplicativo e permitir a execução de comandos indesejados.

Impactos de uma injeção de e-mail bem-sucedida

Uma injeção de e-mail bem-sucedida pode ter várias consequências negativas, incluindo:

  • Envio de spam em massa a partir do servidor comprometido.
  • Falsificação de remetentes para realizar ataques de phishing.
  • Vazamento de informações confidenciais por meio de e-mails não autorizados.
  • Execução de comandos maliciosos no servidor.

Como se proteger contra injeções de e-mail?

Para proteger um aplicativo da web contra injeções de e-mail, é importante seguir as melhores práticas de segurança, como:

  • Validar e filtrar todas as entradas de usuário, especialmente campos de e-mail.
  • Utilizar funções de escape adequadas para evitar a interpretação incorreta de caracteres especiais.
  • Implementar mecanismos de autenticação e autorização para controlar o envio de e-mails.
  • Manter o software do servidor e as bibliotecas atualizados para corrigir quaisquer vulnerabilidades conhecidas.

Ao adotar essas práticas, é possível reduzir significativamente o risco de uma injeção de e-mail bem-sucedida e proteger o aplicativo contra ataques maliciosos.

# The function has the following definition:

php --rf mail

Function [ <internal:standard> function mail ] {
- Parameters [5] {
Parameter #0 [ <required> $to ]
Parameter #1 [ <required> $subject ]
Parameter #2 [ <required> $message ]
Parameter #3 [ <optional> $additional_headers ]
Parameter #4 [ <optional> $additional_parameters ]
}
}

O 5º parâmetro ($additional_parameters)

Esta seção será baseada em como abusar deste parâmetro supondo que um atacante o controle.

Este parâmetro será adicionado à linha de comando que o PHP usará para invocar o binário sendmail. No entanto, ele será sanitizado com a função escapeshellcmd($additional_parameters).

Um atacante pode injetar parâmetros extras para o sendmail neste caso.

Diferenças na implementação de /usr/sbin/sendmail

A interface sendmail é fornecida pelo software de e-mail MTA (Sendmail, Postfix, Exim etc.) instalado no sistema. Embora a funcionalidade básica (como os parâmetros -t -i -f) permaneça a mesma por razões de compatibilidade, outras funções e parâmetros variam muito dependendo do MTA instalado.

Aqui estão alguns exemplos de diferentes páginas de manual do comando/interface sendmail:

Dependendo da origem do binário sendmail, diferentes opções foram descobertas para abusar deles e vazar arquivos ou até mesmo executar comandos arbitrários. Veja como em https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html

Injetar no nome do e-mail

Partes ignoradas de um e-mail

Os símbolos: +, - e {} em raras ocasiões podem ser usados para marcação e ignorados pela maioria dos servidores de e-mail

Comentários entre parênteses () no início ou no final também serão ignorados

Bypass da lista de permissões

Aspas

IPs

Você também pode usar IPs como nomes de domínio entre colchetes:

  • john.doe@[127.0.0.1]
  • john.doe@[IPv6:2001:db8::1]

Outras vulnerabilidades

SSO de terceiros

XSS

Alguns serviços como github ou salesforce permitem que você crie um endereço de e-mail com payloads XSS. Se você puder usar esses provedores para fazer login em outros serviços e esses serviços não estiverem sanitizando corretamente o e-mail, você poderá causar XSS.

Account-Takeover

Se um serviço SSO permitir que você crie uma conta sem verificar o endereço de e-mail fornecido (como salesforce) e depois você pode usar essa conta para fazer login em um serviço diferente que confia no salesforce, você poderá acessar qualquer conta.
Observe que o salesforce indica se o e-mail fornecido foi ou não verificado, mas a aplicação deve levar em conta essa informação.

Reply-To

Você pode enviar um e-mail usando From: company.com** ** e Replay-To: attacker.com e se alguma resposta automática for enviada devido ao e-mail ter sido enviado de um endereço interno, o atacante pode ser capaz de receber essa resposta.

Taxa de rejeição permanente

Algumas aplicações como a AWS têm uma Taxa de Rejeição Permanente (na AWS é de 10%), que quando sobrecarregada, o serviço de e-mail é bloqueado.

Uma rejeição permanente é um e-mail que não pôde ser entregue por algum motivo permanente. Talvez o e-mail seja um endereço falso, talvez o domínio do e-mail não seja um domínio real, ou talvez o servidor do destinatário do e-mail não aceite e-mails), isso significa que de um total de 1000 e-mails, se 100 deles forem falsos ou inválidos e causarem o retorno de todos eles, o AWS SES bloqueará seu serviço.

Portanto, se você puder enviar e-mails (talvez convites) do aplicativo da web para qualquer endereço de e-mail, você pode provocar esse bloqueio enviando centenas de convites para usuários e domínios inexistentes: DoS do serviço de e-mail.

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente, utilizando as ferramentas comunitárias mais avançadas do mundo.\ Acesse hoje mesmo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}