burpsuite插件开发-HTTP请求入库
条评论前言
早前写过一个基于代理的模式的自动化的安全扫描器。
当初是用python来写的一个代理,但是可能我实际安全测试的时候用burpsuite比较多一点,所以写个burpsuite的插件来被动的存储http请求到数据库里。
这个也比较简单,所以大概跟同学们说下,代码会开源。
插件基础
基础环境的搭建可参考上篇文章,一些API的基础可参考官方文档。
还是同之前的插件一样,所有的burpsuite插件都必须实现IBurpExtender这个接口。由于我们需要被动的收集http的请求,所以还要实现IScannerCheck。
为了界面客观性,加了个UI面板,所以需要实现ITab接口。
代码实现
burpsuite插件的注册声明
1 | public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) { |
这个方法每个插件都要实现,基本操作都是类似的。初始化一些变量并注册插件。
为了避免一些静态资源js和css之类的存到数据库,所以进行了后缀的检测。
同样的,避免一些不需要检测的请求入库,还进行了域名的黑名单过滤。预定义如下
1 | public static String[] blackExt = { |
可以根据需求来进行具体的修改。
检测方法如下
1 | public static boolean isblackext(String url) { |
重复的URL地址将不会再次存储,每次入库前会进行查重,具体为
1 | public int queryrepeat(String url,String body,Connection conn) { |
然后就是根据被动的请求,来拿到http请求,进行拆分组装后存到MySQL数据库里。
1 | String url = this.helpers.analyzeRequest(baseRequestResponse).getUrl().toString(); |
helpers是burpsuite提供的一个帮助类的插件,可由他来获取到http请求的URL,method,body参数等信息。
封装后入库。
1 | public int insert(Map<String,String> sql,Connection conn,PrintWriter stdout) { |
httplog表结构如下,需要先创建表
1 | USE `scan`; |
使用
直接导入插件后
修改响应的MySQL连接字符串,当Proxy被选中则存储到数据库,否则将不会处理。方便手工测试一些东西时,所以加个是否开启的开关。
控制台输出
然后浏览器开启burpsuite代理即可自动的存储到数据库中。
然后就可以根据具体的需要来进行检测漏洞了。