安全矩阵

 找回密码
 立即注册
搜索
查看: 821|回复: 0

某网站验证码绕过详解

[复制链接]

179

主题

179

帖子

630

积分

高级会员

Rank: 4

积分
630
发表于 2023-11-19 19:27:54 | 显示全部楼层 |阅读模式
某网站验证码绕过详解

一、通过抓包找到验证码图片的链接



二、发现找到的图片和合展示的图片不一样,链接地址的图片是乱序,需要我们重新拼接

三、继续往上找,找到该图片链接的来源,发现在一个叫slidecode请求包的响应内容里面


四、代码实现获取图片链接地址

import requests
import re
#通过该地址获取验证码图片的地址
url = 'https://XXXXX.com/authcode/slidecode'  # 替换为你要请求的URL
headers = {'User-Agent': 'Mozilla/5.0'}  # 可选,设置请求头
response = requests.get(url, headers=headers)  # 发送GET请求
响应内容 = response.text#获取网页的响应内容
正则 = re.compile(r'url\(([^\)]+)\)')
匹配结果 = 正则.findall(响应内容)#通过正则匹配获取图片的链接
print(匹配结果[0])  # 输出响应数据
print("整理后的结果:"+'http:'+匹配结果[0].replace('"',''))

运行结果:



五、知道图片链接,将图片保存到本地

图片链接='http:'+匹配结果[0].replace('"','')
response = requests.get(图片链接, stream=True)
with open("123.png", 'wb') as f:
     f.write(response.content)

六、继续分析上面url的响应内容,发现一大堆类似坐标的东西,猜测这是每个错乱图片的正确位置



七、提取这些坐标

坐标=re.compile("class='gt_cut_fullbg_slice' style='background-position.*?)px (.*?)px",re.S|re.I)
坐标xy=坐标.findall(响应内容)
坐标xy=[[abs(int(xy[0])),abs(int(xy[1]))] for xy in 坐标xy]#将字符串改为数字
print(坐标xy)
运行结果:
[[91, 75], [234, 0], [143, 75], [130, 75], [52, 0], [39, 75], [156, 25], [26, 50], [13, 25], [208, 75], [91, 50], [26, 75], [13, 50], [65, 75], [52, 50], [78, 0], [234, 50], [117, 25], [65, 25], [65, 0], [247, 50], [143, 50], [0, 0], [169, 50], [91, 25], [247, 75], [52, 25], [247, 25], [169, 0], [26, 0], [182, 75], [117, 0], [91, 0], [143, 0], [26, 25], [156, 75], [247, 0], [39, 25], [13, 0], [65, 50], [104, 0], [130, 0], [78, 75], [0, 50], [169, 25], [78, 50], [195, 0], [156, 50], [117, 75], [0, 25], [182, 50], [221, 75], [78, 25], [182, 0], [221, 0], [104, 25], [195, 25], [208, 25], [208, 50], [208, 0], [156, 0], [195, 50], [117, 50], [104, 50], [169, 75], [221, 25], [234, 75], [195, 75], [0, 75], [234, 25], [39, 0], [130, 25], [52, 75], [182, 25], [130, 50], [13, 75], [39, 50], [104, 75], [221, 50], [143, 25]]

八、将图片切割,并按正确顺序放回到原位

打开图片 = Image.open('123.png')
# 将切片保存到列表
图片列表 = []
for p in 坐标xy:
     if p[1] == 0:  # y的坐标为0,说明在第一行
          图片列表.append(打开图片.crop((p[0], 0, p[0] + 13, 25)))
     if p[1] == 25:  # y的坐标为0,说明在第一行
          图片列表.append(打开图片.crop((p[0], 25, p[0] + 13, 50)))
     if p[1] == 50:  # y的坐标为0,说明在第一行
          图片列表.append(打开图片.crop((p[0], 50, p[0] + 13, 75)))
     if p[1] == 75:  # y的坐标为0,说明在第一行
          图片列表.append(打开图片.crop((p[0], 75, p[0] + 13, 100)))

新建图片 = Image.new("RGB", (260, 100))
x = 0
y = 0
for i in 图片列表:
     if x == 260:  # 从左贴到右了
          x = 0
          y += 25
     新建图片.paste(i, (x, y))
     x += 13
新建图片.save("456.png")





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 03:28 , Processed in 0.013372 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表