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 🎥
- Você trabalha em uma empresa de cibersegurança? Gostaria de ver sua empresa anunciada no HackTricks? Ou gostaria de ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
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:
- Sendmail MTA: http://www.sendmail.org/~ca/email/man/sendmail.html
- Postfix MTA: http://www.postfix.org/mailq.1.html
- Exim MTA: https://linux.die.net/man/8/eximReferences
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
- Por exemplo: john.doe+intigriti@example.com → john.doe@example.com
Comentários entre parênteses () no início ou no final também serão ignorados
- Por exemplo: john.doe(intigriti)@example.com → john.doe@example.com
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
- https://resources.infosecinstitute.com/email-injection/
- https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
- https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view
- https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}