本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。
本文场景为某违法网站的后台页面,通过 HTTP模糊测试工具和第三方 API 调用演示如何绕过加法的验证码识别,方便进行后台的弱口令爆破。
首先访问该网站,进入登录界面发现是一个仿造的登录后台,该页面由用户名,密码和一个加法型的验证码组成。
抓取数据
打开 HTTP抓包测试工具,打开右上角内置浏览器,在浏览器中访问网站,加载后是一个登录界面:
登录页面
回到 HTTP抓包测试工具中,点击左上角打开,点击浏览器中的验证码图片刷新验证码,查看是否能抓取到验证码的请求包,发现 HTTP抓包测试工具会抓取到对应的请求包数据:
验证码请求包
该数据是一个请求验证码的请求数据包,为了方便后续使用和数据的保存,把数据包发送到“重放模块”,且暂时把该数据包称之为“验证码请求数据包”。
发送到数据重放(也可单击右键发送),发送到 HTTP 重放模块后,点击发送按钮,可以看到右侧返回数据是一个图片,点击“页面浏览”可以看到具体的图片:
验证码图片
对于这种类型的验证码,其中难点就是如何计算验证码的值,解决方法如下:
使用其他平台的 API 接口,可以自行寻找,这里演示使用第三方平台,官网有对应的 API 配置接口:
API(Application Programming Interface,应用程序编程接口)接口是一种定义了软件应用程序之间如何进行通信和交互的协议和工具集合。API接口通常用于不同软件组件、服务或系统之间的集成和互操作,允许它们共享数据和功能,从而实现更大的应用或系统。
API 接口可以分为多种类型,详情请自行搜索学习,本文中使用的 API 接口为Web API。
Web API:基于Web技术(如HTTP/HTTPS)的API,通过HTTP请求和响应进行通信,常用于Web应用程序之间或客户端与服务器之间的交互。
API 接口官方配置图
请在 username 后填入你注册的账号
请在 password 中填入你账号的密码
请在 typeid 中填入数字选择对应的模式
请在 image 中填入 base64 编码后的图片
识别准确率:
识别准确率
关闭 HTTP抓包测试工具中的拦截开关,放行掉之前抓取的验证码请求数据包。接下来抓取登录数据包,重新打开拦截开关,回到浏览器中,填写任意用户名(admin)、密码和验证码后点击登录:
网站后台
发现HTTP抓包测试工具中成功抓取到对应的登录数据,接下来使用模糊测试工具进行弱口令爆破。
抓取数据
参数设置
把抓取到的数据发送到 HTTP模糊测试工具中,等待 HTTP模糊测试工具自动打开并且自动跳转到工具中:
步骤 1- 设置请求参数
对需要测试的数据进行标记,这里标记的是账号“admin”和密码“123456”:
标记爆破参数
步骤 2-设置变体参数
模式设置
此处选择多字典交叉爆破模式,对字典中的账号和密码进行交叉爆破。
分别对变体 1 和变体 2 导入需要的字典:
字典导入
如果导入错误的数据可以点击最右侧的来清楚数据然后重新导入。
步骤 2-设置变体参数
为了计算数字型验证码的值,我们采用了自定义的流程。在发送请求之前,通过调用 API 接口计算出相应的值,整个过程分为 4 个步骤完成。接下来,我们将逐步介绍每个步骤的流程。
点击自定义流程,在发包前流程中点击新建–>发送 HTTP 请求:
新建请求
回到 HTTP 抓包测试工具中,打开重放模块,找到之前称之为“验证码请求数据包”的数据包,把该数据包内容复制到请求数据包块中。因为是 HTTPS 请求,所以请勾选 HTTPS 开关)否则会出现发送数据失败的情况,绑定结果变量名字为“YZM_Respons”,绑定完成之后该变量会变成全局变量,你可以在工具中的任何地方调用。
填入数据和绑定变量
因为官方的 API 接口明确需求,图片要转换成 base64 的格式,所以再次点击右上角新建流程,选择“对数据进行处理”,操作的变量为步骤 1 中设置的变量“YZM_Respons”,对象的属性为“HTTP 响应 Body”,结果绑定变量名字为“PNG_base64”。
操作流程设置
新建处理规则,点击右下角新建按钮:
新建规则
在新建的弹窗中选择 BASE64 编码和 URL 编码(确保发送数据能够正确被解析)。
设置 base64 编码
再次新建选择 URL 编码:
设置 URL 编码
base64 编码后再进行URL编码是为了防止base64编码后出现的+号字符被接口当作空格处理了。如果某些接口在 base64 编码后验证码识别仍然失败,很可能是因为该原因所致,所以我们对进行 base64编码后的数据再做一次URL编码,即可解决该问题。
对变量“PNG_base64”的BASE64 编码和 URL 编码设置完成。
设置完成
在发包前流程中点击新建–>发送 HTTP 请求:
新建流程
在弹出的页面中,填入官方 API 指定的接口请求包,其中“image”中填写变量为步骤 2 中处理的变量“PNG_base64”,结果绑定变量名字为“YZM”上。因为我们只需要返回数据中的图片计算后的值,所以这里使用正则表达式提取对应的值。
绑定变量 YZM
具体点正则表达式设置方法如下:根据 API 官方文档的返回结果可以看到,正确的结果为“result”中的内容,所以我们需要提取“result”中的内容:
使用 TangGo 自带的正则表达式,选择需要提取的数据,打开生成器之后粘贴需要提取内容,找到需要提取的值,选择完成之后右侧会生成大量的正则匹配式。您可以从中选择任意一条正则表达式,这里我们选择倒数第五个正则匹配式,然后点击右上角的测试按钮。测试完成后,在底部的文本框中可以查看匹配的数据。确认匹配数据与需要提取的数据一致后,复制该正则表达式:
选择正则表达式
选择从响应中根据匹配正则表达式的数据,填入复制的正则表达式,绑定结果变量名字为 YZM。
填入正则表达式
至此自定义流程–>发包前流程设置全部结束:
发包前流程设置
回到“请求包及变体设置”,在“captch”变量后中插入步骤 3 绑定的变量“YZM”:
插入“YZM”
设置完成所有参数
设置好上述内容后则开始测试。
开始测试
点击“测试过程”中的“启动测试”后有许多数据,查看任意数据包:
测试结果数据
点击右侧自定义流程中查看对应的数据,依次查看执行顺序 1、2、3。
自定义流程查看
点击图标查看对应的流程:
查看步执行 1–>提取验证码,提取验证码结果为 “29+8” 。
验证码图片
查看执行 2–>对数据进行 base64+url 编码。
数据编码
查看执行 3–>发送请求包+使用正则表达式提取数据,提取结果为“37”。为成功的验证码结果。
验证码计算结果
至此成功绕过了计算型验证码。
本次文章中使用 TangGo 中的 HTTP模糊测试工具配合 API 接口成功绕过计算型验证码的请求。
流程图:
注意:工具使用内容请以最新版本为主。
下载和反馈
TangGo社区版本下载:
· https://tanggo.nosugar.tech/
反馈问题:
· https://tanggo.nosugar.tech/#/feedback
· 通过微信交流群反馈:关注【无糖反网络犯罪研究中心】公众号,回复“TangGo”,加入交流群进行反馈。
原文始发于微信公众号(无糖反网络犯罪研究中心):TangGo测试平台 | 实战案例-绕过计算型验证码