(转载翻译)目录穿越漏洞

nicky   ·   发表于 2020-03-12 10:57:00   ·   技术文章投稿区

什么是目录穿越漏洞?

目录遍历/穿越漏洞是一个WEB安全漏洞,黑客可以利用该漏洞读取运行在服务器上的任意文件。文件可以是应用程序代码,或者数据,后端系统的凭证以及敏感的操作系统文件。在某些情况下,黑客可以在服务器上传任意文件然后允许他们修改应用程序数据行为,从而最终完全控制服务器。有点类似与一句话木马放到服务器上然后菜刀连接。

通过目录穿越来读取任意文件

比如说一个购物网站的出售商品程序,图像会通过一些HTML加载出来就像以下代码:
<img src="/loadImage?filename=218.png">

loadImage URL使用filename参数并返回指定文件的内容。映像文件本身储存在磁盘上的/var/www/images那里。为了返回图像,应用程序将请求的文件名附加到此目录上并使用API文件系统来读取文件内容。所以,应用程序就会在以下文件路径读取:
/var/www/images/218.png

该应用程序没有针对目录穿越作任何的防御措施,因此黑客可以请求以下URL从服务器的文件系统中检索任意文件:
https://insecure-website.com/loadImage?filename=../../../etc/passwd

这会导致应用程序从以下文件路径读取:
/var/www/images/../../../etc/passwd

这个顺序在../文件路径是有效的,表示在目录结构中上一级。三个连续的../从/var/www/images/升至文件系统根目录,因此实际读取的文件为:
/etc/passwd

在基于unix的操作系统上,这是一个标准的文件,其中包含了服务器上用户创建文件的详细信息。在window上../和..\都是有效的目录遍历序列,而检索标准操作系统文件的攻击为:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

利用目录穿越漏洞的常见障碍

许多将用户输入放在文件路径中的应用程序实施了某种针对目录穿越攻击的防御措施,不过可以绕过。如果应用程序从用户提供的文件名中剥离或阻止目录穿越,则可以用多种技术绕过这种防御。

第一种是,你可以使用文件系统根目录中的绝对路径(filename=/etc/passwd)直接引用文件,无需任何的文件目录遍历。

第二,使用嵌套的遍历序列,比如….//或者….\/,当内部序列被剥离时,它们会被还原为简单的遍历序列

第三,可以使用各种非标准编码(..%c0af或..%252f)来绕过输入过滤器

第四,如果应用程序要求用户提供文件名必须以所需的基本文件夹(/var/www/images)开头,则可以包括所需的基本文件夹,后跟适当的遍历序列。例如:
filename=/var/www/images/../../../etc/passwd

第五,如果应用程序需要用户提供的文件名必须以某种要求的文件扩展名如。jpg结尾,则可以使用空子节有效终止要求的扩展名之前的文件路径比如:
filename=../../../etc/passwd%00.png

如何防止目录穿越攻击

防止目录文件穿越攻击最有效的方法是避免将用户提供的输入完全传递给文件系统API。可以重写许多执行此操作的应用程序功能,以更安全的方式提供相同的行为。

如果认为将用户输入的信息传递给文件系统API是无法避免的,那么可以使用两层防御来防止攻击:
应用程序将在处理之前验证用户输入。理想情况下,验证应与允许值中的白名单进行比较,如果所需功能无法做到这一点,则验证输入内容仅包含允许内容,例如纯字母数字字符。

验证提供的输入后,应用程序应将输入附加到基本目录,并使用平台文件系统API规范化路径。它应验证规范化路径以预期的基本目录开头

以下是JAVA代码的简单示范,用于验证文件的规范路径:
File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
// process file
}

引用:Portswigger https://portswigger.net/web-security/file-path-traversal

用户名金币积分时间理由
奖励系统 100.00 0 2020-12-09 23:11:53 投稿满 10 赞奖励
奖励系统 50.00 0 2020-12-09 13:01:09 投稿满 5 赞奖励
admin 50.00 0 2020-03-12 16:04:28 一个受益终生的帖子~~

打赏我,让我更有动力~

0 Reply   |  Until 2020-3-12 | 2067 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.