Injeção de HTML em um modelo de e-mail
Enviar e-mails em nome de uma empresa? Veja como encontrei essa vulnerabilidade em várias grandes empresas, permitindo-me ganhar recompensas facilmente.
Olá caçadores . O objetivo aqui é poder enviar e-mail(s) em nome de uma empresa — a partir de seu endereço de e-mail — com a capacidade de alterar/personalizar o conteúdo e, portanto, o modelo HTML .
Qual é o impacto de tal vulnerabilidade?
O impacto desta vulnerabilidade pode ser significativo, um invasor aproveitaria a confiança que os usuários têm na plataforma para redirecioná-los para sites fraudulentos (phishing, etc.) ou até mesmo induzi-los a realizar ações indesejáveis de suas contas. Os programas geralmente consideram a gravidade dessa vulnerabilidade entre baixa e média .
Como funciona?
A injeção de HTML é uma vulnerabilidade em que um aplicativo aceita a entrada do usuário e, em seguida, incorpora a entrada no HTML. Um invasor pode injetar HTML a partir da entrada do usuário para que seu código malicioso seja incorporado ao modelo geral gerado pelo aplicativo.
Isso ocorre devido à sanitização inadequada da entrada do usuário. É muito fácil de corrigir, mas muitas vezes passa despercebido - este vetor de ataque em particular - para o deleite dos caçadores de insetos.
A famosa regra de ouro para desenvolvedores: nunca confie na entrada do usuário
Identificação de diferentes vetores de ataque e exploração
A primeira coisa a fazer para identificar essa vulnerabilidade é encontrar no aplicativo um recurso que envie e-mails: a maioria dos aplicativos possui uma seção “Fale conosco” ou uma seção “Ajuda” para enviar solicitações às equipes da empresa. Esses recursos são os mais básicos, e a lista não é exaustiva, diferentes funcionalidades de envio de e-mails podem ser encontradas dependendo da natureza do aplicativo.
Uma vez encontradas essas funcionalidades, elas devem ser testadas e verificadas quanto à presença de vários critérios :
Tomaremos como exemplo um formulário que permite enviar um pedido (pedido de ajuda) ao pessoal técnico da empresa
[1] Ao enviar o formulário, recebo um e-mail (para o endereço de e-mail indicado no formulário ou para o endereço de e-mail vinculado à conta da qual o pedido foi enviado)?
Se não - certifique-se porque isso pode levar algum tempo - então você não precisa procurar mais. Antes de injetar código em um modelo, o modelo em questão ainda deve existir.
[2] Se eu receber um e-mail ao enviar o formulário, é possível especificar algum endereço de e-mail no formulário/consulta?
Para explorar a vulnerabilidade é necessário poder direcionar outras pessoas para que o formulário em questão me permita especificar o e-mail de minha escolha ou seja necessário estar conectado para enviar o formulário e, portanto, o e-mail será enviado automaticamente para o endereço de e-mail se vincula à conta conectada:
Nesse caso, intercepte a solicitação em seu proxy preferido e verifique se seu endereço de e-mail não está na solicitação HTTP (POST em princípio) e tente alterá-lo para o endereço de e-mail de sua escolha.
[3] Algumas das informações fornecidas no formulário estão refletidas no e-mail recebido?
Se não for esse o caso, verifique se alguma de suas informações pessoais - caso você esteja conectado à sua conta - está refletida no e-mail, como nome de usuário, sobrenome ou nome, por exemplo.
Neste caso, modifique a(s) informação(s) refletida(s) e tente inserir sua carga útil lá. Mesmo que a informação em questão não seja interpretada no aplicativo, ela pode ser interpretada no e-mail , isso é chamado de injeção de segunda ordem , a injeção não é realizada diretamente a partir das entradas do usuário no formulário, mas a partir de informações registradas em outro lugar , na conta, por exemplo.
Caso contrário, não podemos tentar injetar código ou mesmo ignorar qualquer filtro.
[4] O último passo é tentar injetar código HTML que será interpretado pelo template em questão
Como mencionado anteriormente, esse tipo de vulnerabilidade geralmente passa despercebido, e alguns aplicativos não têm filtros front-end nem back-end, e uma carga útil simples, incluindo código HTML, é suficiente:
vul<strong>ne</strong>rable
,
Tendo problemas para ignorar um filtro para um determinado personagem? Dê uma olhada em:https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md
Esta foi a minha primeira redação, obrigado por ler. Se você tiver alguma dúvida, sinta-se à vontade para me avisar.
Minha conta no Twitter:https://twitter.com/blank_cold





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)