开发安全之:Server-Side Request Forgery

Overview

 函数 fsockopen() 将使用资源 URI 的用户控制数据启动与第三方系统的网络连接。攻击者可以利用此漏洞代表应用程序服务器发送一个请求,因为此请求将自应用程序服务器内部 IP 地址发出。

Details

当攻击者可以影响应用程序服务器建立的网络连接时,将会发生 Server-Side Request Forgery。网络连接源自于应用程序服务器内部 IP 地址,因此攻击者将可以使用此连接来避开网络控制,并扫描或攻击没有以其他方式暴露的内部资源。 

示例:在下列示例中,攻击者将能够控制服务器连接至的 URL。

$url = $_GET['url']; 
$c = curl_init(); 
curl_setopt($c, CURLOPT_POST, 0); 
curl_setopt($c,CURLOPT_URL,$url); 
$response=curl_exec($c); 
curl_close($c); 

攻击者能否劫持网络连接取决于他可以控制的 URI 的特定部分以及用于建立连接的库。例如,控制 URI 方案将使攻击者可以使用不同于 http 或 https 的协议,类似于下面这样: - up:// - ldap:// - jar:// - gopher:// - mailto:// - ssh2:// - telnet:// - expect:// 攻击者将可以利用劫持的此网络连接执行下列攻击: - 对内联网资源进行端口扫描。 - 避开防火墙。 - 攻击运行于应用程序服务器或内联网上易受攻击的程序。 - 使用 Injection 攻击或 CSRF 攻击内部/外部 Web 应用程序。 - 使用 file:// 方案访问本地文件。 - 在 Windows 系统上,file:// 方案和 UNC 路径可以允许攻击者扫描和访问内部共享。 - 执行 DNS 缓存中毒攻击。

Recommendations

请勿基于用户控制的数据建立网络连接,并要确保请求发送给预期的目的地。如果需要提供用户数据来构建目的地 URI,请采用间接方法:例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。

但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大,维护难度过大。因此,在这种情况下,程序员通常会采用执行拒绝列表的办法。在输入之前,拒绝列表会有选择地拒绝或避免潜在的危险字符。但是,任何这样一个列表都不可能是完整的,而且将随着时间的推移而过时。

更好的方法是创建一个字符列表,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。 此外,如果需要,还要确保用户输入仅用于在目标系统上指定资源,但 URI 方案、主机和端口由应用程序控制。这样就可以大大减小攻击者能够造成的损害。

相关推荐

  1. 开发安全Server-Side Request Forgery

    2024-01-25 01:42:01       31 阅读
  2. 开发安全:SQL Injection

    2024-01-25 01:42:01       25 阅读
  3. 开发安全:Path Manipulation

    2024-01-25 01:42:01       41 阅读
  4. 开发安全:XML Injection

    2024-01-25 01:42:01       31 阅读
  5. 开发安全:Header Manipulation

    2024-01-25 01:42:01       29 阅读
  6. 开发安全:split()安全漏洞

    2024-01-25 01:42:01       35 阅读
  7. 开发安全:Access Control: Database

    2024-01-25 01:42:01       37 阅读
  8. 开发安全:System Information Leak: External

    2024-01-25 01:42:01       33 阅读
  9. 开发安全Dangerous File Inclusion

    2024-01-25 01:42:01       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-25 01:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-25 01:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-25 01:42:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-25 01:42:01       20 阅读

热门阅读

  1. 动态规划最后一天(回文串)

    2024-01-25 01:42:01       38 阅读
  2. 【力扣每日一题】力扣2765最长交替子数组

    2024-01-25 01:42:01       43 阅读
  3. python基础——进程

    2024-01-25 01:42:01       36 阅读
  4. WPF关键帧动画

    2024-01-25 01:42:01       43 阅读
  5. 75.实现统一异常处理和封装统一返回结果

    2024-01-25 01:42:01       35 阅读
  6. 2024年阿里云优惠云服务器新版价格整理

    2024-01-25 01:42:01       36 阅读
  7. 【嵌入式——C++】引用

    2024-01-25 01:42:01       34 阅读