Desenvolvendo meu primeiro Plugin para o Burp Suite com Python
Nesses últimos dias, estive pensando em uma aplicação interessante que eu poderia fazer para quem tivesse inicializando tanto em Python quanto na área de Pentest. Então, resolvi desenvolver um plugin para mostrar como pode ser fácil juntar esses dois conhecimentos dentro do Burp Suite.
Antes de mais nada, irei responder alguns pontos para quem está inicializando na área.
Acredito que Python é uma ótima linguagem para se começar na área de programação. Ela é pouco verbosa (ou seja, com poucas linhas de código, você consegue desenvolver de maneira simples), há muitas bibliotecas disponíveis (diversas funções que podem facilitar o seu trabalho) e uma comunidade bem ativa.
Para as pessoas que não sabem o que é Pentest, vou explicar de maneira bem resumida. Pentest (Penetration testing), conhecido como "Teste de invasão". Esse teste tem como objetivo testar a segurança da empresa, simulando um ataque malicioso de maneira ética, onde existe um acordo para que o teste seja realizado, diferentemente de como atua um hacker.
Muitos desses testes são realizados em sistemas/aplicações WEB. Isso ocorre pela facilidade dessas aplicações não estarem mais limitadas apenas aos Desktops. Dessa forma, uma ferramenta imprescindível para as realizações desses testes é o Burp Suite (existem outras ferramentas, mas acredito que essa seja a mais famosa). Ele possui diversas funções, mas a principal consiste em ser um Proxy. Dessa forma, ele intercepta as requisições WEB, permitindo que essas requisições possam ser manipuladas e assim testadas, para descobrir uma vulnerabilidade ali existente.
Depois dessa introdução, vamos ao desenvolvimento do Plugin :)
Para quem não está familiarizado com o Burp Suite, existe uma aba chamada "extender". Dentro dela, há 3 abas bem interessante. Aba "Extension", BApp Store"e "APIs".
• Extension → É o local onde você irá adicionar o seu plugin (seu código em Python), além de adicionar .jar do Jython para que o Burp Suite consiga compilar os programas em Python para Java. Nesse caso, utilizaremos o jython-standalone-2.7.2.jar
• BApp → É o local onde existe diversas extensões (Plugins) disponíveis para download (e serve como local de inspiração para novas ideias).
• APIs → É o local onde existe diversas bibliotecas disponíveis do Burp Suite, com uma documentação clara, para que facilite seu uso quando for necessário utilizar essas bibliotecas. Embora esteja em Java, é possível entender como chamar essas bibliotecas e funções para dentro do Python.
Bom, algo que vocês podem estar se perguntando é: O que é Jython?
Jython é uma implementação de alto nível do Python escrito 100% em Java. Dessa forma, é possível escrever o código em Python e assim, consiga rodar dentro de qualquer JVM (Java Virtual Machine).
Antes de mostrar a ideia do código, recomendo fortemente ler a documentação do Jython, principalmente para a manipulação gráfica, pois te ajudará a ter novas ideias de como desenvolver a interface do seu plugin:
Caso você não queira manipular a interface gráfica, há uma outra maneira mais simples. Você pode utilizar o NetBeans (é um ambiente de desenvolvimento integrado gratuito para Java), por exemplo. Dessa maneira, você clica em criar um novo projeto e assim, clica com o botão direito para criar um "JFrame".
Portanto, você pode criar uma interface, utilizando o recurso "Drag and Drop".
Após escolher o tipo do campo de texto e a localização de cada componente, é possível clicar no "código-fonte". Com isso, é possível fazer a conversão para Jython de maneira bem simples, seguindo esses passos:
- Remover
new
. - Remover
;
. - Procurar por
javax.swing.
e importar todo o código. - Remover
javax.swing.
. - Adicionar todo o código para dentro do construtor da classe.
Uma referência muito boa que encontrei para o ensinamento anterior, foi esse site aqui:
Depois dos ensinamentos anteriores, vou mostrar como cheguei ao meu primeiro plugin.
Uma dica que acho importante, é sempre buscar a documentação oficial do projeto que tem em mente. Nesse caso, busquei a documentação do Burp Suite, onde ele mostra como fazer o meu primeiro "Hello World", além de mostrar como adicionar o plugin ao Burp Suite:
Assim, busquei entender o que era necessário adicionar no meu código em Python. Por exemplo, ao abrir o "Hello World", foi possível perceber através do "import" (que é a maneira usada para adicionar uma biblioteca ao código) a biblioteca importada "IBurpExtender". Caso você olhe a parte de API do Burp Suite, perceberá a existência dessa biblioteca, em Java. Assim, é possível perceber a função que existe nessa biblioteca:
void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
Dessa forma, é possível entender que ela não retorna nenhum valor ("void") e precisa de um parâmetro de entrada "callbacks". Portanto, fazendo um paralelo com Python, entendemos que é necessário criar essa função "registerExtenderCallbacks" e passar esse parâmetro "callbacks" como entrada.
Aqui na imagem podemos perceber o output que é gerado no Burp Suite. Uma outra maneira também de gerar esse output, é apenas chamando a função print do Python (o que ajuda bastante na hora de fazer o debug durante o desenvolvimento do código).
Após isso, resolvi entender como que eu poderia criar uma interface gráfica. Primeiramente, quis aprender como criar uma aba de extensão (Tab). Percebi pela documentação que era necessário criar um callback com o método "addSuiteTab" e era necessário adicionar a biblioteca "ITab".
Depois disso, resolvi manipular a interface gráfica para descobrir o posicionamento dos botões. Isso é possível observar na função abaixo "getUiComponent".
Nessa função criei um painel com "JPanel" e os campos de interação com o "JTextField".
Após isso, foi necessário adicionar ao painel cada uma dessas informações com o método "add" — panel.add.
Caso queira adicionar ou alterar a cor de uma caixa de texto, é necessário importar a biblioteca "Color" e trocar a cor, como está no código "txt2.setBackground(Color.WHITE)".
Depois disso, tive como ideia como prova de conceito (POC), criar um plugin que me ajudasse a encontrar todas as URLs existentes naquele site, chamando a extensão de URL Finder. Portanto, tinha ideia que era necessário utilizar duas bibliotecas que considero bastante importante em Python:
- Requests
- BeautifulSoup
A biblioteca Requests serve para interagir com o servidor, fazendo uma requisição HTTP. Essa biblioteca é bastante utilizada para interações com APIs e nesse caso, servirá para retornar o HTML do meu código.
Dessa maneira, eu utilizo a biblioteca BeautifulSoup que também é bastante conhecida pelos programadores de Python, para a manipulação do HTML de maneira mais rápida. Assim, é possível procurar por Tags específicas que são bem comuns em código de marcação. No nosso exemplo, como quero encontrar URL presente na página, usarei a tag HTML que demarca links que é "href".
Para adicionar essas bibliotecas ao nosso projeto, é necessário adicionar essas bibliotecas localmente, pois elas não vem por padrão.
Portanto, é necessário utilizar o instalador de pacotes do Python (pip), além das bibliotecas, no terminal:
java -jar jython-standalone-2.7.2.jar -m ensurepip
java -jar jython-standalone-2.7.2.jar -m pip install requests
java -jar jython-standalone-2.7.2.jar -m pip install beautifulsoup4
Além disso, para fazer com que a informação chegasse na tela de "output" do plugin, foi necessário criar um botão, que fizesse a ação de clicar e retornar essa informação das URLs.
Portanto, para o desenvolvimento do botão, por meio da documentação do Jython, é necessário a utilização do "JButton". Dessa maneira, para o desenvolvimento de uma ação, foi necessário passar o parâmetro da função que fará essa ação (actionPerformed=btn1Click).
Após alguns ajustes que são feitos no retorno do output, é possível ver como que o plugin funciona e o código completo, abaixo:
Caso haja alguma dúvida, também deixei a instalação do Jython no meu GitHub:
Aqui estão os links da documentação da biblioteca Requests e BeautifulSoup: