一、介绍
SSRF(Server-side Request Forgery:服务器端请求伪造)它可以让攻击者在攻击者无法直接访问的网络资源上执行非法操作,例如向内部系统发起远程请求,从而可能导致敏感数据泄露或服务被滥用等风险。
攻击者可以通过构造恶意请求来欺骗服务器执行不安全的操作,例如:
访问内部网络设备的管理界面;
向内部系统发起远程请求;
扫描内部网络;
发起攻击性的端口扫描等行为。
二、原理
由于服务端提供了从其它服务器应用获取数据的功能且没有对目标地址做过滤与限制。
三、复现
1)端口探测
发现url地址,构造payload,探测3306端口
探测一个没有开放的端口
2)文件读取
3)请求外部地址
四、防御
输入验证:在进行任何网络请求之前,应针对输入数据进行有效性和安全性验证。可以使用URL白名单、输入前缀、DNS验证等技术来验证输入的URL是否合法。
限制协议和端口:阻止应用程序从执行危险操作的协议(如file协议)加载数据。应该限制应用程序能够访问的协议和路由器,以防止网络访问尝试进一步利用。
使用安全版本的API:使用具有安全检查机制的安全API,可以帮助防止SSRF的攻击,例如Amazon EC2 metadata API版本2包括IP地址过滤以及更多内容的相关安全性考虑。
使用安全的网络设备:防火墙(Firewalls)可以设置规则来限制网络流量。在可能的情况下,将重要网络设备放在专用网络上,并限制该网络上的入站和出站流量。此外,还可以使用DNS黑名单和IP白名单来增强网络设备的安全性。
隔离网络和服务器:通过隔离和限制网络和服务器可以尽量减少已知漏洞的影响。对于web服务器,应将权限配置到最小限度,以防止攻击者利用web服务器的漏洞,并使用应用程序防火墙(WAF)来检测和过滤恶意流量。
总的来说,就是要对服务器请求的资源进行合法性校验。