通过修改根证书绕过rustls的证书固定机制,抓包解密ssl流量

news2024/10/7 4:34:37

例子,cloudflare的warp-svc.exe。抓包获取密钥。
用proxifier尝试了一下强行代理,无效,因为proxifier是通过Hook Socket函数方式实现的,但这个程序可能没有用Socket函数进行通信。
之后发现通过nekoray基于gvisor的VPN白名单模式全局路由可以强制代理。但发现MITMproxy抓不了包而且在Event Log返回sslv3 alert bad certificate。
在这里插入图片描述
这说明warp-svc.exe在和MITMproxy 进行ssl握手的时候发现MITMproxy 的证书不对,然后就向MITMproxy发送sslv3 alert 信息然后中断连接。问题是,我已经将MITMproxy 的证书存储到windows的根证书目录里面,但仍然出现这种情况,说明warp-svc.exe内部固定了证书发行机构。

尝试了google的ssl_log,无效,ssl_log的原理是hook openssl库,可能这个程序没有用openssl库来处理tls。
过IDA pro查看发现有很多cargo的字样,猜测是rust写的。进一步搜索alert 发现一个字符串"Sending warning alert",网上一查发现是rustls库里的字符串,那么就从rustls入手。
先从bad certificate开始搜索rustls的源码,由于bad certificate在ssl握手里的序号是42,
在这里插入图片描述
42是0x2a,先搜索0x2a
在这里插入图片描述
发现是个枚举类型,接着搜索BadCertificate发现有三种类型对应这个alertBadEncoding | UnhandledCriticalExtension | NotValidForName

在这里插入图片描述
前面两个错误不太可能发生,那么NotValidForName最可能,接着搜索发现在pkierror里面:
在这里插入图片描述
接着搜索pki_error
在这里插入图片描述
发现确实有固定证书的情况,就是self.roots的这个变量。发现确实内部固定了根证书:

在这里插入图片描述

接着搜索RootCertStore,发现在anchors命名空间里

在这里插入图片描述

去anchors命名空间里翻找发现结构体RootCertStore是OwnedTrustAnchor类型是vector数组
在这里插入图片描述
接着搜索OwnedTrustAnchor找到它的结构体
在这里插入图片描述
那么RootCertStore 是从哪里赋值的呢?代码里没搜到,通过readme可以看到,example里面有个tlsclient-mio.rs,应该是调用rustls的例子:在这里插入图片描述
从里面可以看到RootCertStore 被webpki_roots::TLS_SERVER_ROOTS所赋值,于是去寻找webpki_roots发现确实有这样一个项目,这个项目里面有个脚本build.py,生成了src/lib.rs文件,进入这个文件一看:
在这里插入图片描述
发现根证书的存储方式是存储subject和spki,这两个值通过src/bin
/process_cert.rs这个程序处理证书然后生成,通过cargo build之后在target文件夹里面生成的process_cert.exe文件。

其中每个证书的spki大小都只有几种,而subject大小不一样。去IDA里面搜索subject代表的二进制数值,果然搜到了。

在这里插入图片描述

之后的思路就简单了,直接用openssl生成一个相同大小subject和spki的的证书然后使用process_cert.exe提取出来,再使用010editor替换目标程序warp-svc.exe里面的字节串即可。一个简单的方法是使用与你的目标域名的签发机构根证书相同的生成信息,比如api.cloudflareclient.com的根证书是Baltimore CyberTrust Root,提取出来后使用命令

 openssl x509 -in '.\Baltimore CyberTrust Root.crt' -noout -text

得到它的subject:

 Subject: C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root

然后使用openssl生成subject一模一样的证书

openssl genrsa -out ca.key 2048
openssl req -new -x509 -key ca.key -out ca.crt
#按照之前提取的信息填写
cat ca.key ca.crt >mitmproxy-ca.pem

最后用process_cert.exe处理这个证书提取出二进制格式的subject和spki并使用010editor替换目标程序warp-svc.exe里面的字节串。

将这个证书安装到系统根证书目录之后就能抓包解密流量了,需要注意的是如果抓不到包,则可能是因为域名解析的地址是ipv6的因为nekoray里的ipv6vpn有些bug。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《计算机网络——自顶向下方法》精炼——3.1-3.4.1

“生命在于运动,学习在于不断尝试。”——亚里士多德 文章目录 运输层概述与服务运输层功能运输层概述IP协议UDP和TCP协议 多路复用与多路分解UDPUDP相较于TCP的优点UDP报文段结构检验和可靠数据传输构造可靠数据传输协议 运输层概述与服务 运输层为应用层提供了逻…

2022年宜昌市网络搭建与应用竞赛样题(二)

网络搭建与应用竞赛样题(二) 技能要求 (总分1000分) 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分&#xff0…

传统工厂布局数字化的核心因素——智能工厂

近年来很多鼓励企业数字化转型的政策陆续出台,在一定程度上帮助企业减轻数字化转型的成本压力。但是企业数字化转型依然面临着诸多的问题与挑战。主要还是因为大部分企业,特别是制造型企业,数字化进程还在探索阶段,资金、人才、技…

接口自动化测试详解——持续集成流程中不可或缺的一环

B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 接口自动化测试 Jenkins持续集成 总结 摘要: 在软件开发中,自动化测试已经成为了…

过滤器、拦截器、aop -> ‘三兄弟‘

目录 一、熟悉 三兄弟的区别 过滤器和拦截器的区别 使用场景 二、使用 filter Interceptor aop 一、熟悉 三个词都很熟悉,在某些课程或者博客中总被提到,但平时基本不怎么写; 三者在家族中的关系可以看下下边这张图,可以很…

52.现有移动端开源框架及其特点—PocketFlow-2

PocketFlow 性能 通过引入超参数优化组件,不仅避免了高门槛、繁琐的人工调参工作,同时也使得 PocketFlow 在各个压缩算法上全面超过了人工调参的效果。以图像分类任务为例,在 CIFAR-10 和 ImageNet 等数据集上,PocketFlow 对 ResNet 和 MobileNet 等多种 CNN 网络结构进行…

LT8471IFE#PBF-ASEMI代理亚德诺LT8471IFE#PBF原厂芯片

编辑-Z LT8471IFE#PBF参数描述: 型号:LT8471IFE#PBF 输入电压:2.6-50V 静态电流:2.2 mA 停机时的静态电流:0.01μA 正反馈电压:789 mV 反馈引脚偏置电流:30 nA 开关频率范围&#xff1a…

产品经理该怎么催进度?

这算是一个项目管理相关的问题,很多公司会把产品经理与项目经理的工作职能划分并没有这么清晰,而且项目是否能够按时上线,在整个项目推进过程中也是至关重要的。如果是公司的自研产品,项目没办法定期交付,挨老板一顿骂…

Barotrauma潜渊症私人服务器架设教程

准备工具: 服务器一台(Ubuntu系统) 家用电脑一台(有网就行) 准备阶段 通过SSH登入服务器。 服务端需要下载三个软件。 窗口管理工具 Screen 。用于将服务器挂在后台中运行。 SteamCMD 。用于下载潜渊症服务器。 …

【YOLO 系列】YOLO v4-v5先验知识

文章目录 输入端Mosaic数据增强Self-Adversarial TrainingCmBN 主干网络Mish激活函数DropBlock 正则化CSPNetFocus结构 NeckPANet 输出目标损失函数IoU LossGIoU LossDIoU LossCIoU Loss总结 DIOU_nms 参考 YOLO v4和v5版本在v3版本的基础上,组合了多种先进算法提升…

OLAP分析型数据库clickhouse的选型、安装与试用

一、背景: 目前,在做项目时,遇到使用oracle数据库进行大表查询分析时,查询比较慢,而且随着表数据逐渐积累,数据量过亿(按月估计)。架构师针对几个关键要点(非实时数据、核心场景查询分析、对事务要求低、数…

谷粒商城二十四springCloud之Sleuth+Zipkin 服务链路追踪

为什么用 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。 主要体现在,一个请求可能需要调…

进程同步及经典问题

目录 1、基本概念 1.1两种形式的制约关系 1.2临界资源 1.3临界区 1.4同步机制应遵循的规则 2、硬件同步机制 3、信号量机制(重要) 3.1整型信号量 3.2记录型信号量 3.3AND型信号量 3.4信号量集 4、信号量的应用 4.1利用信号量实现进程互斥 4.2利用信号量实现前趋关系 …

【Spring】初识MyBatis (一)

MyBatis概述 MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO(Plain Old Ja…

Qt libqrencode二维码——QtWidgets

前言 之前写过二维码的程序,但是在U盘上,没带,又重新找的网上资料写的。 网上二维码的生成,大多用到是第三方库libqrencode,这也一样: 效果图 本来是个动图的,都被和谐了,所以换成截图&…

2023年必学的一款测试工具,10 分钟上手

近两年有一款 UI 测试工具非常火爆,名字叫 cypress, 官方号称超越 selenium, 是面向下一代的测试工具。 那 cypress 到底要不要学呢?学起来容易吗?我们一起来看一下。 资料传送门:《软件测试全套基础/进阶/转行资料》 安装 cy…

【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

文章目录 一、前言二、功能介绍2.1 功能一2.2 功能二2.3 其他有趣的功能 三、总结 一、前言 用 Midjourney 花一个小时做的项目 logo 图: 解释一下 logo 的含义:一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义,然后分…

数据流传输适配器系列产品设计资料保存:220-基于光纤的数据流传输适配器系列产品

220-基于光纤的数据流传输适配器系列产品 一、产品概述 光纤传输适配器为公司主力产品,主要包括10Gbps传输,40Gbps传输和100Gbps光纤传输,适配CameraLink(双base或者1路Full)、HDMI、HD-SDI;多路AD&#x…

TikTok数据报告要怎么看?

TikTok数据报告是一种分析和汇总TikTok平台上数据的报告,包含TikTok平台上的用户数据、视频数据、广告数据等。TK卖家每年可以通过分析TK数据报告来更好地了解受众和市场趋势,从而制定更加精准的营销策略和提升销售业绩。TikTok数据报告也可以帮助商家更…

分布式锁Redission对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对

文章目录 1 Redission介绍2 Redission快速入门3 Redission可重入锁原理4 Redission锁重试和WatchDog机制5 Redission锁的MutiLock原理 基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&…