Opa, Eai! Beleza? Hoje vou te mostrar como você pode criar um Exploit, talvez seja seu primeiro, será simples, porém, é um início!
Quando estava resolvendo a sala Kenobi do Try Hack Me, fui em busca de exploits, bati o olho em um, vi a estrutura e decidi codar um por si mesmo. É um script rápido de escrever e gostaria de compartilhar com vocês, com base em um exploit que encontrei, meu intuito aqui é apenas de te ajudar a pensar e criar um seu também. Não se limite, customize, melhore ele, não sei, mas não se limite a apenas copiar o código que você verá aqui.
Será escrito em python, portanto, é necessário conhecimentos em módulos python, como o módulo socket e o módulo sys, mas não se preocupe, o que você não souber, uma rápida pesquisada no google vai te esclarecer.
O meu intuito aqui não é te apresentar uma falha nova no software ProFTPd, até porque essa falha não é nova, quero apenas te mostrar como você pode criar um exploit simples e rápido.
Vamos nessa!
ProFTPd 1.3.5 Remote Code Execution
Basicamente, o módulo mod_copy permite que pessoas não autenticadas tenham acesso arbitrário a arquivos no sistema em que o ProFTPd esteja rodando, via comandos site cpfr (copia de um lugar) e site cpto (cola em um lugar).
Tem uma sala bacana no Try Hack Me para treinar esse ambiente, chama-se Kenobi, usarei a máquina desta sala para rodar o exploit.
Escolha seu editor de texto favorito aí, e vamos codar!
O Exploit
Vou documentar o código aqui pra vocês, porém, detalhes sobre os módulos você terá que dar uma olhada na documentação deles. Vamos lá!
A finção payload
A função payload é que irá fazer todo serviço, o nome é o de menos, se quiser escolher outro, fique a vontade. Essa função recebe dois argumentos, o host, ou seja, o IP da máquina alvo e o socket que é criado na outra função que será descrita mais à frente. Na linha 5, conectamos ao alvo através do socket criado. na linha 6 recebemos a resposta do alvo, que nesse caso é um banner do serviço FTP.
Na linha 9, enviamos o comando que será interpretado pelo serviço FTP do alvo e irá copiar o arquivo /home/kenobi/.ssh/id_rsa, na linha 10 recebemos a resposta da execução do comando no alvo. Na linha 13 enviamos o comando que irá “colar” o id_rsa anteriormente copiado, em /var/ que no cenário desta sala é o diretório que podemos montar e ter acesso.
Na linha 14 recebemos a resposta do comando da linha 13 executado anteriormente. Na linha 18 encerramos a conexão com o alvo.
A função main()
Nesta função há uma checagem e aqui criamos o objeto socket.
Na linha 1 criamos o objeto socket, responsável por estabelecer a conexão que ser do tipo TCP/IP (SOCK.STREAM) e usará IPs do tipo IPv4 (AF_INET)
Try/Except é usado para impedir que o programa encerre de maneira indesejada caso o usuário não inserir nenhum argumento via linha de comando. Na linha 3 recebemos o iIP do alvo via linha de comando. Na linha 4 executamos a função payload passando o host e socket.
Bom, agora é só testar! Claro, este exploit está adequado ao cenário da sala, mas não se esqueça de adequá-lo ao cenário em que você irá executá-lo. Bom é isso!
Foi simples, porém, pode servir de base para criar outros, caso tenha alguma dúvida, fique a vontade para entrar em contato comigo!
Obrigado por ler!
Deus te abençoe!