bp验证码爆破插件二改

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

0x01 背景

最近遇到了很多验证码登录口,验证码识别项目github上找了几个,但是不是装不上就是准确率不高的问题,后续也是慢慢修改出来了还算满意的识别验证码插件。
原插件项目地址为:
https://github.com/c0ny1/captcha-killer

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

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

0x02插件二次修改

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

修改点1

发现使用过程中出现了报错

bp验证码爆破插件二改_第1张图片

后面查了一下,原因是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这种格式的验证码,这个插件就无法识别了,如下:

0x04 实际效果

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

# -*- 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

运行代码界面

bp验证码爆破插件二改_第2张图片

识别模板如下:

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>

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

点击识别
bp验证码爆破插件二改_第3张图片

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

bp验证码爆破插件二改_第4张图片

bp验证码爆破插件二改_第5张图片

关于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验证码识别插件]

你可能感兴趣的:(网络安全,burp,网络安全)