burpsuite 插件开发——简单验证码爆破插件checkcode

0x00 前言

前段时间由于经常碰上验证码爆破问题,便和一个朋友就此交换了意见,都认为可以使用google的开源项目tesseract-ocr来实现。本着造轮子的精神,他无中生有,用python开发了一整个爆破平台(开发完毕要开源)。我人穷志短,就基于burpsuite开发个插件敷衍了事。

0x01 安装 tesseract-ocr

限于实验经验有限,这里只说ubuntuwindows两种安装方法。
ubuntu: 参照链接进行安装。
windows: 下载 jTessBoxEditor,解压后添加目录下的tesseract-ocr路径到环境变量就可以愉快的玩耍了。

0x02 开发

程序实现的原理比较简单

1. 注册burpsuite插件接口,实现BurpExtender类,关键代码如下,具体用法参见burpsuite api

public class BurpExtender implements IBurpExtender, ITab, IIntruderPayloadGeneratorFactory{
    // 注册burpsuite插件回调接口
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks){
        // TO DO
        // 在这里调用界面初始化函数,并完成主要的代码功能。
        // 程序逻辑为
        //   1. 使用脚本对图片进行简单处理
        //   2. 运行程序调用命令行的 tesseract 将图片转为字符串
    }
    public String getTabCaption() {
        return "CheckCode";
    }
    public Component getUiComponent() {
        return jTabPanelMain;
    }
    public String getGeneratorName() {
        return "CheckCode";
    }
    public IIntruderPayloadGenerator createNewInstance(IIntruderAttack attack) {
        return new IntruderPayloadGenerator(attack);
    }
}

2.实现IntruderPayloadGenerator类,在类中处理burpsuite的爆破参数

public class IntruderPayloadGenerator implements IIntruderPayloadGenerator{
    public IntruderPayloadGenerator(IIntruderAttack attack){
    }

    // 返回是否还有 payload ,由 burpsuite 调用
    public boolean hasMorePayloads() {
        return true;
    }

    // 返回下一个 payload ,由 burpsuite 调用
    public byte[] getNextPayload(byte[] baseValue) {
        return baseValue;
    }

    // 重置 payload ,由 burpsuite 调用
    public void reset() {
    }

}

3.界面设计

由于 java 开发界面比较麻烦,因此安装了eclipse插件WindowBulider Editor插件,接下来就是简单的画王八了,没有什么难度。一个小Tips:在BurpExtender类中加上main函数,在其中调用gui初始化函数,可以直接进行插件测试,避免繁琐的重新加载,同时方便debug。

完成后就是下图这种鬼样子
checkcode 测试及训练界面

还有这样
checkcode TIF图片修改界面

以及这样
这里写图片描述

0x03 测试

1.输入验证码url直接测试,结果不太好,4个错了1个。
这里写图片描述

2.点选黑白灰度二值化,将图片先转为灰度图,再进行二值化处理,效果好了一些,4认识了。
这里写图片描述

3. Tesseract 选项用来输入tesseract程序的参数,比如用-psm 7 digits来限定识别结果在tessdata/configs/digits当中。自己训练语言后,也使用这个参数来选择语言,如-psm 7 -l test
这里写图片描述

0x04 训练

遇上识别难度更大一些的,只能自己训练语言来识别。由于验证码各家各样,又有各种干扰线,统一识别无法实现,加之Tesseract官方提供的语言训练方法惨无人道,故此实现了一套较为简易的方案。
首先介绍一下官方的训练方法,网上已经有许多实现,如
Tesseract-OCR 字符识别—样本训练
tesseract_ocr 字符识别基础及训练字库、合并字库

在进行测试的时候发现只要把多张tif合并成为一张图片,tesseract就无法正常将之转为box文件。我的内心是崩溃的,如图

最后不得已只好将取出的多张验证码合并成一张进行训练,无奈之举。

1.点击Add Train将处理后的图片添加到训练集中

2.然后按Step1:Create BoxFile创建box文件
这里写图片描述

3.TIF图片中的每个字符进行调整。
这里写图片描述

4.回到CheckCode版面,按下Step2:Train,然后将burpsuite目录下的test.traineddata文件拷贝到tesseract-ocr\tessdata目录下。

5.重新进行测试,勾选Tesseract,输入命令-psm 7 -l test,效果如图
这里写图片描述

0x05 演示

这是CSDN的验证码
这里写图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值