服务器端请求伪造 (也称为SSRF) 是一个web安全漏洞,它允许攻击者诱导服务器端应用程序向一个意想不到的位置发出请求。
在典型的SSRF攻击中,攻击者可以让服务器连接到内部服务。在其他情况下,还能让服务器连接到任意外部系统。
只要是能够发起网络请求的地方就可能有SSRF漏洞,例如:
请求某个接口网站的数据,如获取文本内容、图片、软件等
在线识图
分享,订阅
小实验可以去Server-side request forgery (SSRF)看一下还是蛮全的。
可以使用的协议里大部分都是php的,除掉这一部分剩下的常见的大概就gopher和file了吧。
关于gophper协议可以看Gopher协议在SSRF漏洞中的深入研究万金油想怎么打怎么打。
需要注意的是满足版本要求的才能使用
协议 | PHP | Java | ASP.NT |
---|---|---|---|
gopher | --wite-curlwrappers 且版本$\geq$5.3 | JDK$<$1.7 | 版本$<$3 |
file协议一般就是拿来读取本地的文件file://path/file_name
防御SSRF通常的机制是使用白名单和黑名单,白名单相对于黑名单来说防御效果更好。
白名单绕过
白名单通常的方法
找到一个重定向漏洞**(open redirect vulnerability)👉Open redirect以python举例res.redirect(req.query.redirect_url ? req.query.redirect_url : '/')
不完全的编码造成了重定向漏洞**
如果白名单没有正确的配置,可以使用在允许的域名里加入恶意子域名 victim.com.evil.com
或者evil.com/victim.com
可以在URL中使用@
将凭证嵌入到主机名之前 victim.com@evil.com
可以在URL中使用#
表示一个URL片段 victim.com#evil.com
将上述技术结合起来
在Orange Tsai研究员在黑帽大会上的演讲A New Era of SSRF中介绍了URL的参数解析。
黑名单绕过
黑名单相比之下就有更多的方法了,黑名单常常限制直接对内网的访问。
DNS解析绕过
127.0.0.1
达到绕过127.0.0.1
<?php header(“location: http://127.0.0.1"); ?>
http://dlj.bz/kA47FD
利用短链地址ipv6
地址
有些防护可能只配置在了ipv4
上而没有配置在ipv6
上,当然前提是目标支持ipv6
地址。有下面几个ipv6
地址查询网站
不同的编码
127.0.0.1 -> 0x7f.0x0.0x0.0x1
127.0.0.1 -> 0177.0.0.01
127.0.0.1 -> 01111111.00000000.00000000.00000001
localhost -> %6c%6f%63%61%6c%68%6f%73%74
127.0.0.1 -> 0177.0.0.0x1