「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解

1. 简介

服务器端请求伪造(Server-Side Request Forgery,简称SSRF)是一种安全漏洞,通常出现在Web应用程序中。攻击者通过构造恶意请求,利用服务器端应用程序向攻击者选择的任意域发出HTTP请求,以便将服务器内部的资源暴露给外部,可能导致敏感数据泄露。

2. 原理

SSRF漏洞的原理基于应用程序对用户输入数据的不当信任。当应用程序允许用户控制某些请求的目标,但未正确验证和限制用户输入时,攻击者可以构造特殊的请求,让服务器去访问不应该被公开访问的资源。

「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解_第1张图片

Note:服务器提供了从其他服务器应用获取数据的功能,未对用户可控的目标地址进行过滤与限制,所以存在缺陷的Web应用就会成为攻击远程和本地服务器的代理。

3. SSRF 与CSRF的区别与联系

SSRF(Server-Side Request Forgery)和CSRF(Cross-Site Request Forgery)都是Web安全领域中的常见攻击手段。尽管它们在攻击方式和目的上有一定的相似之处,但它们之间还是存在明显的区别。

Note:关于CSRF的详细介绍请参阅《「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解 》

一、区别:

  1. 攻击方向:
    SSRF:攻击者利用受信任的服务器发起请求,通常针对内部服务或私有API。
    CSRF:攻击者伪造受害者的身份,使其在不知情的情况下发起请求,针对的是受害者的站点。

  2. 攻击目标:
    SSRF:攻击者旨在访问受限制的内部资源(从外网无法访问),如配置文件、数据库等。
    CSRF:攻击者旨在欺骗受害者执行恶意操作,如转账、登录等。

  3. 攻击手段:
    SSRF:利用服务器端的漏洞,结合特殊构造的请求,突破访问限制。
    CSRF:利用受害者在浏览恶意网站时,对其进行跨站请求伪造,达到攻击目的。

  4. 危害程度:
    SSRF:可能导致敏感数据泄露、服务端请求伪造等问题。
    CSRF:可能导致受害者账户被盗、资金损失等问题。

二、联系:

  1. 都属于Web安全领域中的请求伪造攻击。

  2. 都利用了服务器或客户端的信任关系,实施攻击。

  3. 都需要对Web应用程序进行一定的安全加固和防护。

总之,SSRF和CSRF都是Web安全领域中较为严重的攻击手段。对于开发者来说,了解它们的原理和特点,才能更好地防范和应对这些攻击,保障网站和用户的安全。在实际项目中,应加强对用户输入的验证和过滤、限制请求目标、开启HTTP头限制、加强日志监控等安全措施。同时,定期进行安全审计,发现并修复潜在的安全漏洞。

4. 攻击思路

SSRF漏洞可以从以下两个方向切入:

  1. 探索Web应用程序功能

    • 分享:通过URL地址分享网页内容;
    • 图片、文章收藏功能;
    • 图片加载与下载:通过URL地址加载或下载图片;
    • 在线翻译:通过URL地址翻译对应文本的内容,比如有道、百度翻译、谷歌翻译;
    • 转码服务:通过URL地址把原地址的网页内容优化为手机屏幕浏览。
    • 未公开的API实现;
    • 其他调用URL的功能。
  2. 探索URL关键字
    主要关键字有:share、url、display、domain、wap、src、source、target。

5. 防御手段

  • 对服务器访问的URL进行限制:比如检查IP是否为内网IP,仅允许对某些特定域名的访问;
  • 限制重定向;
  • 限制请求的端口为Http常用端口:如80,8080,443,8443;
  • 禁用不需要的协议(如ftp,file协议),仅允许http(s)请求。

    Note:可以通过file协议读取本地敏感数据文件。

6. 攻击案例:针对本地服务器的攻击

6.1. 环境介绍

实验室环境为支持库存检查功能的购物网站,存在SSRF漏洞,可以利用漏洞来使用管理员权限删除普通用户。环境地址:https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost。

6.2. 攻击细节

当用户查看项目的库存状态时,其浏览器会发出以下请求:

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发出请求,检索库存状态,并将其返回给用户。
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解_第2张图片

在此示例中,攻击者可以修改请求以指定服务器本地的URL:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin

服务器获取/admin请求返回的内容并将其返回给用户。攻击者此时就获取了在外网不能直接访问的内部服务器的敏感内容。
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解_第3张图片
从上图可以看到通过Burp Suite将检查库存的URL篡改为http://localhost/admin后,服务器返回了敏感信息,通过敏感信息可以看到删除用户的接口/admin/delete?username=wiener,如果再将URL篡改为此接口地址就可以删除用户wiener。

Note:因为对/admin URL的请求来自本地机器,所以会绕过正常的访问控制。应用程序授予对管理功能的完全访问权限,因为请求来自受信任的位置。


前期回顾
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

7. 参考

[1] https://portswigger.net/web-security/ssrf

你可能感兴趣的:(网络安全,#,渗透测试,渗透测试,web安全)