SSRF简介
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF形成原因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
SSRF的验证
对于SSRF的验证可以通过DNSLog平台、个人VPS来进行验证
SSRF漏洞利用技巧
URL地址过滤的绕过
1)http://www.baidu.com@10.10.10.10与http://10.10.10.10 请求是相同的
2)ip地址转换成进制来访问:115.239.210.26 = 16373751032
如果WEB服务简单的过滤参数中获取的URL地址,没有判断真正访问的地址,是有可能被此两种方法绕过的。
SSRF在代码审计中的应用
ssrf攻击可能存在任何语言编写的应用,我们通过一些php实现的代码来作为样例分析。代码的大部分来自于真实的应用源码。
file_get_contents
这段代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。
fsockopen()
这段代码使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。
curl_exec()
这是另外一个很常见的实现。使用curl获取数据。
SSRF实战
下面以DoraBox中的SSRF漏洞的攻防做一个简单的测试演练
分析:
这里直接通过url来file_get_contents,存在SSRF漏洞~
利用:
请求一个Baidu
测试内部端口是否开放:
DNSLog平台做测试: