cloudflare 5s盾分析

文章详细分析了Cloudflare5s盾的验证过程,包括初始化页面、POST请求、normalHTML页面请求、环境校验以及获取cf_clearance的步骤。过程中涉及加密、解密以及特定环境变量的校验。成功通过验证后可获取cf_clearancecookie以访问网站。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

前言

工作中遇到了有这个的网站 所以来搞一下

欢迎关注我的公众号
在这里插入图片描述

分析请求

先看看整体的流程

在这里插入图片描述

拿到最后的 cf_clearance cookie 就是验证通过了

第一步 初始化页面

在这里插入图片描述

页面内容 需要获取 _cf_chl_opt 这个中的部分值
和 md 在最后一步post 请求中会用到md
_cf_chl_opt.cRay 拼接 要请求的JS 地址

self._js_1_url = f'***/cdn-cgi/challenge-platform/h/{cFPWv}/orchestrate/managed/v1?ray={cRay}'

大部分都是这个格式

第二步

第一步的 JS 会发生一个 post 请求
地址为

platform/h/g/flow/ov1/733297980:1688606447:HQv3MvVys5gnB9nrg2GMxuQz8eKvxSMvzd6FTHs5B0E/7e245d2bee981840/5efdbf7ebbe3f50
https://***/cdn-cgi/challenge-platform/h/g/flow/ov1/{js中的某个值}/cRay/{cHash}

发送数据为

{
	"chReq": "managed",
	"cNounce": "40056",
	"cvId": "2",
	"chC": 0,
	"chCAS": 0,
	"oV": 1,
	"cRq": {
		"ru": "aHR0cHM6Ly93d3cuYWxsZWdpYW50YWlyLmNvbS8=",
		"ra": "TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNC4wLjAuMCBTYWZhcmkvNTM3LjM2",
		"rm": "R0VU",
		"d": "KFSDJOFVmoj82BwR/FXAvmyHO7c0OIEUpTl6E7f8AtMMuXL+tcWhwUaEEI98z3C93JqXNA1QR+jWncGHtDEbC2d2g8m1nXikiEBO3waPXKbD+H1nSP/j6FYAqwl3gt7VP82rQuCrT/jbrLTmmcB/7QqpEVkVjLblzG3ZU91rJlT5Z7t9qS8mkh8TqpRS2589EJnLP52yxugQ8Uypom6B2WevozesJ0HHfqFwKj/n2rGekZMqaztprT09EDkog+C+d+sVTTe1JKfEgMFiLUDh4q2+kNFj2sGdGwnHmDFXFOHSmE0pV4+R115loViUuKy6Is3xk3uHM5r0r74KLXgCLcIiW2thrlFLCSe6EjLKV5hL0KKTygnMEyjvSVbNRriyzL747LwIH1HvpUx2+5BZxrIsZW6ehoBbalCipgy8qtdOTNGD2J9IsLdO0vApORMAoAX3ag8nwYE1XNnwWMPreAaPqLSmV9FG9ScOJcsc3eQW6lE30I515+QGfKodTrrXr2wv9vKcAJ/7bkNkq8aETDdWPFsMDwri0h522yC0dUIBiqU3G0K3rajfotir2yH3BHj9RVQg+Fu9nRyyXfgsbN8PPofxWwVRMqLiclJZszxhIkt/g1g237Sv6O1jmam3",
		"t": "MTY4ODYxMTM3NC44MDAwMDA=",
		"cT": 1688611374,
		"m": "kw/e2dwgtrWr9v84KaUNpllMVkA+9E5Bs7IfWyHDsWs=",
		"i1": "gZG6zyNbCiGlwncYw4DBaA==",
		"i2": "vbHMdj8uMdxJnpRkQs9y4g==",
		"zh": "Y3OoAsWGs8ShmcO7iHaBto+gGoelE8ZB/pf+9RpLrwo=",
		"uh": "xR8CtO7r16zI2pMrrz9IVIrV+K1oemYOymcQjo5KlbY=",
		"hh": "T0wGGEaOTl1FXca+/ZzlgBao5CR/fBMfjzoqcDV4/cw="
	},
	"ie": {
		"kd": 0,
		"pm": 0,
		"po": 0,
		"ts": 0,
		"mm": 0,
		"cl": 0,
		"t": 0
	},
	"wPr": {},
	"if": false,
	"ffs": false
}

都是第一步提取的
加密后 再发出去
在这里插入图片描述

name = v_{cRay}
因为返回的数据 需要用 cRay 解密
每次post 数据格式都这样 就不过多说明了

第三步 normal

需要请求一个 后缀为normal 的html 页面

https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/turnstile/if/ov2/av0/rcv0/0/h4gmc/0x4AAAAAAADnPIDROrmt1Wwj/dark/normal

h4gmc 随机五位字符
0x4AAAAAAADnPIDROrmt1Wwj 为 网站的key  固定的

在这里插入图片描述

还是需要 cray 和 chash 和部分参数
在根据 cray 请求第二次的js
要加密的数据

{
	"chReq": "chl_api_m",
	"cNounce": "28481",
	"cvId": "2",
	"chC": 0,
	"chCAS": 0,
	"oV": 1,
	"cRq": {
		"ru": "aHR0cDovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vY2RuLWNnaS9jaGFsbGVuZ2UtcGxhdGZvcm0vaC9nL3R1cm5zdGlsZS9pZi9vdjIvYXYwL3JjdjAvMC9qaHk2YS8weDRBQUFBQUFBRG5QSURST3JtdDFXd2ovZGFyay9ub3JtYWw=",
		"ra": "TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNC4wLjAuMCBTYWZhcmkvNTM3LjM2",
		"rm": "R0VU",
		"d": "iTfgNjLhgpaI0mwE+Hoyjm3sRdbCSqUZqoJQPIObCxGSElpFFhNCvf/xyPhECrj4Yo1sdMNMfnviK37oFIKrzN9+C6hHQPds4sGcrMlTGaf4cMmRFh1x9Jt1h3QGas0IVBVgqNDzBVv/s2dE3502O3CiVY2ruKe0fWPfrAl8TT7CtGUnOpK871hMeQKbbSg708DGaeDDiatz4lIgJxxFbVdcOEEAHXBGRF6s29RfMYM9pIb09K2AbaDO9ORxyrbddR7AbbcGgpXUA9Mnfz3bQvLp1P+QL4apvpC+2RPIDMucP5IgJDw4ytAW6cwfv9EHIJsrkZs69aEXuFZLqm/Bq/yEDPNrs9N0nSFERQmUwMsQ8xwkZTg+W/XMO9tK63mdkMEF9sExxw9sN2yFhkkBMOqECC/L8ZValqfKKKRhMfovcexhLi4TxBJ6eMLKF0ZSX5JI2bGOPQS1tKhLnhtYh+c5KiGPU4jA8xrQKLJVAkEJLieOpP3lIpXGXKD3nFqZAl1CgS6r+OawJxK/A88f4s3DpNGQlP4BI4QJ10P/32M=",
		"t": "MTY4ODYxMTQ0MC44NzE=",
		"m": "VS9+Gsyx7EPMX6/gVYBpyiwfLlVGmC7T38bmHs3RAhU=",
		"i1": "9k9pl1+0xD1jrTpl9UA/bw==",
		"i2": "hG8J/PtG3f4yyO74nwUikg==",
		"uh": "xR8CtO7r16zI2pMrrz9IVIrV+K1oemYOymcQjo5KlbY=",
		"hh": "WCiLdNo2uN2aXsfJJhG2HFkP3bOo0fw8tsFAppLisvs=",
		"zh": "9D+zbxCfwBPyr1pF5Wb5E9kRItcGU2xCgzO1zGTKToQ="
	},
	"ie": {
		"kd": 0,
		"pm": 0,
		"po": 0,
		"ts": 0,
		"mm": 0,
		"cl": 0,
		"t": 0
	},
	"wPr": {},
	"if": true,
	"ffs": false,
	"chlApivId": "0",
	"chlApiWidgetId": "jhy6a",
	"chlApiSitekey": "0x4AAAAAAADnPIDROrmt1Wwj",
	"chlApiAction": "managed",
	"chlApicData": "7e247f446c5b3ad6",
	"chlApiChlPageData": "3gAFo2l2MbhwV2FqUDdWcmMva2s3NXF1Zk0zVWRRPT2jaXYyuGwzcFdYcGJVSzV5Y3VIWnBWaFEvWXc9PaFk2gEsMVdTTzFCK3pkTG9JMEZ3eXRIVk9qNVFSRWZQOEd4RWRIMkcvMFdjL0c2ekt0WStBNnY0Y0dqczh2d3h5eUdUOHJzT1ltQUVtNjFDQWFQRVJvTGlxYjlpaGVUOHFXS3BBT1JSbkVlMHRxSmlwdjV0M0ZIVmJjcHJkRU5yekllbWpXaDIySjF2dWZoeFJKajVnSWtWNG5HOTBEK0dYNTArbDFZVWY2Ukdic3UwOWNHYW1TUGpTN1N1dEIvYWNlUHVzL0FqMmlxcUhKSzJlY0JJcHBybm92a2ExYXdLbkxwK0VNVy8xZkh0QlhseVA1Z3pNeks2bjliRk9Pd210ODZsZWpqUTIvdVFXRHg2aVdyMGpocjRzQzdjL3YyTFlVSFd5aDZUYnZKYU14d009oW3ZLDlyQjROb0NKOXo4Qmw0YXkzWmNZNUJiMnV0NWJmMlBmOE1OVjZZd2JZT2s9oXS0TVRZNE9EWXhNVFF6Tnk0NU1qZz0=",
	"chlApiACCH": "19b997cb",
	"chlApiUrl": "初始化地址",
	"chlApiOrigin": "初始化地址",
	"chlApiRcV": "1/fif1NcEDXIlC2ll"
}
pageData 是这步js 中的 
chlApicData 是第一步的cray 应该是要做关联的

加密后在发出 会返回 一个长字符串
在这里插入图片描述

一般长度会在 十几万到二十几万之间
解密后 有两种分支 w.startsWith(‘window._’) 根据开头字符判断
格式一 明文代码分支 这个就简单了
格式二 vmp 分支 所有代码会进入vmp 中执行
这步就是最难得步骤了 环境校验

第四步 环境校验

拿到上面的代码后
我是通过补环境的方式过的
因为 经过测试 需要校验的环境 点和 顺序是不一样的 导致无法通过还原算法的方式执行
也不排除有大神可以直接还原 反正我做不到…
在这里插入图片描述

基本上就是 十几个到二十个校验点
其中只有第一个是固定的… 其他都会变化
![[pic.png]]
值得注意的一点是 他会请求一张图片
获取图片的宽高
https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/img/7e245d3fd8b72bbd/1688609982279/SSIWaTPNMJAQEpP

如上 获取完环境数据 在和之前一样 进行加密发送
也是有两种分支

  1. 校验通过 返回的 字符串解密后长度在1000-5000内 可以获得token

  2. 长度为10000以上 是需要进行再次的点击验证
    在这里插入图片描述

     点击验证就是在上面的 十几个环境后再加一个
     然后再判断是否通过 
     解密后字符串长度在1000内就是失败了
    

第五步 获取 cf_clearance

如果环境通过 拿到token 后 需要在发送一次 获取 sh aw 三个参数
在这里插入图片描述

再向初始化页面 post 四个参数
在这里插入图片描述

就可以拿到
在这里插入图片描述

和正常的页面代码了
在这里插入图片描述

至此 验证就结束了
就可以拿着 cookie 去请求了

注意事项

目前这个网站测试的是 需要保持 ip tls ua 完全一致
破解时使用什么 再次使用时就需要用完全一样的 ip tls 指纹和 ua

环境校验时 有一个fetch 请求 和 图片请求 都需要发出
图片请求不发 百分百失败

调试时 需要注意 他对于时间的控制 很严格 页面调试时 动不动就超时失败…

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

易语言过五秒云防护源码 开始分析吧 直接提交会进入五秒防护页面 有这条cookie就不会了  cf_clearance=e87fbd2a47fa12a88e753e1eb17c62ea3f43d170-1564667178-1800-150 看看cookie从哪儿来的 提交这个url返回的cookie  https://www.cbt-coin2.com/cdn-cgi/l/chk_jschl?s=651c8e8a2b2e045e9309f00586d153fd4009fbc7-1564667174-1800-AY+ThdHTv12dh4eGsyfd0dBFGQY/SQiD/LvNLfz5P5iZgQdGxxFTjj3mcsVSsg6uCaG6wEtfR9QT6K3PIYVpGuX1134g+jJr4gWWx4aypT2irbcfmxJ5iTwfb1cW0wgSW5FsbF0c8BnWWIVFR5TcgN8=&jschl_vc=05b889c20c40123cf2726c583aa17ea2&pass=1564667178.083-1Na9bTwNvd&jschl_answer=23.7315576809 刚才没这个页面 可以看到四个参数有三个都是页面直接获取的  主要是计算jschl_answer参数   看看js吧 <input type="hidden" name="s" value="a435cf6d78a0c00a88ed5a86b46f07f72bfa1c82-1564667350-1800-ARAmHfr4jOsB+pNpP2X8VsXCkw1saBv6c8+ugZoOfMQ2EA1HuWP8YctpxnvFzEFu6FWAA8pOZ5tpPugcx7lpB1O7yo8N5gq2uDwwRAM9V6gLvjJsXoWX4dnzKFcjeh6hcG7myKJgAWnz0kE3tt9fQMY="></input> <input type="hidden" name="jschl_vc" value="edbe716597c6d800ef2f9bce55cb218b"/> <input type="hidden" name="pass" value="1564667354.805-EYaNXMZWoC"/> <input type="hidden" id="jschl-answer" name="jschl_answer"/> 主要就是这段js  直接抠下来看看 这种直接删掉就好了  t这个参数好像很重要  我们看看t是什么 t是这个链接  我们把t这个参数直接填这个就行了 没用的就直接删掉  然后关键的来了  a的值等于这个  然后js里 我们需要的jschl_answer就是a  我们直接改下 让他返回这个 这就出来了。。。也不是很难  对比一下是一样的   直接改易语言代码吧 时间问题就不重写了 主要问题是必须要延时  不然返回不正常 看把  不加延时就还是防火墙   加上延时就正常了
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值