安全矩阵

 找回密码
 立即注册
搜索
查看: 6532|回复: 0

利用HTTPS协议打内网 SSRF新姿势

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-2-18 22:38:27 | 显示全部楼层 |阅读模式
原文链接:利用HTTPS协议打内网 SSRF新姿势

前言

When TLS Hacks You出了一个利用tls进行ssrf的姿势,而且赵师傅在(https://www.zhaoj.in/read-6681.html)也做了一些新研究,很早之前就想学习一下这个,不过一直咕,趁现在空下来了,研究一下.
这个是一个ssrf的新姿势,如果可以利用的话,只要对方服务器可以利用https协议,就可以打内网服务.
但是打过去的payload会有一些垃圾字符,常见可以利用的是memcached,ftp和smtp,而redis据原作者所说,因为0字节会截断,不能攻击

一、 前置知识

tls1.2握手和会话复用
上面这个图简单的描述了TLS握手过程,每个框都是一个记录,多个记录组成一个TCP包发送,在tcp握手之后,经过4个消息,就可以完成TLS握手过程
在ServerHello消息中,

会有一个sessionID字段,用于再次连接时的会话复用,
会话复用时,客户端发送发生首次连接时保存的来自服务器的会话id,找到后就直接用主密钥恢复会话状态,跳过证书验证和密钥交换阶段.

dns重绑定攻击当dns的TTL(生存时间)是一个非常小的值的时候,DNS回复仅在短时间内有效,攻击者DNS首次回复了有效的IP的地址,第二次恢复恶意地址,就会造成DNS重绑定攻击
AAAA记录和A记录AAAA记录是域名的ipv6地址,A记录是域名的ipv4地址,可能因为现在对ipv6的支持问题,
curl会优先请求AAAA记录的地址,如果无法连接,则会连接ipv4地址

二、攻击原理


概述

如上图,在TSL首次握手时,session_id来自服务端,而后在一次新的连接时,在客户端会进行会话复用时,这时,session_id由客户端首先发给服务端.
原作者提出,在curl对会话复用的判断中,只判断了目标服务的域名、端口以及协议是否一致,没有判断ip

如果服务器是恶意攻击者控制的,session_id被设置成攻击者想发送的恶意payload,在客户端第二次请求时,将ip改成127.0.0.1, 既可利用恶意的session_id攻击客户端本地的服务,
恶意的TLS服务器,只要一个正常的TLS服务器把sessionid改掉就好,现在问题是如何把客户端在第二次请求时目的ip改掉.这里有两种姿势.
ip改变的方法dns重绑定
一个很简单的想法就是利用dns重绑定,在第二次请求dns解析时改变ip,这个也是When TLS Hacks You那篇议题原作者提出的方法,赵师傅在文章中提到curl对dns做了缓存,导致第二次请求时没有进行dns查询,导致无法利用,但其实原作在中间还加了一些处理,恶意的TLS服务端永远只返回的301跳转,并且在返回前会sleep一段时间,curl在一次次的301跳转中耗尽dns缓存的时间,会重新进行dns查询.
这里有一个坑,按照原作者github搭出来的话,301跳转以后就会报一个unexpected message的错误,

导致无法一直301跳转进行利用,最终我利用赵师傅改的tlslite-ng,再次魔改,才完成复现.

可以看到这里跳转了5次,才改变了ip
AAAA和A记录
赵师傅提出了一个新的改ip的姿势,
因为curl对AAAA和A记录的特殊处理,我们只要设置AAAA记录返回一个服务器ipv6的ip,A记录返回127.0.0.1,,并且在服务器第二次访问时,服务端下线.
第一次服务器访问ipv6地址,在服务器第二次请求时访问ipv6的地址,发现无法无法访问,会转而请求ipv4地址,造成ip改变
具体操作可以参考赵师傅的文章.

三、复现

(文末附源码下载)
配置域名的ns和a记录

  1. dns.example.com A 300 <DNS_IP>
  2. tlstest.example.com NS 300 dns.example.com
复制代码
启动dns服务器
  1. python3 alternate-dns.py tlstest.example.com,127.0.0.1 -b 0.0.0.0 -t tlsserverip
复制代码

127.0.0.1是要进行ssrf攻击目标的ip,这里我为了方便抓包设置了118.*的ip
然后在tlslite-ng/tlslite目录,启动TLS服务,注意证书要自己配置,
  1. python3 tls.py server --max-ver tls1.2 -k 2_tlstest111.wetolink.com.key -c 1_tlstest111.wetolink.com_bundle.crt 0.0.0.0:11212
复制代码


这时受害者主机以http访问

curl -4 -kvL https://tlstest.example.com:11212
就会被攻击,
注意要允许301跳转,并且使用tls1.2.
可以看到在多次跳转之后,curl改变了访问ip

在恶意的session_id被成功发往服务端




四、 影响范围


原作者pdf的图就说的挺清楚的,下图是受影响的客户端,

下图是可以攻击的目标,因为会有一些垃圾字符的干扰,Memcached的利用是比较多的


五、 参考资料


https://www.blackhat.com/eu-20/briefings/schedule/index.html
https://i.blackhat.com/USA-20/We ... n-TLS-Hacks-You.pdf
https://cqureacademy.com/confere ... -when-tls-hacks-you
https://github.com/jmdx/TLS-poison
https://www.zhaoj.in/read-6681.html#i-5
https://mp.weixin.qq.com/s/GT3Wlu_2-Ycf_nhWz_z9Vw
极客时间<透视HTTP协议>



















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 23:23 , Processed in 0.014387 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表