ssrf
ssrf中的Url白名单检测的绕过
一些应用程序只允许匹配上白名单范围内的输入,过滤器可能会在输入的开头或包含在输入中查找匹配项。您可以通过利用 URL 解析中的不一致来绕过此过滤器。URL 规范包含了许多在实现 URL 特定解析和验证时容易被忽略的特性:
@的用法
HTTP 基本身份认证特性允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,例如:https://expected-host:fakepassword@evil-host,这里的@是主域名解析,即@符号后面直接跟域名,@符号前面的内容会被视为用户名,相当于以 expected-host:fakepassword 的用户名访问 evil-host,至于用户名是啥不重要,关键是@后面的才是解析的地址!
#的用法
在 URL 中,#号后面的内容被称为片段标识符(fragment identifier),在客户端浏览器中,#及其后面的内容不会被发送到服务器。比如,访问http://example.com/page#fragment 时,浏览器只会向服务器发送 http://example.com/page,#fragment部分**只在客户端解析**,故可以借助https://evil-host#expected-host 绕过 url.contain(“expected-host”) 格式的域名白名单检测并最终访问 evil-host;
可以利用 DNS 命名层次结构将所需的输入放入您控制的标准 DNS 名称中。例如:https://expected-host.evil-host;
SSRF 302 跳转
使用场景
- 黑名单或白名单限制:当某些 URL 被列入黑名单禁止访问,或者只有白名单中的 URL 才能被访问时,通过 302 跳转可以绕过这些限制。例如,目标 URL 被限制访问,但通过一个合法的跳转服务来间接访问目标 URL,可能会绕过检测。
- 禁止访问某些 IP:比如内网 IP 被禁止直接访问,但通过外部的跳转服务或特殊的域名解析,可以将请求转发到内网 IP 对应的资源上。
- 协议限制:某些系统可能只允许特定协议的请求,通过 302 跳转可以将请求从一种协议转换为另一种协议,从而绕过协议限制。
实现方式
- 短网址服务:利用短网址服务(如 bit.ly、tinyurl 等)将目标 URL 缩短,然后通过短网址来跳转到目标 URL。这种方式可以隐藏目标 URL 的真实地址,增加绕过检测的可能性。
- xip.io:这是一个特殊的域名解析服务,可以将域名解析到指定的 IP 地址。例如,
127.0.0.1.xip.io会被解析为127.0.0.1,但看起来像是一个合法的域名,从而可能绕过对 IP 的限制。 - 外部跳转服务:使用像 r3dir.me 这样的外部跳转服务,将请求转发到目标 URL。不过,如果目标 URL 的 IP 被直接过滤(如
127.0.0.1),这种方法可能就无法奏效。 - 自建跳转服务:在自己的服务器上搭建一个简单的跳转服务,通过自定义的逻辑来处理请求并转发到目标 URL。这种方式可以更好地控制跳转逻辑,但需要一定的技术能力和服务器资源。
DNS重绑定攻击(DNS Rebinding Attack)
DNS是Domain Name Service的缩写,计算机域名服务器,在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,而域名解析需要由专门的域名解析服务器来完成,这就是DNS域名服务器。
有两次对域名进行DNS解析,
第一次是用于检测是否是合法ip
第二次是在服务端请求URL(要第一次通过检测才行)——在这里做手脚,更换ip(eg:改为回环地址——127.0.0.1)
原理:利用服务器两次解析同一域名的短暂间隙,更换域名背后的ip,达到突破同源策略或绕过waf进行ssrf的目的
(——用到DNS中的机制TTL)——由于TTL不知道,所以在进行攻击时,要进行多次,才有可能成功
在TTL结束,缓存失效后,更换URL对应的IP,重新访问URL,就成功了
因为是同一个域名,浏览器会认为是安全的
https://lock.cmpxchg8b.com/rebinder.html——提供TTL为0的DNS解析——有运气问题,
(A,B地址无区别的)——一个公网地址,一个私网地址,会自动安排一前一后的(运气问题的原因)
为什么可以两次解析?
- DNS解析的动态性:DNS允许域名的IP地址在短时间内被更改,攻击者可以利用这一点,通过动态DNS服务快速更新DNS记录。
- 浏览器缓存机制:浏览器会缓存DNS解析结果,但缓存记录会在TTL值到期后失效。攻击者可以通过技术手段触发浏览器重新查询DNS,从而实现第二次解析。
- 浏览器的信任机制:浏览器会根据域名来判断访问的合法性,而不是直接根据IP地址。即使域名被解析为本地网络中的IP地址,浏览器仍然会认为这是一个合法的跨域请求,从而允许访问。




