freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记一次实战绕过计算型验证码
2024-05-21 11:13:03

阅读须知

本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。

场景介绍

本文场景为某违法网站的后台页面(已授权),通过 HTTP模糊测试工具和第三方 API 调用演示如何绕过加法的验证码识别,方便进行后台的弱口令爆破。

流程

首先访问该网站,进入登录界面发现是一个仿造的登录后台,该页面由用户名,密码和一个加法型的验证码组成。

工具下载:TangGo测试平台

数据分析

抓取数据

打开 HTTP抓包测试工具,打开右上角内置浏览器,在浏览器中访问网站,加载后是一个登录界面:

1716260231_664c0d870d1fcc915a54a.png!small

(登录页面)

回到 HTTP抓包测试工具中,点击左上角打开拦截开关,点击浏览器中的验证码图片刷新验证码,查看是否能抓取到验证码的请求包,发现 HTTP抓包测试工具会抓取到对应的请求包数据:

1716260293_664c0dc5eb9e09a5e76e8.png!small?1716260294723

(验证码请求包)

该数据是一个请求验证码的请求数据包,为了方便后续使用和数据的保存,把数据包发送到“重放模块”,且暂时把该数据包称之为“验证码请求数据包”。

发送到数据重放模块中,发送到 HTTP 重放模块后,点击发送按钮,可以看到右侧返回数据是一个图片,点击“页面浏览”可以看到具体的图片:

1716260366_664c0e0eb826a249a881f.png!small?1716260367657

(验证码图片)

对于这些类型的验证码,社区版的模糊测试工具自带的识别引擎无法做到,但是我们可以调用第三方平台的API来实现。具体解决方法如下:

某些第三方平台提供了各类验证码识别的API接口,可以将验证码相关数据提交到第三方API接口进行识别。接下来我们用网上找到的某验证码识别平台的API进行演示,讲解如何通过自定义流程调用第三方API接口,使用第三方API接口帮忙识别验证码,得到计算型验证码的值。

API(Application Programming Interface,应用程序编程接口)接口是一种定义了软件应用程序之间如何进行通信和交互的协议和工具集合。API接口通常用于不同软件组件、服务或系统之间的集成和互操作,允许它们共享数据和功能,从而实现更大的应用或系统。

API 接口可以分为多种类型,详情请自行搜索学习,本文中使用的 API 接口为Web API。

Web API:基于Web技术(如HTTP/HTTPS)的API,通过HTTP请求和响应进行通信,常用于Web应用程序之间或客户端与服务器之间的交互。

1716260420_664c0e44d68ba02ae1300.png!small?1716260423943

(API 接口官方配置图)

请在 username 后填入你注册的账号请在 password 中填入你账号的密码

请在 typeid 中填入数字选择对应的模式

请在 image 中填入 base64 编码后的图片

识别准确率:

1716260502_664c0e960c8d92d573287.png!small?1716260502690

(识别准确率)

关闭 HTTP抓包测试工具中的拦截开关,放行掉之前抓取的验证码请求数据包。接下来抓取登录数据包,重新打开拦截开关,回到浏览器中,填写任意用户名(admin)、密码和验证码后点击登录:

1716260529_664c0eb136670bd7c1e4e.png!small?1716260529798

(网站后台)

发现HTTP抓包测试工具中成功抓取到对应的登录数据,接下来使用模糊测试工具进行弱口令爆破。

1716260552_664c0ec86577e083e3592.png!small

(抓取数据)

参数设置

把抓取到的数据发送到 HTTP模糊测试工具中,等待 HTTP模糊测试工具自动打开并且自动跳转到工具中:

1716260642_664c0f2229e7d36cd9976.gif!small?1716260643142

步骤 1- 设置请求参数

对需要测试的数据进行标记,这里标记的是账号“admin”和密码“123456”:

1716260661_664c0f35a5669367ac0a0.png!small?1716260663106

(标记爆破参数)

步骤 2-设置变体参数

1.重放模式

1716260758_664c0f964131b2a41331d.png!small?1716260759449

(模式设置)

此处选择多字典交叉爆破模式,对字典中的账号和密码进行交叉爆破。

2.变体赋值

分别对变体 1 和变体 2 导入需要的字典:

1716260765_664c0f9ded95cd41f2aea.png!small?1716260766917

(字典导入)

如果导入错误的数据可以点击最右侧“×”的来清楚数据然后重新导入。

自定义流程

为了计算数字型验证码的值,我们采用了自定义的流程。在发送请求之前,通过调用 API 接口计算出相应的值,整个过程分为 4 个步骤完成。接下来,我们将逐步介绍每个步骤的流程。

步骤 1:

点击自定义流程,在发包前流程中点击新建-->发送 HTTP 请求:

1716260778_664c0faaef6ae1e0098e3.png!small?1716260779477

(新建请求)

回到 HTTP 抓包测试工具中,打开重放模块,找到之前称之为“验证码请求数据包”的数据包,把该数据包内容复制到请求数据包块中。因为是 HTTPS 请求,所以请勾选 HTTPS 开关,否则会出现发送数据失败的情况,绑定结果变量名字为“YZM_Respons”,绑定完成之后该变量会变成全局变量,你可以在工具中的任何地方调用。

1716260813_664c0fcd50593868ef74f.png!small?1716260816516

(填入数据和绑定变量)

步骤 2:

因为官方的 API 接口明确需求,图片要转换成 base64的格式,所以再次点击右上角新建流程,选择“对数据进行处理”,操作的变量为步骤 1 中设置的变量“YZM_Respons”,对象的属性为“HTTP 响应 Body”,结果绑定变量名字为“PNG_base64”。

1716260820_664c0fd484445d6cc2580.png!small?1716260821589

(操作流程设置)

新建处理规则,点击右下角新建按钮:

1716260844_664c0fece72707dfa6eaf.png!small?1716260845521

(新建规则)

在新建的弹窗中选择 BASE64 编码和 URL 编码。

1716260851_664c0ff3ea84cf8d8cc89.png!small?1716260852493

(设置 base64 编码)

再次新建选择 URL 编码:

1716260858_664c0ffa27db25fa2597d.png!small?1716260858788

(设置 URL 编码)

base64 编码后再进行URL编码是为了防止base64编码后出现的+号字符被接口当作空格处理了。如果某些接口在 base64 编码后验证码识别仍然失败,很可能是因为该原因所致,所以我们对进行 base64编码后的数据再做一次URL编码,即可解决该问题。

对变量“PNG_base64”的BASE64 编码和 URL 编码设置完成。

1716260864_664c10001793f13eca28a.png!small?1716260864738

(设置完成)

步骤 3:

发包前流程中点击新建-->发送 HTTP 请求:

1716260888_664c10188258dc15966aa.png!small?1716260889682

(新建流程)

在弹出的页面中,填入官方 API 指定的接口请求包,其中“image”中填写变量为步骤 2中处理的变量“PNG_base64”,结果绑定变量名字为“YZM”上。因为我们只需要返回数据中的图片计算后的值,所以这里使用正则表达式提取对应的值。

1716260916_664c103441ad59ab66079.png!small?1716260916923

(绑定变量 YZM)

具体点正则表达式设置方法如下:根据 API 官方文档的返回结果可以看到,正确的结果为“result”中的内容,所以我们需要提取“result”中的内容:

1716260935_664c10475aecdc14e2c47.png!small?1716260938460


使用 TangGo 自带的正则表达式,选择需要提取的数据,打开生成器之后粘贴需要提取内容,找到需要提取的值,选择完成之后右侧会生成大量的正则匹配式。您可以从中选择任意一条正则表达式,这里我们选择倒数第五个正则匹配式,然后点击右上角的测试按钮。测试完成后,在底部的文本框中可以查看匹配的数据。确认匹配数据与需要提取的数据一致后,复制该正则表达式:

1716260941_664c104d1b80e4fc7a431.png!small?1716260942900

(选择正则表达式)

选择从响应中根据匹配正则表达式的数据,填入复制的正则表达式,绑定结果变量名字为YZM

1716260947_664c10534ca5b320e4f2d.png!small?1716260947917

(填入正则表达式)

至此自定义流程-->发包前流程设置全部结束:

1716260958_664c105e5b7e6dc28b943.png!small?1716260958921

(发包前流程设置)

回到“请求包及变体设置”,在“captch”变量后中插入步骤 3绑定的变量“YZM”:

1716260963_664c10639f277be945846.png!small?1716260966247

(插入“YZM”)

1716260969_664c1069d77ce4745b89a.png!small?1716260970792

(设置完成所有参数 )

设置好上述内容后则开始测试。

开始测试

点击“测试过程”中的“启动测试”后有许多数据,查看任意数据包:

1716260977_664c10712c7873f57ad96.png!small?1716260978077

(测试结果数据)

点击右侧自定义流程中查看对应的数据,依次查看执行顺序 1、2、3。

1716260982_664c107620305850f85b0.png!small?1716260982768

(自定义流程查看)

点击图标查看对应的流程:

1716260992_664c10808e4d124b6c134.png!small?1716260993184

查看步执行 1-->提取验证码,提取验证码结果为 29+8

1716260998_664c1086338aecb86144a.png!small?1716260999354

(验证码图片)

查看执行 2-->对数据进行 base64+url 编码。

1716261004_664c108c536d1bb5c19e1.png!small?1716261005547

(数据编码)

查看执行 3-->发送请求包+使用正则表达式提取数据,提取结果为37为成功的验证码结果。

1716261010_664c1092a2b6080e0bd5c.png!small?1716261011533

(验证码计算结果)

至此成功绕过了计算型验证码。

案例总结

本次文章中使用 TangGo 中的 HTTP模糊测试工具配合 API 接口成功绕过计算型验证码的请求。

流程图:

1716261018_664c109ae8d156d1ec4df.png!small?1716261021674


注意:工具使用内容请以最新版本为主。

# xss
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录