抓包之双向证书校验
0x01 双向证书校验双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。而常规的https只是客户端校验服务端的证书验证服务器的身份。因此双向证书认证在一定程度上能增大中间人攻击的难度和我们抓包分析的难度。
下图为双向认证的流程图,如下所示:
0x02客户端校验 VS 服务端校验客户端校验适用场景:如果服务器数量非常多、app版本众多,app在实现Https的策略上通常会采取客户端校验服务器证书的策略。
常见的校验方式:
X509TrustManager校验
certificatePinner证书绑定
HostnameVerifier验证
服务端校验适用场景:比如银行、公共交通、游戏等行业,这种服务器高度集中、数量比较少,全国就那么几台、且ap ...
抓包进阶之通杀okhttp证书
0x01 通杀okhttp-ssl-pinning思路所谓通杀:就是不管有没有混淆,都可以将对应的类识别出来。。。
本质上还是hook对应的类,对应的方法。但是这些方法和类都是做了混淆处理的,怎么在所有类中识别出来特定的类和方法是通杀的关键。。。
第一次校验:X509TrustManagerOKHttpClient.Builder builder = new OKHttpClient.Builder();builder.sslSocketFactory(factory, (X509TrustManager) trustManagers[0])
X509TrustManager是TrustManager接口的一个实现类,主要校验是通过TrustManager接口下的checkServerTrusted函数。
X509TrustManager是通过对checkServerTrusted函数进行重新实现SSLPinning。
上节课的hook思路为:只要是实现了TrustManager接口的类,都hook里面的checkServerTrusted方法。
本节课换思路:Hook掉sslS ...
抓包之sslunpinning
0x01 客户端段SSL证书绑定SSL Pinning 也称为证书锁定,是Google官方推荐的检验方式,意思是将服务器提供的SSL/TLS证书内置到移动客户端,当客户端发起请求的时候,通过对比内置的证书与服务器的证书是否一致,来确认这个连接的合法性。
SSL Pinning 一般实现方式有两种
一种是在代码层进行校验
一种是通过配置文件network_security_config.xml进行配置实现校验。
代码层实现以常见的OKHttp网络框架举例,在代码层面校验证书的代码如下:
详细的代码实现可以参考:
https-capture/NetCaptureTest/app/src/main/java/com/actorn/netcapture/MainActivity.java at main · act0rn/https-capture (github.com)
配置文件实现通过 res/xml/network_security_config ...
Http抓包之R0Capture
一 R0Capture介绍1. 下载地址r0ysue/r0capture: 安卓应用层抓包通杀脚本 (github.com)
2. 介绍
仅限安卓平台,测试安卓7、8、9、10、11、12、13、14 可用(禁止模拟器) ;
无视所有证书校验或绑定,不用考虑任何证书的事情;
通杀TCP/IP四层模型中的应用层中的全部协议;
通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;
通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;
无视加固,不管是整体壳还是二代壳或VMP,不用考虑加固的事情;
3. 用法Usage
Spawn 模式:
$ python3 r0capture.py -U -f com.coolapk.market -v
Attach 模式,抓包内容保存成pcap文件供后续分析:
$ python3 r0capture.py -U 酷安 -v -p iqiyi.pcap
...
Android HTTPS防抓包策略总结
0x01 前言在对移动App安全测试时,通常第一步是对App的网络请求报文进行抓包。因为App客户端可以实现对HTTPS证书进行校验以防止抓包,为了对抗证书校验,一般会采用信任代理工具签发的证书、安装插件绕过证书检测等方法。
本文将对常用的证书校验方式及相应的对抗方法做个简单总结。
0x02 了解HTTPS证书在HTTPS握手建立链接时,会使用非对称算法协商通讯使用的加密密钥。非对称加密算法需要两个密钥:公钥和私钥。
通常所说的HTTPS证书就可以理解为公钥,为了确保客户端收到的证书的真实性,于是诞生了CA机构,CA机构颁发的证书也叫CA证书,防止CA证书被伪造,同时避免套娃,因此在操作系统中内置了一个信任库,里面保存了可信任的CA证书集合,也称为系统根证书,用于校验服务端返回的证书的真实性。在Android系统中,可以点击 设置-系统安全-加密与凭据-信任的凭据查看默认信任的CA证书。
0x03 证书校验&对抗在使用HTTPS协议进行网络通讯时,对HTTPS证书校验有多种处理方式,包括
忽略证书链校验
系统证书链校验
证书绑定(SSL Pinning,代码校验和配置 ...
算法还原之RSA
一 简介RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据PK计算出SK。
也就是说,对极大整数做因数分解的难度决定了RSA算法的可靠性。理论上,只要其钥匙的长度n足够长,用RSA加密的信息实际上是不能被解破的。
RSA算法通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的 ...
算法还原之AES
参考文章:
https://blog.csdn.net/xnxqwzy/article/details/136698541
https://www.cnblogs.com/yunshangkanjing/p/12765147.html
https://blog.csdn.net/qq_43529443/article/details/117386078
https://blog.csdn.net/weixin_44767965/article/details/122520302
一 AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
下面说明一下各个字段的作用与意义:
明文p:
没有经过加密的数据。
密钥K:
用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。
密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则可能会导致密钥泄露,通常是通过非对称加密算法加密密钥,然后再通过网络传输 ...
算法还原之对称加密模式及填充
一 前言根据上节课DES的加密流程,利用CyberChef来测试
会发现除了输入plainText 和 key之外,还需要选择模式Mode和偏移量iv:
上面是ECB模式,默认可以不输入iv,但是将Mode修改为CBC后,就会报错。要求必须输入iv的值
根据上节课的原理,要求输入的明文必须为64位/64位的倍数。但是这块将输入调整为 “1234567”,56位,发现也是可以正常加密的
这块是因为当输入明文不满足64位的倍数的时候,会对明文的长度进行填充。。。
二 加密模式加密模式可以简单理解为,在加密前/加密后,对用户的输入/输出进行处理。分组密码常见的加密方式主要有5种:
ECB:电子密码本模式(不需要传入iv)
CBC:密码块链接模式
CFB:密文反馈模式
OFB:输出反馈模式
CTR:计数器模式
明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。
ECB模式在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。
ECB模式 ...
算法还原之DES
一 DES原理介绍可以参考下面这篇文章,讲解的很详细:
https://blog.csdn.net/Demonslzh/article/details/129129493
DES算法采用分组密码,将明文分成64位一组,密钥长度为56位。其基本原理是通过一系列的置换、替换和异或运算,利用密钥对数据进行加密和解密。
DES为对称加密算法
DES还是一种分组加密算法,算法每次处理固定长度的数据段,称之为分组
DES算法过程的关键是从给定的初始密钥中得到16个子密钥的函数
要加密一组明文,每个子密钥按照顺序(1-16)以一系列的位操作施加于数据上,每个子密钥一次,一共重复16次
DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进行填充;如果明文长度超过64位,则需要使用分组模式进行分组加密。
虽然DES算法的分组大小是64位,但是由于DES算法的密钥长度只有56位。
子密钥k的生成DES算法采用了每轮子密钥生成的方式来增加密钥的复杂性和安全性。每轮子密钥都是由主密钥(64位)通过密钥调度算法(Key Schedule Algorithm)生成的。DES算法的密 ...
算法还原之哈希算法总结
一 常见哈希算法介绍哈希算法对比
算法
返回值长度(hex)
初始化链接向量(hex)
常量表(k表)【个】
MD5
32byte
32byte(4个)
64
SHA1
40byte
40byte(5个)
4
SHA256
64byte
64byte(8个)
64
SHA512
128byte
128byte(8个)
160(32byte)
初始化链接向量MD5:4个=32byte
context->state[0] = 0x67452301;context->state[1] = 0xefcdab89;context->state[2] = 0x98badcfe;context->state[3] = 0x10325476;
SHA1:5个=40byte
#define INIT_DATA_h0 0x67452301UL#define INIT_DATA_h1 0xefcdab89UL#define INIT_DATA_h2 0x98badcfeUL#define INIT_DATA_h3 0x1032547 ...