某网站验证码绕过详解
2023-11-16 00:1:9 Author: Web安全工具库(查看原文) 阅读量:8 收藏

===================================

免责声明
请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。

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

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

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

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

import requestsimport re#通过该地址获取验证码图片的地址url = 'https://XXXXX.com/authcode/slidecode'  # 替换为你要请求的URLheaders = {'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 = 0y = 0for i in 图片列表: if x == 260: # 从左贴到右了 x = 0 y += 25 新建图片.paste(i, (x, y)) x += 13新建图片.save("456.png")
关注公众号追梦前后台回复送书666,获取送书码

· 今 日 推 荐 ·

全书分为4篇,共24章,内容包括初识JavaScript、JavaScript基础、流程控制语句、函数、对象、数组与集合、String对象、正则表达式、异常处理与程序调试、JavaScript高级编程、事件处理、Document对象、文档对象模型、Window对象、浏览器对象模型、Style对象、Form对象、图像处理、JavaScript中的XML、JSON、JavaScript的安全、Ajax技术、Vue.js编程,以及星光电影网项目实战。


文章来源: http://mp.weixin.qq.com/s?__biz=MzI4MDQ5MjY1Mg==&mid=2247511729&idx=1&sn=a689ac72a37e1d70073816a6a9c7dc11&chksm=ebb541b2dcc2c8a4a02e6266a11f3b7348c2adbdfeff6a102cc9374ce50791a0de5dcfcb7215&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh