• 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
      
      • 1
      • 2
      [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可以禁止此指纹。
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 浏览器请求

      [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会变化。
      
      • 1
      • 2
      • 3
      • 4
      • 5

    扩展:有些网站专门收录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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.1 查看指纹

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

    请添加图片描述

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

    请添加图片描述

    其他网站还有:

    https://tls.browserleaks.com/json
    https://tls.peet.ws/
    https://tls.peet.ws/api/all
    
    • 1
    • 2
    • 3

    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
    
    • 1
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请添加图片描述

  • 相关阅读:
    Linux make/Makefile详解
    场馆如何进行智能改造?
    【自用】三阶段项目-起步
    Windows 系统 Solr 8.11.3 安装详细教程(最新)
    数据结构专项-字符串
    GBase 8a MPP Cluster 硬件规划参考
    Redis的Java客户端:Jedis入门
    oracle OCP OCM MySQL OCP认证难吗?
    leetcode 216. 组合总和 III
    JAVA烟草经销平台的设计与实现计算机毕业设计Mybatis+系统+数据库+调试部署
  • 原文地址:https://blog.csdn.net/weixin_74144099/article/details/136196018