SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。
很多Web应用都提供了从其他的服务器上获取数据的功能,根据用户指定的URL,Web应用可以获取图片、下载文件、读取文件内容等。这种功能如果被恶意使用,将导致存在缺陷的Web应用被作为代理通道去攻击本地或远程服务器。这种形式的攻击被称为服务端请求伪造攻击。
一般情况下,SSRF攻击的目标是外网无法访问的内部系统。


文章目录

  • 前言
  • 一、漏洞原理
  • 二、SSRF挖掘技巧
  • 三、常见的SSRF攻击
    • 3.1、针对服务器本身的SSRF攻击
    • 3.2、针对其他后端系统的SSRF攻击
    • 3.3、端口扫描
    • 3.4、对内网web应用进行指纹识别及攻击其中存在漏洞的应用
    • 3.5、文件读取和命令执行
  • 四、绕过SSRF的常见防御
    • 4.1、绕过利用黑名单防御
    • 4.2、绕过利用白名单的防御
    • 3、通过开放重定向绕过SSRF过滤器
  • 五、SSRF防御

前言


一、漏洞原理

SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。

主要攻击方式:
1.对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或者本地的应用程序。
3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹),对资产信息进行识别。
4.利用file协议读取本地文件。
5.攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击等。

比如,一个正常的Web应用本应该从指定URL获取网页文本内容或加载指定地址的图片,而攻击者利用漏洞伪造服务器端发起请求,从而突破了客户端获取不到数据的限制,如内网资源、服务器本地资源等。

如下代码:

<?php$url=$_GET['url'];echo file_get_contents($url);
?>

这段代码使用file_get_contents函数从用户指定的URL获取图片并展示给用户。此时如果攻击者提交如下payload,就可以获取到内网主机HTTP服务8000端口的开放情况(http://example.com/ssrf.php?url=http:192.168.209.134:8000)


二、SSRF挖掘技巧

目前常见的漏洞挖掘方式有两种:
1、从web功能上挖掘
①分享:通过url地址分享网页内容
②转码服务
③在线翻译
④图片的下载与加载
⑤图片、文章收藏功能
⑥未公开的API实现及调用URL的功能                        
2、从URL关键字挖掘
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain……


三、常见的SSRF攻击

SSRF攻击通常利用信任关系来进行攻击并执行未经授权的操作。这些信任关系可能与服务器本身有关,也可能与同一系统内的其他后端系统有关。

3.1、针对服务器本身的SSRF攻击

在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求。通常,这将涉及为URL提供一个主机名,例如127.0.0.1(指向回送适配器的保留IP地址)或localhost(同一适配器的常用名称)。

例如:一个购物应用程序,该应用程序使用户可以查看特定商店中某商品是否有库存。为了提供库存信息,应用程序必须根据所涉及的产品和商店查询各种后端REST API。该功能是通过将URL通过前端HTTP请求传递到相关的后端API端点来实现的。因此,当用户查看某件商品的库存状态时,他们的浏览器会发出如下请求:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118stockApi=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: 118stockApi=http://localhost/admin

在这里,服务器将获取/admin的内容并将其返回给用户。

现在攻击者可以直接访问/admin;但是,通常只有适当的经过身份验证的用户才能访问管理功能。因此,直接访问URL时将不会看到任何有价值的内容。但是,当对/admin的请求来自本地计算机时,将绕过常规的访问控制,该应用程序授予对管理功能的完全访问权限,因为该请求来自受信任的位置。

为什么应用程序会以这种方式运行,并且隐式信任来自本地计算机的请求?发生这种情况可能有多种原因:

1、该访问控制检查可能会在应用服务器的前面,利用一个不同的组件来实现,与服务器本身建立连接后,将绕过检查。
2、为了灾难恢复的目的,该应用程序可能允许无需登录即可对本地计算机上的任何用户进行管理访问,这为管理员提供了一种在丢失凭据的情况下恢复系统的方法。这里假设是来自服务器本身的用户才能完全受信任。
3、管理界面可能正在侦听的端口号与主应用程序不同,因此用户可能无法直接访问。

在这种信任关系中,由于来自本地计算机的请求与普通请求的处理方式不同,这些信任关系会使SSRF成为严重漏洞。

3.2、针对其他后端系统的SSRF攻击

SSRF引起的另一种信任关系是:服务器能够与用户无法直接访问的其他后端系统进行交互,这些系统通常具有不可路由的专用IP地址。由于后端系统通常受网络拓扑保护,因此它们的安全状态较弱。在许多情况下,内部后端系统包含敏感功能,能够与该系统进行交互的任何人都可以在不进行身份验证的情况下对其进行访问。

在前面的示例中,假设在后端URL处有一个管理界面 https://192.168.0.68/admin。在这里,攻击者可以通过提交以下请求来利用SSRF漏洞来访问管理界面:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118stockApi=http://192.168.0.68/admin

3.3、端口扫描

http://example.com/ssrf.php?url=http:ip:21/
http://example.com/ssrf.php?url=http:ip:443/
http://example.com/ssrf.php?url=http:ip:80/
http://example.com/ssrf.php?url=http:ip:3306/等

我们可以通过响应时间、返回的错误信息、返回的服务Banner信息、响应时间等来对端口开放情况进行给判断。

3.4、对内网web应用进行指纹识别及攻击其中存在漏洞的应用

大多数web应用都有一些独特的文件和目录,通过这些文件可以识别出应用的类型,甚至详细的版本。基于此特点可利用SSRF漏洞对内网Web应用进行指纹识别,如下Payload可以识别主机是否安装了WordPress:

http://example.com/ssrf.php?url=https%3A%2F%2F127.0.0.1%3A443%2Fwp-content%2Fthemes%2Fdefault%2Fimages%2Faudio.jpg

得到指纹后,便能有针对性地对其存在的漏洞进行利用,如下payload展示了如何利用SSRF漏洞攻击内网的JBOSS应用:

http://example.com/ssrf.php?url=http%3A%2F%2F127.0.0.1%3A8080%2Fjmx-console%2FHtmlAdaptor%3Faction%3DinvokeOp%26name%3Djboss.s

3.5、文件读取和命令执行

1、文件读取
如果攻击者指定了file协议,则可通过file协议来读取服务器上的文件内容,如下:

http://example.com/ssrf.php?url=file:///etc/passwd

2、命令执行
例如PHP环境下,利用expect协议执行系统命令,如下:

http://example.com/ssrf.php?url=expect://id

四、绕过SSRF的常见防御

4.1、绕过利用黑名单防御

一些应用程序阻止包含主机名(如127.0.0.1和localhost)或敏感URL(如/admin)的输入/admin。在这种情况下,绕过方法如下:

1、替代IP127.0.0.1,例如2130706433、017700000001、127.1。
2、注册您自己的域名,该域名解析为127.0.0.1。您可以spoofed.burpcollaborator.net用于此目的。
3、使用URL编码或大小写变化对阻塞的字符串进行混淆。

4.2、绕过利用白名单的防御

某些应用程序仅允许输入匹配,以允许值开头或包含允许值的白名单的输入。在这种情况下,您有时可以利用URL解析中的不一致来绕过过滤器。

URL规范包含许多功能,在实现URL的临时分析和验证时可能会被忽略:

1、使用@字符在主机名之前的URL中嵌入凭据。例如:https://expected-host@evil-host。
2、使用该#字符来指示URL片段。例如:https://evil-host#expected-host。
3、利用DNS命名层次结构将所需的输入放入DNS名称中。例如:https://expected-host.evil-host。
4、使用URL编码字符来混淆URL解析代码,如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则特别有用。
5、这些技术可以组合在一起使用。

3、通过开放重定向绕过SSRF过滤器

通过利用开放重定向漏洞,有时可以绕过任何基于过滤器的防御。

假设严格验证了用户提交的URL,以防止恶意利用SSRF行为,但是,允许使用URL的应用程序包含一个打开的重定向漏洞。提供用于使后端HTTP请求支持重定向的API,可以构造一个满足过滤条件的URL,并导致将请求重定向到所需的后端目标。

例如,假设应用程序包含一个开放重定向漏洞,其中包含以下URL:/product/nextProduct?currentProductId=6&path=http://evil-user.net返回重定向到:http://evil-user.net

可以利用开放重定向漏洞绕过,并按如下方式利用SSRF漏洞:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

这种SSRF漏洞之所以有效,是因为应用程序首先验证了提供的stockAPIURL是否在允许的域上,然后,应用程序提供的URL,触发重定向,并向攻击者选择的内部URL发出请求。


五、SSRF防御

SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。
1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息;
3、禁止不常使用的端口;
4、限制不能访问内网的IP,防止对内网进行攻击;
5、对于DNS重绑定,使用DNS缓存或者Host白名单。

web渗透测试----15、SSRF漏洞(服务端请求伪造漏洞)相关推荐

  1. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程...

    一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...

  2. 【网络安全工程师面试】—SSRF服务端请求伪造漏洞及利用方法

    目录 4.4. SSRF 4.4.1. 简介 4.4.1.1. 漏洞危害 4.4.2. 利用方式 4.4.3. 相关危险函数 4.4.4. 过滤绕过 4.4.4.1. 更改IP地址写法 4.4.4.2 ...

  3. Web Hacking 101 中文版 十七、服务端请求伪造

    十七.服务端请求伪造 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 服务端请求伪造,或者 SSRF,是一种类型,它允许攻击者使用目标服务器来代表攻击者自己 ...

  4. SSRF(服务端请求伪造)

    转载于:https://www.cnblogs.com/Vinson404/p/8604297.html

  5. 渗透测试-SSRF服务端请求伪造(Server-Side Request Forgery)

    SSRF服务端请求伪造 漏洞原理 本次靶场的设计拓扑图 x.x.x.x:8080 - 判断 SSRF 是否存在 172.72.23.21 - SSRF 获取本地信息 172.72.23.1/24 - ...

  6. SSRF服务端请求伪造

    SSRF服务端请求伪造 背景 在做一个需求,需要通过url与库内数据做匹配,然后记录匹配结果.但是部分url是重定向的url,重定向之前的url与库中无法匹配,重定向之后的url可以与库中匹配,所以代 ...

  7. 【burpsuite安全练兵场-服务端9】服务端请求伪造SSRF漏洞-7个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  8. 最新系统漏洞--YzmCMS服务器端请求伪造漏洞

    最新系统漏洞2021年10月21日 受影响系统: YzmCMS YzmCMS 5.8 描述: CVE(CAN) ID: CVE-2020-35970 YzmCMS是一款基于YZMPHP开发的一套轻量级 ...

  9. 最新系统漏洞--MipCMS服务器端请求伪造漏洞

    最新系统漏洞2021年11月9日 受影响系统: MipCMS MipCMS 5.0.1 描述: MipCMS是一个应用软件.一套基于百度移动加速器MIP而开发的内容管理系统,同时也是一套SEO建站系统 ...

最新文章

  1. 将智能合约部署到Rinkeby测试链上
  2. 修改属性页CPropertyPage标题
  3. java 生成 tar.gz_一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包...
  4. oracle报错00838,oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  5. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码
  6. 图解形态学Morphological
  7. 上海道宁联合德国think-cell,为您提供更便捷高效的PowerPoint插件
  8. 基于javaweb的驾校车辆教练预约系统ssm+Vue
  9. 给宝宝做一个cocos免费游戏-故事和开始界面
  10. android人脸抠图,人脸框抠图如何实现
  11. 个人博客logo如何设计?案例合集参考
  12. 中富之命能有多少钱_算命中富 算命的说我是中富命,谁可以帮忙解释下
  13. signature=de4fefc549f99f0b0c76a2cec8e340bf,Diagnostics based on faulty signature
  14. pboot 将编码转换为实体html_java转换 HTML字符实体,java特殊字符转义字符串
  15. 【拜小白opencv】45-二维H-S直方图绘制----calcHist()函数、minMaxLoc()函数
  16. buuctf rsarsa·wp
  17. 【蓝桥杯】单片机精确延时——软件延时
  18. 给大学生的18条建议
  19. 02-Java后端框架-SSM简单总结
  20. Tiki 19.1 发布,开源 Wiki 引擎

热门文章

  1. MacBook Pro 禁用显卡
  2. 服务器ldf文件,数据库清除日志文件(LDF文件过大)
  3. ctfshow 文件包含 web 78 -117
  4. 名侦探柯南java_DW网页设计作业(名侦探柯南)
  5. Android 2016新技术
  6. 【头歌】重生之我在py入门实训中(1)
  7. 有哪些看起来很酷炫的技能其实并不难学会?
  8. linux shell 命令
  9. 2023美赛数学建模文章润色
  10. ERR Error compiling script (new function):   问题解决