前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用HTTPS协议打内网 SSRF新姿势

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

原创
作者头像
WgpSec
修改2021-03-01 14:52:30
9180
修改2021-03-01 14:52:30
举报
文章被收录于专栏:狼组安全团队狼组安全团队

声明

本文作者:wendell 本文字数:1700

阅读时长:17分钟

附件/链接:点击查看原文下载

声明:请勿用作违法用途,否则后果自负

本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载

前言

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记录

代码语言:javascript
复制
dns.example.com A 300 <DNS_IP>
tlstest.example.com NS 300 dns.example.com

启动dns服务器

代码语言:javascript
复制
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服务,注意证书要自己配置,

代码语言:javascript
复制
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访问

代码语言:javascript
复制
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/Wednesday/us-20-Maddux-When-TLS-Hacks-You.pdf

https://cqureacademy.com/conference-summary/bhus2020-1-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协议>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tls1.2握手和会话复用
  • dns重绑定攻击
  • AAAA记录和A记录
  • ip改变的方法
    • dns重绑定
      • AAAA和A记录
      相关产品与服务
      网站渗透测试
      网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档