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

    xiaoxiao2025-01-27  10

    0x00 前言

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

    0x01 安装 tesseract-ocr

    限于实验经验有限,这里只说ubuntu和windows两种安装方法。 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。

    完成后就是下图这种鬼样子

    还有这样

    以及这样

    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 演示

    这是的验证码

    转载请注明原文地址: https://ju.6miu.com/read-1295829.html
    最新回复(0)