burp验证码识别插件改造

    渗透测试 lz520520 4年前 (2020-07-27) 23604次浏览

    0x00 前言

    一直想找一个burp的验证码识别插件,网上看了好几款,像reCAPTCHA/captcha-killer,要找的不是说验证码识别算法或者库,是一个可以和intruder、验证码识别接口同时对接的插件,可以灵活配置自己需要的验证码识别接口,最终选择了captcha killer
    github地址: https://github.com/c0ny1/captcha-killer

    他的界面如下,可以配置验证码获取URL和验证码识别接口,都是填充HTTP请求包的方式,就比较灵活

    burp验证码识别插件改造

    因为使用的验证码识别接口是POST直接提交二进制图片文件的,就如上图配置所示,发现发送一直失败,所以考虑调试下该插件,修修bug。

     

    0x01 burp插件调试环境配置

    这边跳过burp插件开发流程,可以参考最后的参考连接,调试其实很简单,先下载插件源码,很多插件使用mvn管理的,这个插件也是。所以制作前先配置好mvn,这里使用的是IDEA说明。
    配置前建议先关闭项目,这样确保配置是全局的,方便其他项目

    burp验证码识别插件改造

     

    IDEA其实有内置的MVN插件可以直接用,
    maven home directory: 因为我本地安装了,所以mvn home就设置本地的了
    user settings file: 建议也修改,默认是C盘;还有设置里有设置远端镜像仓库地址,默认使用官方的仓库地址,访问下载包很慢,需要改成国内地址,我改成了阿里云的地址。
    local repository: 本地的仓库地址,用来存放下载的项目依赖jar包等,也别放C盘,记得点override。

    burp验证码识别插件改造

    settings.xml的配置推荐,本地仓库地址也要改一下。

    以上配置好后,就可以打开项目,更新下载项目的依赖包等。IDEA右侧有maven操作界面,第一次需要点击左上角的刷新按钮,重新导入所有依赖包,会根据pom.xml文件下载依赖包。然后按顺序双击clean(清除输出目录)/compile(编译)/package(打包),这样就生成了一个可直接导入burp的插件jar包了。

    burp验证码识别插件改造

    我在编译的时候遇到报错,是sun.misc.BASE64Encoder包不存在,查了下原来jdk9以后,已经移除这个包,我使用的是jdk13的环境编译的(burpsuite新版本仅支持jdk9-13运行,并且13可以使用tls1.3),所以报错了,这也是之前我为啥测试失败的原因,并且官方在jdk8以后,内置了一个官方库java.util.Base64用于base64编码,所以将部分代码调整下就ok了。

    burp验证码识别插件改造

    burp验证码识别插件改造

    调整完后编译打包,就能用了。

    接下来就是要配置调试参数了。
    IDEA debug配置添加一个remote,其他参数用默认的即可,需要注意的是第二个红框里的参数是需要在burp运行时额外添加的参数,这样运行burpsuite就会监听5005端口,从而让IDEA可以连接上burp进行调试工作。

    burp验证码识别插件改造

    还有一点是,启动参数根据jdk版本可能会有所不同,我burp启动用的是jdk13,所以选择第一个。

    burp验证码识别插件改造

    如下运行burpsuite即可

    burp验证码识别插件改造

    然后在扩展选项导入插件。

    burp验证码识别插件改造

    其实burp运行起来的时候,就可以在IDEA里下断点调试了,在IDEA里点击debug

    burp验证码识别插件改造

    连接上burp

    burp验证码识别插件改造

    我随便在识别按钮的处理线程里下个断点即可。

    burp验证码识别插件改造

     

    0x02 插件使用配置

    先讲解下插件的配置方法,了解插件的逻辑,方便后续调试的时候理解

    我们需要填写验证码请求接口和验证码识别接口,通过代理模块抓取验证码获取的请求包,然后右键菜单里有个captcha-killer,可以看到发送到两个位置,第一个就是验证码获取框,第二个验证码识别框

    burp验证码识别插件改造

    点击获取正常后可以看到验证码内容。

    burp验证码识别插件改造

    接下来接口部分填写,这里还需要添加一个验证码的标签,右键菜单可直接添加,这个标签是用于替换成之前获取到的验证码图片数据,我调用的识别接口是直接发送二进制图片,所以选择"验证码图片二进制内容标签",然后点击"识别"

    burp验证码识别插件改造

     

    识别后会将真正发送的请求放在"Requst raw"标签页里,方便查看。

    burp验证码识别插件改造

     

    右侧有个匹配方式,用于返回结果的过滤,准确获取验证码识别结果位置,我这无需过滤则没选。

    burp验证码识别插件改造

    这里还可以将识别接口保存为模板,方便下次直接填写,也有几个内置的模板。

    burp验证码识别插件改造

     

    0x03 修复bug

    上述base64问题解决后,识别模块可以正常发包了,但是返回的验证码识别结果为空,我抓了包看了下,左侧是识别正常的,右侧是识别不正常的,可以看到BMP图片的标识符都变了,那就是代码里的编码转换有问题,因为是直接发送二进制文件,猜测是字节数组和字符串转换有问题。

    burp验证码识别插件改造

    在做图片处理的时候,会将图片用base64保存,发送请求的时候才会base64解码,但在LabelParser.java的parseAllLabe方法里,在将base64解码后的字节数组转换成字符串的时候,没设置字符编码,如果没设定则是使用系统默认编码,而图片本身是二进制文件,无直接字符串(如中文等字符串)对应关系,所以通过这种转换会导致图片二进制内容被修改

    这里需要调整成iso-8859-1编码,这个是单字节编码,不影响图片原始内容。然后将reqTpl标签内容用图片二进制内容替换。

    burp验证码识别插件改造

    最后在将整个数据包字符串用iso-8859-1编码成字节数组发送即可保证数据无篡改。

    burp验证码识别插件改造

     

    最终效果如下,英数识别来识别一些简单验证码还是可以的,这个目标站点测下来没啥问题。

    burp验证码识别插件改造

     

    0x04 实战

    在之前配置测试完毕的基础上,用户登录请求包发送到intruder里,选中password和validatecode(验证码),attack type选择pitchfork

    burp验证码识别插件改造

     

    第一个payload选择正常密码字典即可,第二payload选择扩展模块生成。

    burp验证码识别插件改造

    对比验证码识别模块的log来看,可检验识别是否准确无误,当然我建议intruder使用单线程,多线程很容易导致目标验证码失效的问题,这个大家测试验证码绕过的时候应该很有心得的。

    burp验证码识别插件改造

    0x05 参考

    burp插件制作讲解 https://xz.aliyun.com/t/7065
    jdk1.8后的base64类 https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Base64.Encoder.html
    captcha killer使用案例: http://gv7.me/articles/2019/burp-captcha-killer-usage/


    Security , 版权所有丨如未注明 , 均为原创丨
    转载请注明原文链接:burp验证码识别插件改造
    喜欢 (4)