拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!

大家好,这里是在总统选举中惜败的超级牛
请添加图片描述
虽然没能拿下阿美利卡总统之位
但是牛牛的热加载功能,却能轻松拿下验证码的识别与爆破
请添加图片描述
请添加图片描述
请添加图片描述
验证码一般会在注册、登录等功能,用来防止自动化工具的攻击。一般的验证码生成过程如下图所示:请添加图片描述
我们可以看到,验证码在访问功能页面的时候便已经生成,并且服务端在生成验证码的时候会将结果保存,并作为以用户输入的验证码做比较的依据。一般而言,验证码不具备复用性,在你输错验证码或者重新请求验证码接口的时候,后台便会刷新,并返回新的验证码,这大大提高了爆破的难度。请添加图片描述那么,Yakit的热加载如何进行验证码爆破呢?答案是我们需要让热加载参与到客户端请求验证码、客户端接收验证码和客户端发送验证码的生命周期中。如下图所示:请添加图片描述客户端请求验证码:在这个阶段,我们可以使用poc库发送HTTP请求,请求一份验证码。

客户端接收验证码:这个阶段,在热加载中可以将服务端返回的图片验证码转化为base64形式,方便后续进行ocr图像识别。

客户端发送验证码:将base64形式的图片数据发送到图像识别平台,或者在本地搭建的如ddddocr图像识别接口进行识别,然后将识别得到的验证码替换原始报文中验证码参数并发送。
请添加图片描述
理论形成,实践开始。
这里以pikachu靶场中验证码绕过(on server)为例。
在这里插入图片描述
我们先随便输入一些内容,并抓包查看内容。可以发现对验证码进行了识别:
在这里插入图片描述
然后我们开始编写热加载代码。从热加载参与验证码爆破的声明周期可以知道,我们只要在发送数据包之前做处理就可以,即我们热加载代码写在beforeRequest函数内就行。请添加图片描述
首先通过查看验证码链接,知道验证码请求的接口为/pikachu/inc/showvcode.php,因此可以调用该接口得到验证码图像数据,并使用codec将其转化为base64的形式:

rsp, _ := poc.Get(`http://127.0.0.1/pikachu/inc/showvcode.php`)~
imageData = rsp.GetBody()
base64Image := codec.EncodeBase64(imageData)

请添加图片描述
这里使用验证码识别平台进行识别验证码,将api的token及图像数据作为POST的参数进行发送。api返回的是json格式的数据,这里使用json库获取识别到的信息。并将请求包的__verify__替换为验证码。__verify__为占位符,以方便对参数进行替换。

apiURL = "http://api.example.com/api/ocr"   #验证码识别api
token = "xxxxxxx"  #toeknrsp,_=poc.Post(apiURL, poc.appendPostParam("image", base64Image),poc.appendPostParam("token",token))~
result:=json.loads(rsp.GetBody())
code=json.Find(result, `$.data.data`)
req = re.ReplaceAll(req, `__verify__`, code)  

完整的热加载代码如下:

// beforeRequest 允许发送数据包前再做一次处理,定义为 func(origin []byte) []byte
beforeRequest = func(req) {rsp, _ := poc.Get(`http://127.0.0.1/pikachu/inc/showvcode.php`)~imageData = rsp.GetBody()base64Image := codec.EncodeBase64(imageData)apiURL = "http://api.example.com/api/ocr"   #验证码识别apitoken = "xxxxxxx"  #toeknrsp,_=poc.Post(apiURL, poc.appendPostParam("image", base64Image),poc.appendPostParam("token",token))~result:=json.loads(rsp.GetBody())code=json.Find(result, `$.data.data`)req = re.ReplaceAll(req, `__verify__`, code)return []byte(req)
}  

请求包可以修改成如下,验证码参数使用__verify__作为占位符。然后账号和密码可以设置上自己的字典,并将并发线程设置为1,这样就能够爆破啦。
在这里插入图片描述
最后可以看到验证码成功被识别出来
在这里插入图片描述
请添加图片描述
我们在社群接到小伙伴反馈说,所有设置都按照教程设置了,为什么验证码很多都没识别出来呢?这是这位小伙伴的热加载代码:
在这里插入图片描述
在这里插入图片描述
我们发现它在handle2使用了热加载,但是由于fuzztag会预先进行渲染,渲染的时候会发送一次验证码API,导致验证码刷新,从而使得后续识别到的验证码与session绑定的验证码不一致。

因此,在我们明确了热加载在验证码识别的生命周期,也就明白了为什么要写在beforeRequest里啦。在这里插入图片描述
热加载用来验证码识别或者csrf token的思路其实是一样的,只不过多了个ocr的步骤。本文使用的字母与数字组合验证码,但是只要明确热加载参与的生命周期,识别其它验证码思路也是一致的。

END
YAK官方资源

Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
https://github.com/yaklang/yaklang
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11816.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

闯关leetcode——202. Happy Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/happy-number/description/ 内容 Write an algorithm to determine if a number n is happy. A happy number is a number defined by the following process: Starting with any positive inte…

如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息

目录 前言一、什么是Web Scraper API二、Web Scraper API 的优势:三、Web Scraper API 适用场景四、实践案例目标需求视频讲解1、选择Web Scraper API2、登录注册3、进入用户控制面板4、选择API5、触发数据收集 API6、获取爬虫结果7、分析爬虫结果(1&…

json转excel,读取json文件写入到excel中【rust语言】

一、rust代码 将json文件写入到 excel中。(保持json :key原始顺序) use indexmap::IndexMap; use serde::Deserialize; use serde_json::{Value, from_str}; use std::error::Error; use std::io::{self, Write}; use std::path::{Path}; u…

2024年下半年系统规划与管理师论文真题

试题一、论IT服务规划设计 IT服务规划设计处于整个IT服务生命周期中的前端,可以帮助IT服务供方了解客户的需求并对其进行全面的需求分析,规划设计的范围不仅包括新的服务,还包括服务连续性保障服务水平的满足和对标准、规则的遵从&#xff0…

无人机动力测试台如何快速外接第三方传感器

前言 动力测试台对于测试动力系统的拉力、扭矩、RPM 和效率至关重要。将传感器集成到您的测试中增加了另一层优化,可以将您的性能提升到一个新的水平。 在无人驾驶行业中,有充分的证据表明,从外部传感器收集数据可能具有挑战性。为了解决这…

金蝶云星空与旺店通数据集成解决方案实例

金蝶云星空与旺店通旗舰奇门的数据集成案例分享 在企业日常运营中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例:如何将金蝶云星空中的直接调拨单数据无缝集成到旺店通旗舰奇门平台。 本次集成方案命名…

gorm使用注意事项

1. 使用updates更新字段为0或""时 在updates更新时,会默认将数值为0、字符串为""等忽略掉,不会更新;比如 db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false, Games: 0, Friend: &qu…

docker compose - 设置名字

只使用 docker compose up 启动容器,默认名字为当前文件夹的名字 设置 project-name,docker 客户端会显示设置的名字,方便区分 docker compose --project-name webtest up错误: docker compose up --project-name webtest 效果…

破解反向代购复杂挑战,一站式简化逆向海淘购物

在全球化日益加深的今天,反向代购行业迎来了前所未有的发展机遇,同时也伴随着一系列挑战。这些企业不仅需要穿梭于世界各地的商场与网店,搜罗各式各样的商品,还要应对商品众多、客户下单繁杂以及客户细分需求多样化的现实问题。想…

户型超赞!招商“超级大城”再腾飞!三期新品全面升级!即将首开!

2024年9月底,美联储降息带来整体政策方向全面转变楼市组合大招密集落地,力度非同寻常。先是降息、降准、降存量房贷利率等货币宽松政策,到国家首提“止跌回稳”再到上海、深圳等一线城市连夜出台限购优化政策。在利好扶持重磅加码&#xff0c…

Web3 游戏周报(11.03 - 11.09)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【11.03 - 11.09】Web3 游戏行业动态: Ton Accelerator 推出名为「Synergy」的 500 万美元计划,旨在推动跨链创新,创造 TON 用户与 EVM 网络适应…

Kafka面试题解答(一)

1.kafka消息发送的流程? 生产者: 在消息发送的过程中涉及到了两个线程:main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator(默认32m)。main线程将消息发送到RecordAccumulator,sender线程不断地…

从规划到执行:高效项目进度管理流程与技巧

项目进度管理是项目管理的一个重要组成部分,包括规划、组织和管理活动和资源,确保项目按时完成。 该流程首先明确定义实现项目目标所需的所有任务和活动,并将它们细分为更小、更易管理的项目模块,以便于全面规划和执行。项目进度…

【故障分析】屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)

此屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)。这通常是由于逻辑卷管理器(LVM)配置出现问题,或是 /etc/fstab 文件中的问题引起的。 以下是一些排查此问题的步骤: 检查 LVM 分区: 运行命令 ls /dev/mapper/ 查看是否存在 LVM 卷。 如果不存在,可能是 LVM …

位运算_常见位运算总结

目录 1.基础位运算 2.给一个数n,确定它的二进制中第X位是0还是1 3.给一个数n,把它二进制中第X位是改为1 4.给一个数n,把它二进制中第X位是改为0 5.提取一个数n二进制最右侧的一个1 6.去除一个数n二进制最右侧的一个1 7.异或运算 1.基础…

SuperMap GIS基础产品FAQ集锦(20241111)

一、SuperMap iDesktopX 问题1:请问一下,桌面端想要导入TXT和EXCEL格式的坐标文件,有没有相应的模板参考? 11.2.0 【解决办法】用户可以通过 Excel 工具将*.xlsx,.xls,.xml等格式的属性数据转化成 .csv 格式数据,进而实现将纯属…

介绍一款支持折线法、保护角法和滚球法的避雷针插件

基于目前的研究和开发成果,我们实现了一款CAD插件,来实现避雷区域的绘制功能,我来详细介绍一下操作步骤,如果有需要可以私聊我。 界面 单击菜单栏 HL防雷计算>折线法,可加载上图工具栏。 按钮含义: 按钮…

FreeRTOS task 源码解析

目录 一、基本结构和变量1、TCB_t2、状态链表2.1 pxCurrentTCB2.2 pxReadyTasksLists2.3 pxDelayedTaskList2.4 xSuspendedTaskList 3、任务调度器相关3.1 xSchedulerRunning3.2 uxSchedulerSuspended3.3 xPendedTicks3.4 xPendingReadyList 4、任务删除相关4.1 xTasksWaitingT…

面试击穿mysql

Mysql三大范式: 第一范式(1NF): 不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如,在商品表中,若将商品名称、价格和类型都存储在同一个字段中,会带来诸多弊端。首先,在…

日常bug记录,easyexcel导入报错convert data ... to class java.math.BigDecimal error

排查发现实体类中有BigDecimal属性,然而数据中这个属性为null,进行转换时报错 解决方法:自定义转换器类 在实体类上加上自定义转换器