SSRF DNS rebind绕过
摘自http://www.mottoin.com/95734.html
0x00 传统SSRF过滤
传统SSRF过滤器的方式大致是以下几个步骤:
- 获取到输入的URL,从该URL中提取host
- 对该host进行DNS解析,获取到解析的IP
- 检测该IP是否是合法的,比如是否是私有IP等
- 如果IP检测为合法的,则进入curl的阶段发包
乍一看,这种过滤方式似乎没有什么问题。
我们从DNS解析的角度看,该检测方式一共有两次,第一次是步骤2中对该host进行DNS解析,第二次是使用CURL发包的时候进行解析。这两次DNS解析是有时间差的,我们可以使用这个时间差进行绕过。
0x01 DNS Rebinding绕过
DNS Rebinding不是啥新技术了,之前有人用这个技术来做SOP绕过,我们先来看一下具体流程。
攻击者需要自己持有一个域名,然后将这个域名解析指向自己的DNS Server,在该server上写个解析服务,每次返回不同的解析结果。
比如:
你可以看到,这个解析服务每次返回的结果不同,第一次请求DNS查询,结果返回的是101.191.60.117,是一个合法的公网IP,但是第二次请求时,变成了私有IP 10.36.5.215。注意到,这两条记录的ttl都是0,这是为了防止有DNS服务器对解析结果进行缓存。
说到这里,基本就可以道出绕过原理了。从传统SSRF过滤思路来看,DNS解析一共分两次,其中第一次是至关重要的有效性检测,第二次则是具体发起的请求。我们利用DNS Rebinding技术,在第一次校验IP的时候返回一个合法的IP,在真实发起请求的时候,返回我们真正想要访问的内网IP即可。
356688
5月26日 下午9:22
拜读了,多多学习总是好的!