burp验证码爆破插件二改

admin 2022年3月20日02:41:15评论239 views字数 4695阅读15分39秒阅读模式

这不315晚会burp都上了嘛,蹭蹭时事热点。

0x01 背景

最近遇到了很多验证码登录口,验证码识别项目github上找了几个,但是不是装不上就是准确率不高的问题,后续也是慢慢修改出来了还算满意的识别验证码插件。

原插件项目地址为:https://github.com/c0ny1/captcha-killer

修改后的项目地址为:https://github.com/f0ng/captcha-killer-modified

已征得原作者同意进行二开

0x02插件二次修改

直接下载原项目的jar包,按照项目说明进行使用,发现intruder无法进行爆破,有些情况也满足不了需求,后面优化了一下,总共修改了两处地方

修改点1

发现使用过程中出现了报错burp验证码爆破插件二改后面查了一下,原因是sun.misc.BASE64Encoder类不在jdk8+支持了,因为都在用新版burp了,而新版burp启动需要高版本的jdk,这里我是jdk10启动的burp,所以没有sun.misc.BASE64Encoder

下载源码,修改java.utils.Util里的源码如下:

// FileName: Util.java
 public static String base64Encode(byte[] byteArray){
        byte[] res = Base64.getEncoder().encode(byteArray);
        String res2 = new String(res);
        res2 = res2.replace(System.lineSeparator(),"");
        return res2;
    }

    public static String base64Encode(String str){
        byte[] b = new byte[]{};
        try {
            b = str.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        byte[] res = Base64.getEncoder().encode(b);
        String res2 = new String(res);
        //去除base64结果中的换行符,java base64编码默认会76个字母换行一次
        res2 = res2.replace(System.lineSeparator(),"");
        return res2;
    }

    public static byte[] base64Decode(String str){
        byte[] byteRes = new byte[]{};
        byteRes = Base64.getDecoder().decode(str);
        return byteRes;
    }

再导入依赖

import java.util.Base64;

修改点2

这里还有个不是很完美的地方,只能识别响应包为图片的验证码,但是遇到的真实环境中,也有一种data:image这种格式的验证码,这个插件就无法识别了,如下:

burp验证码爆破插件二改

这里我也进行了一点修改,主要是响应包图片的提取,主要修改如下:在java.utils.Util包中增加函数

public static byte[] dataimgToimg(String str_img) throws IOException {
    String pattern = "(data:image.*?)["|&]|(data%2Aimage.*?)["|&]";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str_img);
    if (m.find( )) {
        str_img = m.group(0).replace(""","").replace("&","") ;
    }
    byte[] img = DatatypeConverter.parseBase64Binary(str_img.substring(str_img.indexOf(",") + 1));
    InputStream buffin = new ByteArrayInputStream(img);
    return img;
}

public static boolean isImage(String str_img) throws IOException {
        String pattern = "(data:image.*?)["|&]|(data%2Aimage.*?)["|&]";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str_img);
        if (m.find( )) {
            str_img = m.group(0).replace(""","").replace("&","") ;
        }
        byte[] img = DatatypeConverter.parseBase64Binary(str_img.substring(str_img.indexOf(",") + 1));
        boolean isImg = false;
        InputStream buffin = new ByteArrayInputStream(img);
        BufferedImage image = ImageIO.read(buffin);
        if(image == null){
            isImg = false;
        }else {
            isImg = true;
        }
        return isImg;
    }

修改后对项目进行编译:

 $ mvn package

识别的效果如下:burp验证码爆破插件二改

0x03 插件验证码识别库的选择

这里的接口大部分都需要付费,如baidu的接口每天只有300次,还有其他平台的,每天有限制次数,不利于咱们测试呀

burp验证码爆破插件二改

于是在我的不懈努力下,找到了一个开源识别验证码的项目,项目地址为:https://github.com/sml2h3/ddddocr

所需要的环境支持如下:

python <= 3.9
Windows/Linux/Macos..
暂时不支持Macbook M1(X),M1(X)用户需要自己编译onnxruntime才可以使用

0x04 实际效果

安装好ddddocr库以后直接运行代码:

# -*- coding:utf-8 -*-
# author:f0ngf0ng

import argparse
import ddddocr                       # 导入 ddddocr
from aiohttp import web

parser = argparse.ArgumentParser()
parser.add_argument("-p", help="http port",default="8888")
args = parser.parse_args()

ocr = ddddocr.DdddOcr()
port = args.p

async def handle_cb(request):
    return web.Response(text=ocr.classification(img_base64=await request.text()))

app = web.Application()
app.add_routes([
    web.post('/reg', handle_cb),
])

if __name__ == '__main__':
    web.run_app(app, port=port)
$ python3 codereg.py

运行代码界面

burp验证码爆破插件二改识别模板如下:

POST /reg HTTP/1.1
Host: 127.0.0.1:8888
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/x-www-form-urlencoded
Content-Length: 55

<@BASE64><@IMG_RAW></@IMG_RAW></@BASE64>

记得设置接口地址为:http://127.0.0.1:8888

点击识别

burp验证码爆破插件二改即可识别出来验证码,准确率还不错,在85%以上,重要的是免费,无限使用

burp验证码爆破插件二改
burp验证码爆破插件二改

关于captcha-killer的用法可以参考c0ny1师傅的文章

注:

  • intruder的cookie要和captcha-killer的cookie一致
  • intruder的线程调为1,最好加时间延迟参数

0x05 总结

  1. 最近一直在写、改一些插件,发现burp对jdk版本高低太敏感了,有些时候特定的jdk版本会造成插件之间的冲突
  2. 修改插件感觉就像是站在巨人的肩膀上,不得不说c0ny1师傅的这个插件GUI页面用起来都很舒服
  3. 学会开发很重要,可以自己进行自定义修改,不做百分百的脚本小子

0x06 附录

https://github.com/c0ny1/captcha-killer  [插件源项目]

https://gv7.me/articles/2019/burp-captcha-killer-usage/ [插件用法]

https://github.com/sml2h3/ddddocr [验证码识别项目]

https://github.com/PoJun-Lab/blaster [验证码登录爆破]

https://github.com/f0ng/captcha-killer-modified [修改后的burp验证码识别插件]


原文始发于微信公众号(only security):burp验证码爆破插件二改

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月20日02:41:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   burp验证码爆破插件二改https://cn-sec.com/archives/834241.html

发表评论

匿名网友 填写信息