TLS指纹校验原理和绕过

TLS指纹校验原理和绕过

1.指纹校验案例

当用浏览器访问时能够正常访问,而用代码请求却得不到相应结果

1.1 案例:ascii2d

https://ascii2d.net/

请添加图片描述

请添加图片描述

1.2 案例:investing

https://cn.investing.com/equities/amazon-com-inc-historical-data

请添加图片描述

请添加图片描述

2.TLS指纹

如今几乎所有平台通信都是基于Https的协议,而无论基于什么工具去发送Https请求时,都需要基于TLS/SSL先建立两端安全的通信(握手),建立后再进行数据传输。

TLS的握手阶段,客户端会向服务端发送 Client Hello 数据包,在数据包内的JA3就是指纹信息(基于电脑的TLS版本+内置算法等计算出来的字符串),并且该值不会随着请求头修改、代理等发生变化。所以,某个网站的后台就会去读取TLS客户端的JA3指纹,如果是非正常指纹,禁止访问。例如:

  • requests请求

    requests==2.31.0
    urllib3==2.0.7
    
    [JA3 Fullstring: 771,4866-4867-4865-49196-49200-159-52393-52392-52394-49195-49199-158-49188-49192-107-49187-49191-103-49162-49172-57-49161-49171-51-157-156-61-60-53-47-255,0-11-10-16-22-23-49-13-43-45-51-21,29-23-30-25-24,0-1-2]
    
    [JA3: bc29aa426fc99c0be1b9be941869f88a]
    
    固定,所以后端API可以禁止此指纹。
    
  • 浏览器请求

    [JA3 Fullstring: 771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,11-18-27-35-16-51-10-23-5-43-65281-65037-0-17513-13-45,29-23-24,0]
    
    [JA3: 5ae2fe79293ec63d585f3f987cf69d01]
    
    谷歌浏览器的JA3会变化。
    

扩展:有些网站专门收录ja3黑名单。

https://sslbl.abuse.ch/ja3-fingerprints/
https://sslbl.abuse.ch/blacklist/sslblacklist.csv
https://github.com/salesforce/ja3/blob/master/lists/osx-nix-ja3.csv
https://ja3er.com/getAllUasJson
https://ja3er.com/getAllHashesJson

2.1 查看指纹

想要快速查看自己的TSL指纹信息:https://tls.browserleaks.com/json

请添加图片描述

import requests
res = requests.get('https://tls.browserleaks.com/json')
print(res.text)

请添加图片描述

其他网站还有:

https://tls.browserleaks.com/json
https://tls.peet.ws/
https://tls.peet.ws/api/all

2.2 Wireshark

基于Wireshark抓包并筛选出Client Hello数据包,去内部查看:

1.下载安装

下载并安装Wireshark https://www.wireshark.org/download.html

2.抓网卡

打开Wireshark,选择要抓包监测的网卡,选择你上网使用的那个网卡。

请添加图片描述

3.筛选IP

筛选目标IP ip.dst_host==104.26.5.72

请添加图片描述

请添加图片描述

4.数据包

用浏览器或用requests发送请求,就可以监测到网络请求,然后找到 Client Hello数据包,就可以看到相关指纹信息。

请添加图片描述

3.突破指纹

https://pypi.org/project/curl-cffi/#description

  • curl是一个可以发送网络请求的工具。
  • curl-impersonate是一个基于curl基础上进行开发的一个工具,可以完美的模拟主流的浏览器。
  • curl_cffi,是套壳curl-impersonate,让此工具可以更方便的应用在Python中。
pip install curl-cffi
from curl_cffi import requests

res = requests.get(
    url='https://cn.investing.com/equities/amazon-com-inc-historical-data',
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
    },
    impersonate="chrome101"
)

print(res.text)

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】数组操作 遍历、修改、新增、删除等...

目录 一、数组是什么? 二、数组操作 2.1、遍历 2.2、数组求最大值和最小值 2.3、修改 2.4、新增 追加到数组末尾 添加到数组开头 2.5、删除 一、数组是什么? 数组是一种可以按顺序保存数据的数据类型。 二、数组操作 2.1、遍历 let arr [马…

14. UE5 RPG使用曲线表格设置回复血量值

之前的文章中,我使用的都是固定的数值来设置血量回复或者蓝量回复,在这篇文章里面,介绍一下使用曲线表格。通过曲线表格我们可以设置多个数值,然后通过去通过修改索引对应的数值去修改回复的血量或者蓝量。 创建曲线表格 首先创…

【Unity】【VRTK】【VR开发】同时保持高效打包和调试的VRTK项目设置方式

【背景】 开发功能时希望能够快速调试,在Preview和开发编辑器间流畅切换。后期又希望快速打包到目标安卓平台,感受头盔内部的画面和操作效果。麻烦在于,这两者往往不是明确区分的,很可能一会儿只是想快速验证一下某些功能动作&am…

安全名词解析-攻防演练

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 攻防演练 01 攻防演练 《网络安全法》中明确提出,“定期组织关键信息基础设施的运营者进行网络安全应急演练,提高应对网络安全事件的水平和协同配合能力。”攻防演练目前已经…

机器视觉【3】非线性求解相机几何参数

线性求解相机几何参数的缺点 上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响不能引入更多的约束条件融入到DLT算法当中优化最关键的是,代数距离并不是…

OpenCV中inRange函数

在OpenCV中,inRange函数用于根据颜色范围从图像中提取特定的颜色区域。这个函数检查输入图像中的每个像素,如果像素值位于指定的范围内,则在输出图像(或掩码)中对应位置的像素被设置为白色(或者说是255&…

QT中事件过滤器

Qt添加事件过滤器,设置拖放listWidget、TreeWidget、TableWidget控件。 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this)…

Lightfm学习记录

推荐参考资料 官方文档仓库地址论文地址LightFM推荐系统框架学习笔记LightFM推荐模型库(利于入门)how-i-would-explain-building-lightfm-hybrid-recommenders-to-a-5-year-old(用处不大)协同推荐 lightfm 根据用户已读诗词推荐(可能有用)Recommendation System in Python: L…

Learn HTML in 1 hour

website address https://www.youtube.com/watch?vHD13eq_Pmp8 excerpt All right, what’s going on? everybody. It’s your Bro, hope you’re doing well, and in this video I’m going to help you started with html; so sit back, relax and enjoy the show. If y…

Vue3自定义全局指令批量注册

指令封装代码: import type { App } from "vue";const content {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };const operate {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };cons…

01_02_mysql06_视图-存储过程-函数

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格&#xff0…

助力精准可信时空智能:卫星授时安全隔离装置

随着信息化、数字化、智能化发展浪潮的不断推进,各行业对卫星导航授时信息的精准可信度需求也越来越高。面对有意/无意的导航信号欺骗干扰,一旦发生时间信息错误,将导致巨大的经济损失甚至严重的安全事故。在复杂的电磁环境下,亟需…

【Web前端笔记08】CSS盒子模型

08 CSS盒子模型 1、盒子模型 2、border(边框) 3、padding(内边距) 4、margin(外边距) 5、怪异盒子 6、弹性盒模型练习 08 CSS盒子模型 1、盒子模型 标准盒子: 内容(content…

Jenkins配置node节点

1、添加节点 2、配置node主机的java环境 注意,jdk的位置和版本要和master保持一致 sudo apt-get update sudo apt-get install openjdk-8-jre vim /etc/enviroment写入:export JAVA_HOME/usr/lib/jvm/openjdk-8-jre 按wq!退出 再输入:s…

Linux环境变量配置文件--《一图胜千言》

这张图是一个关于Linux系统中shell启动时配置文件加载顺序的流程图。图中分为登录shell和非登录shell两种情况,来描述不同配置文件的读取过程。 登录shell: 当用户登录时,会首先检查是否存在/etc/profile文件,如果存在&#xff0c…

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用

MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文:https://arxiv.org/p…

大话设计模式——2.简单工厂模式(Simple Factory Pattern)

定义:又称静态工厂方法,可以根据参数的不同返回不同类的实例,专门定义一个类(工厂类)来负责创建其他类的实例可通过类名直接调用,被创建的实例通常具有共同的父类。 UML图: 例子: 计…

【JVM】双亲委派机制

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢? 方式1:使用Class.forName方法,使用当前类的类加载…

【RL】Value Function Approximation(值函数逼近)

Lecture 8: Value Function Approximation Algorithm for state value estimation Objective function 令 v π ( s ) v_{\pi}(s) vπ​(s)和 v ^ ( s , w ) \hat{v}(s, w) v^(s,w)是真实state value和近似函数。 算法的目标是找到一个最优的 w w w,使得 v ^ …

重铸安卓荣光——上传图片组件

痛点: 公司打算做安卓软件,最近在研究安卓,打算先绘制样式 研究发现安卓并不像前端有那么多组件库,甚至有些基础的组件都需要自己实现,记录一下自己实现的组件 成品展示 一个上传图片的组件 可以选择拍照或者从相册中…