声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

tls

tls实际上前身就是 ssl,由于访问 https页面的时候,网络层建立连接过程中,涉及到了tl握手问题,

所以tls指纹就有可能被反爬手段所检测,目前有一些防火墙已经将此技术应用。

目前为止,tls指纹的检测手段依然停留在 将tls内容做哈希操作,由此检测黑名单的方案,而并非使用了白名单手段。

抓包展示

用下某网站做测试 且此网站也有有Ja3指纹加密的

aHR0cHM6Ly9nZ3p5LmppYW5neGkuZ292LmNuL3h3ZHQvMDAxMDAyL3NlYzEuaHRtbA==

fiddler

!注意 fiddler要想抓Ja3-tls指纹 包

要把CONNECTS选项取消勾选,不然抓包指纹包

然后我们抓到了很多指纹包,然后我们挨个打开看看



然后我们看到很多的加密算法,还有加密方式

其实这种包其实本质上就是加入黑名单

已经tls的版本也有

charles

相比较fiddler charles抓到的包就很有限了。

但是操作也更加的简单了

我们直接打开charles 然后刷新网站



这里直接就显示了tls的信息



我们接着点开详细信息 这里显示了tls的加密方式 已经加密的两种方式.

这两种抓包方式终究还是图一乐,真要抓包还得看wireshark

wireshark

步骤如下

  1. 查询网站IP地址 ======> cmd ======> ping xxx.com =====> 复制IP地址
  2. 打开wireShark抓包,选择抓取的网卡
  3. 刷新浏览器
  4. 在过滤器中输入 ip.addr == 你要查看的ip地址 具体如下图

  5. 找到一个Client hello的包

  6. 查看详细信息



    最下面的是hash指纹 和详细指纹信息



    把这个指纹fullstring复制出来

    771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

    这个指纹信息就是网站可以运行的指纹信息

指纹分析

指纹信息分析其实很简单,

我们接下来用三种方式去获取这个指纹信息

也就是上文的771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

浏览器

这里我们选择直接用上文抓包抓到的指纹

还有一种方式

https://tls.browserleaks.com/json 直接去网站看自己的浏览器指纹也是可以的

由于上面已经获取了浏览器的指纹了,我们直接就拿来用了

771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

python

接着我们使用requests原生库,即正常访问,携带基本的参数去请求即可

我们使用代码去访问下这个网站https://tls.browserleaks.com/json

import requests

r = requests.get('https://tls.browserleaks.com/json', verify=True)
print(r.text)

结果

{
"ja3_hash": "8d9f7747675e24454cd9b7ed35c58707",
"ja3_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-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",
"ja3n_hash": "a790a1e311289ac1543f411f6ffceddf",
"ja3n_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-10-11-13-16-21-22-23-43-45-49-51,29-23-30-25-24,0-1-2",
"akamai_hash": "",
"akamai_text": ""
}

所以这个指纹是

771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-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

python 魔改库

我们再试试 Python有关SSL的魔改库

其实这类库有很多

简单举例两个吧 一个是 curl_cffi 一个是 tls_client

我们这里使用curl_cffi 去访问一下看看这个指纹是什么

from curl_cffi import requests

r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome101")
print(r.text)

结果

{
"ja3_hash": "cd08e31494f9531f560d64c695473da9",
"ja3_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0",
"ja3n_hash": "aa56c057ad164ec4fdcb7a5a283be9fc",
"ja3n_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-5-10-11-13-16-18-21-23-27-35-43-45-51-17513-65281,29-23-24,0",
"akamai_hash": "4f04edce68a7ecbe689edce7bf5f23f3",
"akamai_text": "1:65536;3:1000;4:6291456;6:262144|15663105|0|m,a,s,p"
}

而这个指纹是

771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0

总结三种方式

然后我们把这三个指纹拿出来做个对比

浏览器:
771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0 python原生库:
771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-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 python魔改库:
771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0

可以清楚地看到 python的魔改库和浏览器的指纹是长度是一样的。

这样我们可以知道了,这个指纹长度只要和浏览器相同就可以了。

我们使用魔改库访问开头所要访问的网站实验一下



发现可以正常访问

那该如何不借助魔改库去完成Ja3网站的解密呢

可以通过修改ssl的套接字 使得防火墙黑名单失效

从而保证指纹长度一致 即可完成解密

tls 检测的绕过方案

**临时方案: **

注意 requests库必须在2.4 以上版本 不然会失败

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS ='ALL'

修改了requests内部包的 ssI里面的套接字设置,使防火墙黑名单失效

动态 DEFAULT CIPHERS :

https://www.openssl.org/docs/man1.1.1/man1/openssl-ciphers.html

https://support.huaweicloud.com/bestpractice-waf/waf_06_0012.html

这种方法国内处理就已经够了

非临时方案:

自设ssl,并覆写requests中的类的一些方法

https://stackoverflow.com/questions/60407057/python-requests-being-fingerprinted

https://stackoverflow.com/questions/64967706/python-requests-https-code-403-without-but-code-200-when-using-burpsuite

深入理解requests中 建立 tls的过程

先抓包看下正常的访问 tls,和requests访问的区别

我们需要单步调试requests源码,并且想办法修改 tls访问过程中的UA

按照上面的思路,加上对 ssl的理解,就可以实现一个针对于 *ka**i tls检测的高并发方案

逆向之Ja3指纹学习的更多相关文章

  1. android 逆向project smail 语法学习

    众所周知,android 是开源的.如今市场上反编译别人的劳动果实的人也不少.所以我们也是有必要学习下smail语言,(就是androidproject反编译后出的语法语音),看看改怎么给我们的代码 ...

  2. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  3. 2021年正确的Android逆向开发学习之路

    2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...

  4. 20145325张梓靖 《网络对抗技术》 PC平台逆向破解

    20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...

  5. 20145336张子扬 《网络对抗》逆向及bof基础

    20145336张子扬 <网络对抗>逆向及bof基础 学习知识点 缓冲区溢出 缓冲区溢出 一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序 ...

  6. Android无需权限显示悬浮窗, 兼谈逆向分析app

    前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...

  7. Android逆向工程师的黑科技

    你们发现了吗?Android逆向.安全方面的工程师真的越来越"稀有"了. 以腾讯.美团.百度为代表的大厂们,在某招聘网站上居然薪酬高达30-60k. 现在移动端市场越来越火热,AP ...

  8. 【reverse】逆向1 数据宽度

    [reverse]逆向1 数据宽度 前言 感觉学逆向的都是大佬,正好最近在看java视频的时候,发现讲课的老师居然是从逆向行业转行来的,顿时肃然起敬.于是想在暑假的最后发光发热,把逆向的基础知识学习稳 ...

  9. Syscan360会议胸牌破解揭秘

    Syscan360会议胸牌破解揭秘 背景 有幸参加今年11月份的上海Syscan360安全会议,会议期间有一个亮点就是360的独角兽团队设计了一款电子badge(胸牌)供参加人员进行破解尝试,类似于美 ...

  10. 华为V-ISA信誉安全体系:对付新型DDoS攻击的利器

        华为Anti-DDoS解决方案基于华为颇具传统优势的专业软硬件平台开发,在防护机制中,引入先进的检测机制,提供了业内首创的“V-ISA”信誉安全体系,是业界唯一单机可提供超百G DDoS防御能 ...

随机推荐

  1. [ElasticSearch]修改开源安全组件Search Guard-6 用户密码

    ES有很多的安全组件可用,例如: X-pack,Sarch Guard.但目前开源免费的,仅Search Guard. 1 前置条件 Elastic Search 6 服务安装成功,且成功运行. ES ...

  2. [Java/IDE]IDEA运行Java类时报错:Error running 'MainTest': Command line is too long. Shorten command line for MainTest or also for Application default configuration

    报错原因 Java项目启动命令过长 解决方法 点击项目启动配置项 -> shorten command line 选项选择 classpath file 或 java manifest 选项 - ...

  3. 机器学习(五):混合高斯聚类(求聚类标签)+PCA降维(3维降2维)习题

    使用混合高斯模型 GMM,计算如下数据点的聚类过程: \(Data = np.array([1,2,6,7])\) 均值初值为: \(\mu_1, \mu_2 = 1, 5\) 权重初值为: \(w_ ...

  4. sqlplus文件查看oracle自带命令的执行过程

    问题描述:看到一篇文章 在$ORACLE_HOME/bin/sqlplus中可以查看到数据库命令的查询语句.可以直接编辑sqlplus文件,查到到我们平时标准系统命令的原脚本,但是自己进行编辑查看却是 ...

  5. python 类中的属性排序

    可以使用Python中的类(class)来定义一个包含姓名和年龄的类.以下是一个示例代码: class Person: def __init__(self, name, age): self.name ...

  6. 2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装

    目录 前景提示 windows 10 内置的linux系统 1.这个内置系统一定要在windows store里安装,否则,无法使用,这是重点.进入商店,搜索linux. 2.一般画圈这些都可以使用. ...

  7. [C++核心编程] 4.1、类和对象-封装

    文章目录 4 类和对象 4.1 封装 4.1.1 封装的意义 4.1.2 struct和class区别 4.1.3 成员属性设置为私有 4 类和对象 C++面向对象的三大特性为:封装.继承.多态 C+ ...

  8. Jmeter小白使用攻略

    <Jmeter小白使用攻略> 一.主界面 二.如何测试一个接口

  9. python的format方法中文字符输出问题

    format方法的介绍 前言 提示:本文仅介绍format方法的使用和中文的输出向左右和居中输出问题 一.format方法的使用 format方法一般可以解决中文居中输出问题,假如我们设定宽度,当中文 ...

  10. 推荐一个基于.Net Framework开发的Windows右键菜单管理工具

    平常在我们电脑,我们都会安装非常多的软件,很多软件默认都会向系统注册右键菜单功能,这样方便我们快捷打开.比如图片文件,通过右键的方式,快捷选择PS软件打开. 如果我们电脑安装非常多的软件,就会导致我们 ...