Webgoat之Insecure Communication

Insecure Login

该课程第一步需要抓取HTTP传送时的密码,如下图所示:
2

该过程直接用burpsuit抓取即可。

第二步要转换为HTTPS服务,再抓取。

这里有几个问题就需要说明了:

关于HTTPS

HTTP是我们平时用于浏览网页时客户端和服务器之间传输数据的一种传输协议,但是HTTP传输的数据都是未加密的,因此如果使用HTTP协议传输隐私信息的话,是不安全的。为了保证隐私数据,我们需要对正常数据进行加密,因此就有了SSL协议用于对HTTP协议传输的数据进行加密,于是诞生了HTTPS。而后面的TLS协议是SSL协议的升级版,我们现在使用的HTTPS实际上都是用的TLS协议。
HTTP的过程就是请求—响应的过程。而HTTPS要复杂一点,它需要同时验证客户端浏览器和网站端服务器。详细过程如下:

  1. 浏览器将自己支持的一套加密规则发送给网站服务器。

  2. 网站服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。(网站需要向浏览器证明自己的身份)

  3. 获得网站证书之后浏览器要做以下工作:

    a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。

    b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。

    c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

  4. 网站接收浏览器发来的数据之后要做以下的操作:

    a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

    b) 使用密码加密一段握手消息,发送给浏览器。

  5. 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256

其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。

TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。

如何用burpsuit抓取HTTPS

以上过程解释了为何不配置的话,用burpsuit是抓取不到HTTPS的。因为burpsuit相当于是在浏览器和服务器之间的中间人,数据都是经过它来做中间转发的,对于HTTPS协议而言,它是需要同时验证浏览器和服务器的,而浏览器传输数据的第一站是burpsuit,如果不在浏览器中添加hurpsuit的证书,浏览器不会信任它,所以与它之间的连接就建立不起来了。

关于burpsuit抓取HTTPS的配置可以见官网:[点击这里][https://support.portswigger.net/customer/portal/articles/1783075-installing-burp-s-ca-certificate-in-your-browser],需要注意的是要把代理设置为burpsuit后,才能访问http://burp网址,并且下载证书。

如何配置tomcat服务器为HTTPS

其实这只是配置服务器的单向认证的过程,将tomcat配置为支持HTTPS传输,就需要在HTTP基础上加一层协议进去。详细配置过程见这里

1
3
这张图片是tomcat里面conf里面server.xml配置文件中关于HTTPS的部分。

绝望

搞了两天都没有搞好,我已经绝望了。主要问题及流程是这样的:

  1. 首先是做到第二步改为HTTPS的请求后,页面不存在,后来发现是tomcat本身没有配置好,于是又找了一大串资料,把证书什么的,都弄好了,然后出现了HTTPS的页面,可以正常显示了。
  2. 然后用burpsiut抓包,提示错误,于是我又给浏览器装burpsuit的证书,终于可以抓SSL的包了。
  3. 抓到发现居然是明文,就把burpsuit和wireshark的原理弄清楚了。
  4. 然后换wireshark抓包,要解决的第一个问题是本地抓包的问题,后来终于解决了,可是对于https抓不到TSLV1.0的协议,只有一堆TCP的包
  5. 然后试着抓HTTPS百度的包,发现有TLSV1.0,那为何tomcat没有呢?又把单机变为双机,把自己的笔记本配置为服务器,把公司电脑当做客户端访问了。
  6. 搞了半天,还是没有发现原因在哪里,遂放弃。

剩下待的问题

为何wireshark抓已经配置成https的包之后,只有一堆TCP的包,而没有TSLV一类的协议包。求有大神看见的,也帮忙解答一下这究竟是为什么?


【版权声明】
本文首发于戚名钰的博客http://qimingyu.github.io/ ),欢迎转载,但是必须保留本文的署名戚名钰(包含链接)。如您有任何商业合作或者授权方面的协商,请给我留言:mingyuqi.java@qq.com
欢迎关注我的微信公众号:科技锐新

本文永久链接:http://qimingyu.github.io/2016/04/27/Webgoat之Insecure_Communication/

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章