突破https——https抓包

加密阶段学习了https原理,现在开始尝试破解,工具主要是burp suite, fiddler/charles与之类似。

一些概念性的东西

中间人攻击

在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信。攻击机以自己的证书替代服务器发给客户端的证书。通常,客户端不会验证该证书,直接接受该证书,从而建立起和攻击机的安全连接。这样,客户端发送的数据,都会被攻击机获取和解密。

Certificate Pinning

证书锁定Certificate Pinning是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。
Certificate Pinning在手机软件中应用较多。因为这些应用连接的服务器相对固定,可以预先将服务器的X509证书或者公钥保存在App中。例如,苹果应用商店Apple App Store就预置了这个功能。当使用中间人工具或者Fiddler之类的工具拦截数据,就会造成应用商店无法联网的情况。

https代理抓包原理

简单来讲,就是burp充当客户端与服务端通信,得到服务端的响应之后用自己的证书充当服务端与app通信。如果app不对证书进行验证,或应用使用系统的ca信任库进行验证,而系统又安装了burp的证书,burp就可以完成中间人的角色。

破解手段

根据不同的认证过程需要使用相应的手段进行破解。

使用系统CA库的破解

安卓浏览器,Mac下的Chrome浏览器都是使用系统的信任证书做验证。另外像下面这类代码请求https,应用也是通过系统信任证书做验证。

URL url = new URL(“https://www.baidu.com/“);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.connect();
System.out.println(urlConnection.getResponseCode());

对于这种情况,将burp suite等工具的CA证书安装到系统中就可破解。如下是安卓上安装burp证书的过程。

  1. 导出burp CA证书
    点击Proxy -> Options 在Proxy Listeners 面板处的import/export CA certificate
    导出burp CA导出burp CA

  2. 将证书上传到手机,直接点击就可以安装了。

PC上的firefox浏览器维护着一套受信凭据,点击 首选项->高级->证书->查看证书,在证书机构中导入就可以了,如下图
Firefox导入证书Firefox导入证书

另外burp suite出于安全考虑,每次安装都会重新生成一套CA证书,所以如果重新安装了burp,要记得将系统中的CA证书更新。

接受所有证书的app

如果应用代码中使用如下代码,则会接受所有证书(不对证书做验证),此时直接通过代理就可以抓包。像这代码一般都是放在爬虫里抓数据的。

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     
     
static SSLSocketFactory trustAllSocketFactory() throws Exception{
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sslCxt = SSLContext.getInstance( "TLSv1.2");
sslCxt.init( null, trustAllCerts, null);
return sslCxt.getSocketFactory();
}

Certificate Pinning

前几年的app虽然也都用了https协议,但只需要简单地通过设置代理就能抓到;从去年开始遇到的几个app都不能走代理抓包了,一设置代理就说网络有问题,联不上网。
通过前面的学习总算知道是怎么回事了。原来他们都使用了证书绑定技术,证书绑定简单来说就是app只信任自己内置的证书,如果服务端的证书与app内的信任证书不符,客户端主动拒绝连接,从而造成“网络无法访问”。如下是引用自stackexchange的关于证书验证与绑定的相关评论。

Typically certificates are validated by checking the signature hierarchy; MyCert is signed by IntermediateCert which is signed by RootCert, and RootCert is listed in my computer’s “certificates to trust” store.

Certificate Pinning is where you ignore that whole thing, and say trust this certificate only or perhaps trust only certificates signed by this certificate.

So for example, if you go to google.com, your browser will trust the certificate if it’s signed by Verisign, Digicert, Thawte, or the Hong Kong Post Office (and dozens others). But if you use (on newer versions) Microsoft Windows Update, it will ONLY trust certificates signed by Microsoft. No Verisign, no Digicert, no Hong Kong Post office.

Also, some newer browsers (Chrome, for example) will do a variation of certificate pinning using the HSTS mechanism. They preload a specific set of public key hashes into this the HSTS configuration, which limits the valid certificates to only those which indicate the specified public key.

所以我们可以有以下几个方式破解:

  1. 李代桃僵
    反编译app, 替换cer为burp的证书后重新打包。如果有反二次打包机制,可以通过xposed hook相关方法来替换证书。
    另外可以从app内取出cer文件并导入浏览器,就可以用浏览器访问app的url。
  2. 釜底抽薪
    用xposed或修改smali控制创建连接的SSLSocketFactory,使它不加载信任库。

另外app内的证书可能有两种格式

  • .cer/.der
    如果是.der证书,按以下步骤

    1. 逆向,取出.cer证书文件
    2. 用burp的证书替换掉app内的证书,app重新打包
  • .bks
    如果是keystore文件就简单了,先取出来,如果是单向认证,用keytool把burp的证书导入使之成为truststore内的一条就可以了;
    如果是双向认证,除了加入truststore或替换cer文件,还要把keystore加入burp中,添加之前需要将它转换成pkcs12格式。如下图
    burp添加keystoreburp添加keystore

android 4.X通过设置wifi代理可以为所以应用设置代理,但在5.x版本中设置的wifi代理只能为浏览器使用,如果要为app设置代理需要root后安装全局代理工具(如proxydroid)。

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HTTP/HTTPS协议分析工具(Http Analyzer)7.5.3.455 汉化特别版 HTTP Analyzer 分两部份,可以集成在IE浏览器中抓包,也可以单独的安装应用程序的包,非常实用。 压缩包内有注册机,大家根据需要选择相应的产品获取注册码。 这是一款实时分析 HTTP/HTTPS 数据流的工具。它可以实时捕捉HTTP/HTTPS 协议数据,可以显示许多信息(包括:文件头、内容、Cookie、查询字符窜、提交的数据、重定向的url地址),可以提供缓冲区信息、清理对话内容、HTTP状态信息和其他过滤选项。同时还是一个非常有用的分析、调试和诊断的开发工具。 Http Analyzer是一个HTTP/HTTPS协议分析工具,用此工具可以非常快速的分析出绝大多数视频博客的视频地址。尽管有一些网站提供了诸如 YouTube ,Google Video 等视频网站的php解码程序,不过那些php程序并不是通用的。当博客视频网站对视频地址加密算法做些变动时,php程序又需要大规模改动才能对应解码。 使用类似Http Analyzer协议分析工具就不同了,所有的博客视频都是http方式提供的,最终的http路径是肯定要明文出现的,所以获取此路径是可能的。 HTTP/HTTPS协议分析工具(Http Analyzer)使用方法 第一步:设置好Http Analyzer的过滤器选项大部分的视频博客的Type都是 video/flv ,video/x-flv ,application/octet-stream 极少部分采用application/x-shockwave-flash 或干脆不表明类型。http的返回结果肯定是2XX,所以在Result 要设置成<300。返回的Size最好采用倒序排列,视频博客的大小一般比较大,倒序容易发现。 第二步:运行Http Analyzer:(点击工具栏第一个绿色箭头图标)打开YouTube 或6rooms视频博客网站。回到Http Analyzer窗口,看你需要的视频地址是不是老老实实的呆在里面呢?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值