前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​Android抓包总结-HTTPS单向认证&双向认证突破

​Android抓包总结-HTTPS单向认证&双向认证突破

作者头像
辞令
发布2020-09-17 11:11:04
3.4K0
发布2020-09-17 11:11:04
举报

Android / 抓 / 包 / 总 / 结

Android抓包总结

HTTPS单向认证&双向认证突破

前言

在被问到抓包时的一些问题:证书、单向认证、双向认证怎么处理,以及绕过背后的原理时,一时很难说清个大概,于是整理了下思绪,将这些知识进行总结和整理,末尾再对一个某社交APP进行实战突破HTTPS双向认证进行抓包。--团队新加入成员:miniboom

单向认证与双向认证

01

几个概念

对称加密与非对称加密 对称加密:加密和解密使用同一个秘钥。加密和解密速度很快,常见的如AES。 非对称加密:加密和解密使用不同秘钥,这两个秘钥成双成对,叫做公钥和秘钥。数据使用公钥加密后,使用私钥进行解密,使用私钥加密,那就用公钥解密。一般是把公钥给别人,让别人进行加密后再传给自己用私钥解密,比如RSA。

CA证书相关知识

CA证书是由CA机构发布的数字证书。其内容包含:电子签证机关的信息、公钥客户信息、公钥、签名和有效期。这里的公钥服务端的公钥,签名是指:hash散列函数计算公开的明文信息的信息摘要,可以理解成身份证信息,然后CA的私钥对信息摘要进行加密,加完密之后就是签名。 证书 = 公钥+信息摘要+签名 由于在客户端操作系统中就预留了CA的公钥,所以支持解密签名。

有了这些概念,来看看https是怎么做到安全认证的。

02

HTTPS单向认证

这个过程图中都可以看得出来它的流程是啥,对于我的理解是,它是服务器将证书信息全部发到客户端这来,因为客户端系统中拥有自带的CA公钥,可以解密server发来的数字签名拿到server给的公钥,然后产生随机数(F秘钥)经由server给的公钥进行加密,然后发给服务器使用秘钥得到F秘钥,随后两者就用F秘钥进行交流。

在单向认证的实现上,占据主动性的还是客户端,因为只要客户端认可了server发来的签名和认证,然后直接告诉服务器我们下次使用什么秘钥进行通讯就行了。单向认证是在客户端上验证的。

利用单向认证来进行反抓包。

可以利用SSL-Pinning的技术来进行反抓包。中间人攻击的要点是伪造了一个假的服务器证书,让客户端信以为真,那么我在客户端内置了一个server的证书,两者进行比较一下就知道是不是真的了。

突破思路:有函数会对内置证书或者公钥进行比照验证,如果让它一直返回通过,就可以绕过了。xpose+justTrustme模块,它将所有的HTTP请求库中用于校验证书的API都进行HOOK,将结果返回正常,所以基于这个思路,xpose+justTruseme就完成了对单向认证的突破。网上也有很多相关教程,不加赘述。

03

HTTPS双向认证

双向认证和单向认证过程差不多,但是多了客户端向server发送证书并校验的过程。然后客户端按照服务器约定的方式将F秘钥发给server,双方按照这个方式来进行通讯。

利用双向认证来进行反抓包。

防抓包策略,将证书进行加密或者伪造,这样没有秘钥就无法打开证书内容。也就无法使用客户端的证书。

突破思路:一般在app/assert、或者raw,搜索.p12或者.pks,直接逆向APK,找到对应加载证书和密码的地方,将其密码打印出来。下面我们用实战来详细说明。

突破某社交APP HTTPS双向认证

网上也有关于某社交app xxx(匿名代替)的抓包破解,但是都是基于xxx未加壳的老版本,直接反编译,然后IDA找到native层的秘钥硬编码,我这里针对xxx最新版的双向认证破解。

直接抓xxx的包,返回400:

需要静态分析代码,首先脱壳,使用frida-unpack砸壳成功:

将砸壳后的dex一一进行查找,搜索"client.p12":

发现调用加载的so层函数,丢入IDA中试图找到秘钥:

在IDA中找到getStorePasswd函数:

F5伪代码查看:

发现秘钥并没有硬编码,但是我们回头看加载证书和密码处的代码:

使用jeb反编译,发现加载点,根据参数追踪,最终定位到了XxxNetworkSDK函数a,然后使用frida 编写脚本hook打印出load的第二个参数(密码):

脚本内容:

1.  'use strict'  
2.  //frida -U -f cn.xxxapp.android -l password.js --no-pause  
3.  //adb forward tcp:27042 tcp:27042  
4.  //adb forward tcp:27043 tcp:27043  
5.  if(Java.available){  
6.      Java.perform(function(){  
7.          var application = Java.use("android.app.Application");  
8.          console.log("application: "+application);  
9.          application.attach.overload('android.content.Context').implementation = function(context){  
10.              var result = this.attach(context);  
11.              var classloader = context.getClassLoader();  
12.              Java.classFactory.loader = classloader;  
13.    
14.              //  
15.              var xxxNetworkSDK = Java.classFactory.use("cn.xxxapp.android.net.XxxNetworkSDK");  
16.              console.log('SDK = ' + xxxNetworkSDK);  
17.    
18.              xxxNetworkSDK.a.overload("java.lang.String").implementation = function(arg1){  
19.                  console.log('进入了password环节==========')  
20.                  var password = this.a(arg1);  
21.                  console.log('密码= '+password);  
22.                  console.log('退出了password环节==========')  
23.              }  
24.          }  
25.    
26.      });  
27.  }  

得到证书的秘钥:

在代理burp中填入证书所在位置和填入密码即可

不会再出现400了,成功绕开xxx的双向认证进行抓包。

往期经典推荐:

漏洞笔记|记一次与XXE漏洞的爱恨纠缠

深入探究浏览器编码及XSS Bypass

HVV前奏|最新版AWVS&Nessus破解及批量脚本分享

“最后”的Bypass CDN 查找网站真实IP

渗透实战(一)|BSides Vancouver 2018 (Workshop)

移动安全(一)|Android设备root及神器Xposed框架安装

内网信息收集篇

MSF 下域内渗透

>>关于我们:

WhITECat安全团队是起源实验室合作安全团队,主要致力于交流分享团队成员技术研究成果、即时发布最新的漏洞新闻资讯、各大厂商内推通道以及各种安全相关延伸。团队成员目前由起源实验室核心成员、一线安全厂商攻防实验室、某研究院、漏洞盒子TOP10白帽子等人员组成。团队内有不定期的技术交流,(不可描述)工具分享等活动,致力于实现“开放分享”的hack精神。

欢迎各位大佬关注^_^

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WhITECat安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HVV前奏|最新版AWVS&Nessus破解及批量脚本分享
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档