[学习]-用https原理来打败微信跳一跳的好友们

本篇不再讲解https基本的概念和证书校验的原理;感兴趣的可以参看我的另外一篇文章 给你的博客上一把锁
本文目的是简要介绍下密码学的几种应用场景, 这里重点是分析了为何要使用加密算法,以及解决了什么现实问题;最后介绍了https攻击的几种方案,并使用跳一跳刷分来试验了下https中间人证书欺骗的方法。本文由我sheldoncui版权所有,未经许可不可转载;对于文中小游戏的刷分方法仅供学习研究。

本篇涉及到的对称加密和非对称加密知识属于密码学领域的概念,不会过多深究,如果需要深入研究,则可以以这篇知乎作为引子不断深入挖掘https://www.zhihu.com/question/25912483

先来一发跳一跳的排名结果镇楼:

搞清非对称加密的应用场景

非对称加密会应用在2种场景:

  1. 签名(防冒充,其实这里保证防冒充的消息一般是一个明文摘要)
  2. 消息保密(防偷窥,其实这里防偷窥的消息一般就是指的明文消息内容)。

在使用非对称加密算法时,不同场景其加解密的钥匙是不同的: 在 消息保密 时公钥负责加密,私钥负责解密,因为别人解不开啊,自然就实现了防偷窥;而签名时是不希望中间被人冒充发送一个消息(防冒充),所以此时私钥负责签名,公钥负责验证,怎么验证呢,一般除了把签名发过来,还要发一个明文过来,然后双双解出哈希值对比,即可验证明文是不是对方发来的。

一般在传输特别重要的信息(比如对称加密的秘钥)时,”消息内容保密”和”发送者的防冒充”是都要保证的,技术上的保障手段就是加密(消息保密)和签名(签名);所以https在服务器传递公钥给浏览器的这一步是采用的签名手法,因为服务器的公钥不是个保密的东西,但是得让浏览器检测有没有被别的服务器冒充发送来或者中间有没有人篡改过这个公钥。所以其他服务器在不知道CA私钥的情况下,是无法创建出一份放置了自己公钥的合法证书的。 而https在协商对称秘钥时候,第三个随机数非常关键,他不能被偷窥,所以这里使用了公钥加密,私钥解密的办法,保证了这个随机数的防偷窥。

最终浏览器通过签名验证的手段,验证了证书及其内部的公钥确实肯定不是别人的,肯定是能生成这个证书签名的那个人的;基本就是网站主了。 而浏览器通过公钥加密的手段把保密的随机数发送给了拥有证书里公钥的配对私钥的那个人,也只有那个人能解出真正的随机数。

最终的最终,两边各自都能推算出一个对称加密的秘钥和key,然后使用对称加密进行信息传输;因为对称加密速度比较快嘛。 此时对称加密的key可以确保是绝对安全的,因为SSL握手过程已经保障了这个key生成机制的安全。

https网站攻击的类型

理解了https原理后,下面我想到了几种https攻击方法。经过分析之后,我们也可以发现,其实这个世界上并没有绝对安全的方法论。

黑客用自己的证书+自己的域名

这方法相当于做一个钓鱼网站,这里所有https证书都是黑客自己的,并没有入侵一说。仅仅是钓鱼而已。

证书劫持+用自己的域名

由于服务器证书是可以公开的,访问网站服务器自动就会把证书发送给浏览器。 所以我们是否可以劫持网站传来的证书,作为自己钓鱼网站的证书来使用呢?
答案是否定的; 别忘了上文中我们讲到的证书校验的三步骤;浏览器校验时除了验证证书本身是否是CA机构颁发的,而且要验证证书内容和当前访问的网站是否一致,如果不一致也会爆出证书错误的提示的。

因此,单纯的证书劫持是无法实现的。 除非用户看到浏览器警告后,点击了继续访问 (事实上,确实有很多小白用户会去访问已经提示不安全的网站)。 所以,既然劫持来的证书根本没用,而且效果这么差,你为何不直接用自己域名的证书呢…

证书劫持+DNS劫持

刚刚我们第一种方法还是有缺陷的,会因为证书和网站信息不匹配而被浏览器警告,毕竟现在浏览器的警告做的越来越鲜艳,我们不能指望小白用户去点击继续访问。所以,我又想到一个办法,我们能否连用户的DNS也劫持掉,直接让他们访问目标网站时指向我的服务器呢?
DNS劫持,显然是可以的,而且现在越来越简单可以做到。

然而,要实现https欺骗还是不行。因为虽然我们劫持了目标网站的证书,但是我们没有目标服务器的私钥,这样在客户端进行证书验证阶段确实是能欺骗成功的,但由于握手阶段计算sessionkey(后续会话秘钥key)的时候,是有一次对随机数的非对称解密的。此时作为中间人你是无法解开客户端用真正网站服务器的公钥加密过的随机数的;这就导致SSL握手的第四步无法完成。我司的https专家罗成也告诉我,这会爆出 SSL连接错误; 好吧,我们又不能优雅的进行入侵了。

域名入侵

域名入侵这个应该不能简单的理解为劫持了,而是直接入侵目标网站的域名服务器或者域名账户控制权。黑客通过拿到域名控制权然后去CA机构给自己的公钥申请数字证书,则黑客就可以拿到 跟自己网站信息一致 的一本证书,而且黑客是拥有跟这个证书匹配的私钥的。

有了这些,下一步就只需要通过DNS劫持等手段,让用户访问到黑客的服务器了。 然而,连域名都入侵了,我们还需要DNS劫持吗,显然不需要了,此时直接把域名指向我们自己的服务器就行了。

当然,这个几乎不可能发生,毕竟第一域名是比较难入侵而且能持续很长时间不被发现的;另外即使入侵了域名,你想重新申请到CA证书也是比较难的,因为知名公司的CA证书申请都是要提交营业执照等东西的。 但事实上在国外还真的发生过一起针对银行的大型攻击事件,我们想不到的黑客他就是做到了 http://news.cnblogs.com/n/567978

中间人证书欺骗攻击

既然上面的方法都那么难,还有什么办法可以攻击呢。这时候,我们想到了一种 中间人攻击 的手法。

所谓中间人攻击,就是我们DNS劫持后,我们自己不对用户提供Web服务,我们作为一个中转,当用户请求过来时,我们给用户提供一个假的证书(当然这个假证书肯定会导致用户这边发出警告,我们要通过其他办法来让用户继续访问这个网站); 这样我跟用户建立https连接,用户的信息对我来说是可解析的;用户跟我建立握手连接的过程中,我都顺便跟后方的目标服务器建立一个同样的https连接(此时我的角色是客户端);接下来,用户SSL握手的所有请求以及后续的内容请求,我都在中间负责做内容中转–即先解析出明文再传递给另外一端。

显然这种方法,是可以窃取到https的信息明文的。当然,唯一需要你做的,就是取用户电脑上帮他点一下 “继续浏览”…. 其实这就是mac上的charles对https抓包的原理, 所以如果你的手机需要抓包,则需要在手机上安装Charles的证书。 (如果你是windows用户,则fiddler的原理也是一样的)

更牛逼的攻击

当然,还有更牛逼的办法,比如httpsStrip等。具体可以展开更多的学习讨论了https://www.zhihu.com/question/22779469

charles的https抓包原理及修改跳一跳小游戏

charles解析https抓包的原理其实就是https的中间人攻击手法,只是我们作为开发人员,故意连接charles作为代理,哪怕它给我浏览器返回了一个假的证书(但我还是在浏览器装上了charles根证书来信任他)。 其原理如下图所示:

charles配置

下面就说下如何使用charles抓包:

  1. 首先下载charles
  2. 然后配置charles的代理

由于公司内网只能使用8080,所以我把mac上的监听端口设置为8080

  1. 然后让charles启动的代理作为我们手机的正向代理。只需在手机设置中将wifi配置代理ip为我们的mac IP,端口为charles监听的端口
    注意这一步需要手机跟mac处在同一个局域网中

  2. 配置完成后,手机网络访问其实已经被代理了,但此时还无法解析https包

  3. 在charles的Proxy菜单下找到SSL Proxy Setting. 配置上自己希望抓包的https域名。如果不配置的话,charles默认是不解析https包的.

  1. 由于charles的https抓包基于中间人劫持的原理,所以我们手机端需要添加charles根证书;

    点击图中的install on mobile device, charles会提示你如何进行安装:

    而charles代理服务器的证书正是由该根证书进行签名而来。 当然,由于不是系统默认支持的根证书,所以手机端需要将证书设置为信任(具体操作可百度)

  2. 证书安装完成之后就可以在charles里对https请求进行抓包了

其实通过charles代理和抓包,分析app的包内容之后,我们还可以写脚本来爬取某些app的数据库信息。

分析跳一跳的包

AES加密 AES是一个对称密码,旨在取代DES成为广泛使用的标准.

模拟发送请求

服务器返回:

1
{"myUserInfo":{"history_best_score":985,"times":1564,"headimg":"http://wx.qlogo.cn/mmhead/GhXrItMH8e6ud0UUkm72jYiafujcSgBB8lGSiaFwYJuao/96","week_best_score":985,"grade":5,"nickname":"sheldon","score_info":[],"hongbao_list":[]},"TecentInfo":{"base_resp":{"errcode":0,"ts":"1515477217926"}},"version":"2.0"}

欢迎使用我提供的Web版本进行修改: https://game.limefe.com/

Refer

图解 HTTPS:Charles 捕获 HTTPS 的原理
letsencrype
微信跳一跳刷分攻略
使用移动应用抓包神器
全站 HTTPS 与 CDN 加速如何完美共存
我们真的有必要全站 HTTPS 么?
手动获取我们所感兴趣网站的公钥证书
IOS手机https抓包
android手机https抓包
微信跳一跳万分攻(作)略(弊)
Charles工具抓包(HTTP或HTTPS)
使用Charles进行HTTPS抓包
抓取手机app的数据(摩拜单车)