目录
一、SSRF漏洞简介
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,主要存在于服务器端的应用程序中。当应用程序允许用户输入外部系统URL时,若未对输入进行严格过滤或验证,攻击者可利用该漏洞,使服务器向任意地址发起请求,并获取目标地址的响应数据。SSRF漏洞常被用作跳板,攻击内网或外网的其他应用服务器。
想象一下,你有一辆遥控汽车,这辆汽车(服务器)可以通过遥控器(应用程序接口)接收指令,然后按照指令去执行任务,比如去某个地方(访问某个URL)并带回一些东西(获取数据)。正常情况下,你只允许遥控汽车在安全的区域内(合法的URL或IP范围)行驶,并且只执行你信任的任务。
然而,如果遥控器的设计存在缺陷(比如没有对输入的指令进行严格过滤),那么别人就可能通过遥控器发送恶意指令,让汽车去你原本不允许的地方(如内网服务器、本地文件系统或其他敏感资源),甚至可能会让汽车把一些重要的东西带回给其他人(比如读取敏感文件或泄露内网信息)。
二、SSRF漏洞的危害
-
钓鱼攻击:攻击者通过伪造合法网站的请求,诱导用户访问恶意链接,从而窃取用户信息或资金。
-
端口与资产发现:攻击者可利用SSRF扫描内网或外网的开放端口和服务,发现潜在目标。
-
读取本地文件:通过特定协议(如
file://
)读取服务器本地文件,如/etc/passwd
或C:/Windows/win.ini
。 -
内网攻击:结合其他漏洞,攻击内网中的其他机器,进一步扩大攻击范围。
三、SSRF中常见的URL伪协议
SSRF漏洞利用中,攻击者常使用以下伪协议绕过限制:
file://
:用于读取本地文件系统的内容。file:///etc/passwd
、file:///C:/Windows/win.ini
dict://
:字典服务器协议,可用于绕过某些限制。dict://evil.com:1337/
sftp://
:安全文件传输协议。sftp://evil.com:1337/
ldap://
、ldaps://
、ldapi://
:轻量级目录访问协议。ldap://localhost:1337/%0astats%0aquit
tftp://
:简单文件传输协议。tftp://evil.com:1337/TESTUDPPACKET
gopher://
:分布式文档传递服务。gopher://evil.com:1337/_Hi%0Assrf%0Atest
四、SSRF绕过方法
攻击者常通过以下方式绕过SSRF限制:
利用
@
符号绕过域名限制:http://www.baidu.com@10.10.10.10
可绕过对10.10.10.10
的限制。短网址绕过:使用短网址工具(如
https://dwz.cn/
)隐藏真实目标地址。IP地址进制转换:
127.0.0.1
可转换为八进制0177.0.0.1
、十六进制0x7f.0.0.1
或整数2130706433
。特殊域名:利用DNS解析工具(如
xip.io
)将任意IP地址伪装为合法域名。本地回环地址的其他表现形式:
http://127.0.0.1
、http://localhost
、http://127.255.255.254
、http://[::1]
。点分割符号替换:将
127.0.0.1
替换为127。0。0。1
。CRLF编码绕过:通过注入换行符(如
%0d%0a
)篡改HTTP头部。http://eval.com%0d%0aHOST:fuzz.com%0d%0a
利用封闭字母数字:将域名替换为特殊字符(如
ⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ
)。
五、SSRF漏洞的加固措施
-
禁止302跳转:限制服务器的跳转行为,防止攻击者利用跳转绕过限制。
-
过滤返回信息:验证服务器返回的数据是否符合预期,避免恶意数据泄露。
-
禁用高危协议:如
gopher
、dict
、ftp
、file
等,仅允许http/https
。 -
设置白名单:限制可访问的URL或IP范围,只允许访问经过验证的地址。
-
限制请求端口:仅允许访问常见端口(如80、443、8080),根据业务需求开放特定端口。
-
统一错误信息:避免通过错误信息暴露服务器的端口和服务信息。
六、总结
SSRF漏洞是一种严重的安全威胁,攻击者可通过多种手段利用该漏洞获取敏感信息或攻击内网资源。因此,开发者和安全人员需要充分了解SSRF的原理、危害和绕过方法,并采取有效的加固措施,防止SSRF漏洞被利用。