freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

微服务与RPC架构下CSRF与SSRF利用点
2023-11-15 19:06:23

网络协议与伪协议

网络协议

网络协议是由通信的计算机共同遵守的规则,以促进有效的通信。遵循这些规则使计算机能够有效地交换数据。

伪协议

伪协议不是普遍共享的协议,通常特定于某种语言或程序。它们是为满足内部通信需求而自行创建的协议。

PHP 伪协议利用

利用技术:

  1. 跟踪输入点:确定 PHP 程序与外部数据交互的输入点。

  2. 文件操作函数:关注诸如 readfilefile之类的函数,可能存在利用的机会。

  3. 控制参数:控制输入的参数,允许进行操纵。

示例:

phpCopy code<?php
$input = $_GET['input'];

file_get_contents($input . "dada");  // 可利用

file_get_contents("dada" . $input);  // 不容易利用,但可能存在 ../../ 的漏洞
?>

CSRF(跨站请求伪造)原理

CSRF 攻击利用用户的浏览器执行未经其知情的操作,对目标站点进行未经授权的操作。攻击者通过欺骗用户来执行恶意操作。

关键点:

  1. 同源策略:限制脚本只能访问相同源的资源,以防止恶意网站窃取用户信息。

  2. Referer 头检查:通过检查 Referer 头验证请求的来源。

检测技术:

  1. 严格比较:确保所有可能的来源,包括 Referer、Origin 头和自定义头,都与期望的来源相匹配。

  2. 宽松比较:放松检查,但可能引入漏洞。考虑通过 XSS 或文件上传漏洞进行绕过的可能性。

  3. CSRF 检测不足:注意逻辑问题或不完整的检查,攻击者可能会利用这些问题。

强大的检测:

  1. 逻辑问题:对所有可能的来源进行全面检查,避免逻辑漏洞。

  2. 无来源:如果请求缺少 Origin 头或 Referer 字段,请谨慎处理。一些松散的检查可能将其视为合法请求。

  3. 双地址:对于不检查 URL 格式的宽松检查要小心,允许攻击者使用两个不同的地址进行攻击。


SSRF(服务器端请求伪造)原理

原理:

SSRF 涉及操纵服务器以发出对内部资源的请求,可能导致对内部网络的探测或攻击。

利用目标:

SSRF 通常针对从互联网无法访问的服务,使攻击者能够利用内部系统中的漏洞。

微服务和 RPC 架构的影响:

首先 SSRF支持跨协议 从http/https到其他协议

其次 微服务和 RPC 架构的流行性增强了 SSRF 攻击,因为它们支持跨协议的攻击。

微服务(Microservices):

微服务是一种软件架构风格,将一个应用程序划分为一组小型、独立的服务,这些服务可以独立开发、部署和扩展。每个微服务都运行在自己的进程中,通过轻量级的通信机制协同工作,例如 HTTP 或消息队列。这使得应用程序更容易维护、扩展和部署。

RPC 架构(Remote Procedure Call):

RPC 是一种通信协议,允许程序调用远程计算机上的过程(函数、子例程),就像调用本地过程一样。RPC 通过网络传输数据,使得分布式系统之间的通信更为方便。

SSRF 攻击(Server-Side Request Forgery):

SSRF 是一种网络攻击,攻击者通过欺骗应用程序将恶意请求发送到应用程序所能访问的内部资源。攻击者可以通过篡改请求中的 URL 或使用其他手法,将请求发送到本地网络或互联网上的其他敏感资源。

微服务、RPC 架构和 SSRF 攻击的关系:

微服务和 RPC 架构的流行性增强了 SSRF 攻击的风险,主要有以下几个原因:

  1. 跨协议通信:微服务架构通常涉及多个服务之间的协同工作,这些服务可能使用不同的通信协议,例如 HTTP、RPC 或者其他自定义协议。攻击者可以通过构造特定的请求,跨协议地访问其他服务,从而绕过一些安全机制。

  2. 内部网络访问:微服务通常在内部网络中运行,它们可能需要相互通信以完成某些任务。攻击者通过 SSRF 可能能够直接访问这些内部服务,绕过了一些边界安全措施。

  3. 服务发现和注册:微服务架构通常使用服务发现和注册机制,其中服务的位置信息可能被动态获取。如果攻击者能够通过 SSRF 攻击来篡改或伪造服务的注册信息,就有可能导致应用程序误将请求发送到恶意服务器上。


SSRF 利用技术

SSRF 攻击利用服务器发出对指定资源的请求。常见的协议包括 HTTP/HTTPS、文件、LDAP、zlib、phar、tar 和 rar。

PHP Curl 示例:

phpCopy code<?php
$file = $_GET['file'];
$resp = file_get_contents($file);
echo $resp;
?>

访问内部 Web和端口扫描:

利用 HTTP/HTTPS 协议访问本地主机或内部网络上的 Web 应用程序。

利用各种协议进行扫描内部端口,如文件、LDAP、zlib、phar、tar 和 rar。

在内网环境中,存在一些可能开放但缺乏强鉴权的服务,这为攻击者提供了潜在的漏洞利用点。其中,常见的利用方式包括通过 SSRF(服务器端请求伪造)探测内网中 Web 服务的指纹信息。通过这种方式,攻击者可以确认是否存在特定应用程序,甚至可能发现可直接执行远程代码(RCE)的 web 服务。此外,攻击者还可以采用盲打 RCE 的方式,对内网的 web 服务进行直接攻击。这种方法在早期的网络攻防环境甚至当前网络安全环境中仍然适用。

这种利用方式之所以有效,一方面是因为内网中的服务通常认为自身处于相对安全的环境,可能在安全措施上,特别是鉴权方面做得不够严格。另一方面,复杂的网络环境也为攻击者提供了机会。大型组织的网络结构通常非常庞杂,包含多个子网、内部服务和应用程序。在管理和保护这些网络资源方面存在挑战,导致一些内部 Web 服务未经适当的鉴权和访问控制。这使得攻击者可以更容易地找到并利用这些漏洞。

SSRF 和远程过程调用(RPC)架构:

微服务和 RPC 允许 SSRF 攻击跨协议,升级攻击的影响和易用性。

  1. 微服务架构:

    • 假设有一个基于微服务架构的电子商务系统,包括用户服务、产品服务和订单服务。

    • 这些微服务相互通信,可能使用 HTTP、RPC 或其他自定义协议。

  2. RPC 架构:

    • RPC 是远程过程调用的一种通信方式,允许在不同计算机上的程序之间进行通信。

    • 微服务中的某些服务可能使用 RPC 进行跨服务的远程调用。

  3. SSRF 攻击示例:

    • 攻击者在某个服务中发现了 SSRF 漏洞,该服务允许通过用户输入的 URL 发起请求。

    • 攻击者构造了一个恶意请求,其中的 URL 不仅仅是指向外部服务器,还跨越了协议,例如从 HTTP 到 RPC。

    • 攻击者的请求可能如下所示:

      plaintextCopy code
      http://malicious-server.com/rpc-endpoint?param=value
      
    • 这个 URL 中,http部分表示 HTTP 协议,但 rpc-endpoint部分指示了 RPC 远程过程调用。

    • 服务器解析并执行该请求,实际上发起了一个跨协议的远程调用。

  4. 攻击的影响:

    • 由于 SSRF 跨协议的特性,攻击者可以在微服务架构中触发不同服务的远程调用,而不仅仅是传统的 HTTP 请求。

    • 这可能导致对其他服务的未经授权访问,绕过了一些安全机制。

通过 SSRF 进行文件读取:

SSRF 可以利用不同的协议(如fileldapzlibphartarrar用于 PHP,jar用于 Java)来读取任意文件。这可以用于代码审计、访问配置文件或检索密码。

对内部应用进行 SSRF 攻击:

攻击者可以使用诸如 dictgopher(被称为多用途协议)的协议,构建其他应用的通信协议。通过在 dictgopher中封装这些协议,攻击者可以与其他应用进行通信。这常常用于攻击内部应用,如 Redis、fastCGI/php-fpm。

SSRF 检测和绕过:

  1. 短网址结合 SSRF:

    • 攻击者首先创建一个指向他们想要访问的内部资源的短网址。

    • 将短网址发送到存在 SSRF 漏洞的服务器,服务器解析这个短网址,实际上访问攻击者指定的内部资源,完成 SSRF 攻击。

      **短网址配合SSRF:**
      
      1. 首先,你发现目标服务器内部有一个管理界面,其URL是:http://192.168.1.1/admin。
      2. 你不能直接从外部访问这个地址,但你可以通过SSRF漏洞让服务器自己去访问它。
      3. 你通过一个短网址服务(例如bit.ly)将这个长URL转换成短URL,例如http://bit.ly/123。
      4. 然后,你在有SSRF漏洞的地方输入这个短URL,服务器会解析这个短URL,然后访问http://192.168.1.1/admin
      5. 通过这种方式,你就可以让服务器访问到内部的资源,实现了SSRF攻击。
      
  2. 自建网址进行访问:

    • 攻击者可以提供更多的控制,甚至在自建网址上放置恶意代码,让服务器在访问时执行这些代码。

      比如,攻击者可以在自建的网址上放置恶意代码,当服务器访问这个网址时,就会执行这些恶意代码
      
      - 攻击者在`http://attacker.com`部署了一个恶意网站。
      - 利用SSRF漏洞,攻击者让服务器访问`http://attacker.com/malicious`,从而触发恶意操作。
      
  3. 域名访问:

    • 攻击者构造一个恶意请求,其中包含对malicious-example.com的访问。

    • 由于存在SSRF漏洞,攻击者利用SSRF漏洞在受害服务器上构造恶意请求,从而控制服务器发起对malicious-example.com或其他目标的实际请求。

    • 攻击者可能将malicious-example.com指向自己的恶意服务器,以获取敏感信息、执行远程命令等恶意操作。

      配合前面,脑补一下 如果malicious-example.com本身就是我的网址,并且做了短网址重定向,并且我在上面写入了DOM-XSS和CSRF的恶意代码,SSRF漏洞的服务器被我引导过来,那么后续的用户不也一样? 隐蔽 社工 信息窃取 三漏洞结合

      或者 网页使用您提供的一些信息自动创建 PDF,您可以插入一些 JS,这些 JS 将在创建 PDF 时由 PDF 创建者本身(服务器)执行,您将能够滥用 SSRF,利用XSS恶意代码(代码触发了一个向内部网络发起请求的SSRF漏洞。)生成PDF,让服务器解析 最终执行SSRF

      1. 在你的`evil.com`服务器上,你设置了一个DNS A记录指向你想要访问的内网IP,例如192.168.1.1(这是你无法直接访问的内部资源)。
      2. 在存在SSRF漏洞的地方,你输入`http://evil.com`。服务器将会解析这个域名,并实际上访问192.168.1.1。
      3. 通过这种方式,你就利用SSRF漏洞让服务器访问了内部资源。这种方法的优点是你可以随时改变DNS记录来访问不同的内部资源
      

    由于域名的所有权和使用可能更难追踪,攻击者可以更容易地隐藏其真实身份和位置,增加了攻击的隐蔽性


SSRF 黑盒测试重点

业务功能:

  1. 社交分享:检查是否获取 URL 以在社交分享功能中显示标题。

  2. 转码服务:研究 URL 处理以获取移动友好内容。

  3. 在线翻译:检查 URL 处理以进行网站内容翻译。

  4. 图片加载/下载:测试 URL 处理以进行图像加载或下载功能。

  5. 文章/内容收集:检查是否使用 URL 从外部源收集信息。

URL 关键参数:

识别和审查参数,如 sharewapurl、`

# 漏洞 # 渗透测试 # 网络安全 # 漏洞分析
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录