服务器端请求伪造(Server-Side Request Forgery,简称SSRF)是一种安全漏洞,通常出现在Web应用程序中。攻击者通过构造恶意请求,利用服务器端应用程序向攻击者选择的任意域发出HTTP请求,以便将服务器内部的资源暴露给外部,可能导致敏感数据泄露。
SSRF漏洞的原理基于应用程序对用户输入数据的不当信任。当应用程序允许用户控制某些请求的目标,但未正确验证和限制用户输入时,攻击者可以构造特殊的请求,让服务器去访问不应该被公开访问的资源。
Note:服务器提供了从其他服务器应用获取数据的功能,未对用户可控的目标地址进行过滤与限制,所以存在缺陷的Web应用就会成为攻击远程和本地服务器的代理。
SSRF(Server-Side Request Forgery)和CSRF(Cross-Site Request Forgery)都是Web安全领域中的常见攻击手段。尽管它们在攻击方式和目的上有一定的相似之处,但它们之间还是存在明显的区别。
Note:关于CSRF的详细介绍请参阅《「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解 》
一、区别:
攻击方向:
SSRF:攻击者利用受信任的服务器发起请求,通常针对内部服务或私有API。
CSRF:攻击者伪造受害者的身份,使其在不知情的情况下发起请求,针对的是受害者的站点。
攻击目标:
SSRF:攻击者旨在访问受限制的内部资源(从外网无法访问),如配置文件、数据库等。
CSRF:攻击者旨在欺骗受害者执行恶意操作,如转账、登录等。
攻击手段:
SSRF:利用服务器端的漏洞,结合特殊构造的请求,突破访问限制。
CSRF:利用受害者在浏览恶意网站时,对其进行跨站请求伪造,达到攻击目的。
危害程度:
SSRF:可能导致敏感数据泄露、服务端请求伪造等问题。
CSRF:可能导致受害者账户被盗、资金损失等问题。
二、联系:
都属于Web安全领域中的请求伪造攻击。
都利用了服务器或客户端的信任关系,实施攻击。
都需要对Web应用程序进行一定的安全加固和防护。
总之,SSRF和CSRF都是Web安全领域中较为严重的攻击手段。对于开发者来说,了解它们的原理和特点,才能更好地防范和应对这些攻击,保障网站和用户的安全。在实际项目中,应加强对用户输入的验证和过滤、限制请求目标、开启HTTP头限制、加强日志监控等安全措施。同时,定期进行安全审计,发现并修复潜在的安全漏洞。
SSRF漏洞可以从以下两个方向切入:
探索Web应用程序功能
探索URL关键字
主要关键字有:share、url、display、domain、wap、src、source、target。
Note:可以通过file协议读取本地敏感数据文件。
实验室环境为支持库存检查功能的购物网站,存在SSRF漏洞,可以利用漏洞来使用管理员权限删除普通用户。环境地址:https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost。
当用户查看项目的库存状态时,其浏览器会发出以下请求:
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
这导致服务器向指定的URL发出请求,检索库存状态,并将其返回给用户。
在此示例中,攻击者可以修改请求以指定服务器本地的URL:
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://localhost/admin
服务器获取/admin请求返回的内容并将其返回给用户。攻击者此时就获取了在外网不能直接访问的内部服务器的敏感内容。
从上图可以看到通过Burp Suite将检查库存的URL篡改为http://localhost/admin
后,服务器返回了敏感信息,通过敏感信息可以看到删除用户的接口/admin/delete?username=wiener
,如果再将URL篡改为此接口地址就可以删除用户wiener。
Note:因为对/admin URL的请求来自本地机器,所以会绕过正常的访问控制。应用程序授予对管理功能的完全访问权限,因为请求来自受信任的位置。
前期回顾
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解
[1] https://portswigger.net/web-security/ssrf