什么是SSRF
服务器端请求伪造(SSRF)是一种网络安全漏洞,攻击者可以通过该漏洞让服务器端的应用程序向意想不到的地方发送请求。
例如,攻击者通过SSRF通过服务器连接到组织基础结构中的内部服务。或者是让服务器和任意外部系统强制连接,这将导致证书等敏感数据泄漏。
SSRF attacks against the server 针对服务器的SSRF攻击
针对服务器的SSRF攻击,攻击者可以通过应用程序向服务器发起经由服务器回路网络接口的请求。例如使用主机名为“127.0.0.1”或“localhost”的URL。
比如说,在购物网站上,查询货物的库存量。请求地址为:stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
攻击者可以把请求地址修改为stockApi=http://localhost/admin
。则服务器会把/admin地址下的内容返回给攻击者。与直接访问/admin不同,由于攻击者是通过本地机器访问的/admin,这会绕过常规的访问控制,因为这个请求看起来是从本地受信机器发起的,所以将会获取到管理员相关权限操作授权。
为什么程序可以执行这样操作呢,可能有以下原因
- 访问控制可能是在程序前端的其他组件里实现的,当一个连接直接从后端连入服务器的时候,访问控制被绕过了。
- 出于便于恢复的考虑。应用或许允许来自本地的机器未经登陆即可访问,这样当管理员凭证丢失的时候也可以对系统进行恢复。这是事先假设了只有完全受信用户才能直接从服务器本地发起连接。
- 管理员接口可能绑定在其他不通的端口上,正常情况下用户是不能直接访问的。
出于这些原因,来自本地的连接可能和其他常规连接有不同的响应方法,这就使得SSRF成为一个严重的漏洞。