热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目录浏览漏洞与目录遍历漏洞的危害及修复方法

本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。
一:漏洞名称:
目录浏览漏洞

描述:

目录浏览漏洞属于目录遍历漏洞的一种,目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。 风险:攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。

检测条件:

Web业务运行正常

已知目标网站的域名或IP地址

检测方法:

可以利用web漏洞扫描器扫描web应用进行检测,也可通过搜索,网站标题包含“index of”关键词的网站进行访问。

直接访问Web应用存在的一些目录,如果返回文件列表信息,证明存在此漏洞。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

漏洞修复:

目前存在该漏洞的常见中间件为apache和IIS,一下列出其相关的修复方式:

1.IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。

2.Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消,保存退出,重启Apache。

3.Nginx中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑nginx.conf文件,删除如下两行:autoindex on;autoindex_exact_size on;重启Nginx。

 

二:漏洞名称
目录遍历漏洞

描述:

目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞、非授权文件包含漏洞等。目录遍历是针对Windows IIS和Apache的一种常见攻击方法,它可能让攻击者访问受限制的目录,通过执行cmd.exe /c命令来提取目录信息,或者在Web服务器的根目录以外执行命令。

目录遍历漏洞可能存在于Web服务器软件本身,也可能存在于Web应用程序之中。目录遍历攻击比较容易掌握,要执行一个目录遍历攻击,攻击者所需要的只是一个web浏览器,并且掌握一些关于系统的缺省文件和目录所存在的位置的知识即可。

原理:http://www.h3c.com/cn/d_201407/833181_30008_0.htm

目录遍历漏洞原理比较简单,就是程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。这里的目录跳转符可以是../,也可是../的ASCII编码或者是unicode编码等。

在包含动态页面的Web应用中,输入往往是通过GET或是POST的请求方法从浏览器获得,例如:http://www.test.com/my. jsp?file=abc.html

通过这个URL,浏览器向服务器发送了对动态页面my.jsp的请求,并且伴有值为abc.html的file参数,当请求在Web服务器端执行时,my.jsp会从服务器的文件系统中取得abc.html文件,并将其返回给客户端的浏览器,那么攻击者就可以假定my.jsp能够从文件系统中获取文件并构造如下的恶意URL:

http://www.test.com/my.jsp?file=../../Windows/system.ini

当服务器处理该请求时,将从文件系统中获取system.ini文件并返回给用户。在这里,攻击者需要去猜测需要往上回溯多少层才能找到Windows目录,但显而易见,这其实并不困难,经过几次的尝试后总会找到的。此时攻击者通过改变目录跳转符的数量和请求的文件名称即可读取其他文件。

如果上面恶意请求被检测到并被阻断,我们可以尝试给URL中的目录跳转符里的点或者斜杠进行ASCII编码,这样可能能够绕过检测成功执行,如示:

http://www.test.com/my.jsp?file=%2e./..%2fWindows/system.ini

也可以利用web服务器本身的漏洞进行攻击,如利用Apache Tomcat UTF-8目录遍历漏洞。漏洞CVE编号为CVE-2008-2938,Tomcat处理请求中的编码时存在漏洞,如果在context.xml或server.xml中将allowLinking设置为true且连接器配置为URIEncoding=UTF-8的话,则向Tomcat提交恶意请求就可以通过目录遍历攻击读取服务器上的任意文件。

将目录跳转符里的点编码为%c0%ae,如果服务器使用的受该漏洞影响的Tomcat版本,则可能攻击成功:

http://www.target.com/%c0%ae%c0%ae/%c0%ae%c0%ae/foo/bar

攻击实例:

目录遍历攻击比较容易实施,下面以WeBid目录遍历漏洞(漏洞exploit-db编号为22829)为例,介绍目录遍历漏洞攻击的具体实现。

WeBid是国外一款方便使用和可定制的开源拍卖平台。WeBid 1.0.4和1.0.5版本在实现上存在一个目录遍历漏洞,WeBid不正确的过滤用户提交的请求,远程攻击者可以利用该漏洞进行目录遍历攻击,成功利用可以WEB权限查看包含敏感信息的任意文件。问题代码如图1所示。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

                                                                            图1 WeBid目录遍历漏洞问题代码

分析图1代码可以发现,/WeBid/loader.php页面没有对用户提交的js参数的文件路径进行过滤,攻击者可通过目录跳转字符“../”进行目录遍历攻击。虽然程序将读取的文件类型限制为“js”和“css”(此处程序虽然支持php文件类型,但是结合上下文可以发现程序通过check_file函数对php文件类型的文件路径和名称都做了严格的限制),但是由于PHP 5.3.4之前的版本中存在空字符截断漏洞,同时程序也未对截断符“%00”进行过滤,攻击者可借助截断符读取任意类型文件。我们分三步来展示非法读取文件。

1、访问敏感文件

WeBid系统loader.php页面正常请求是形如http://example.com/WeBid/loader.php?js=abc.js,此时系统会输出目标js文件的内容。攻击者可借助目录跳转字符非法访问文件,如给js参数赋下面的值尝试访问SchedLgU.txt文件:js=../../../../../WINDOWS/SchedLgU.Txt,即发送HTTP请求:GET /WeBid/loader.php?js=../../../../../WINDOWS/SchedLgU.Txt HTTP/1.1。该请求是请求访问Windows操作系统的“计划任务”的“日志”SchedLgU.Txt文件,该文件位于WINDOWS目录下,记录了以往计划任务的执行情况,以及用户每次开机启动Windows系统的信息。我们在测试环境中可以发现该js参数的请求执行结果如图2所示。由于请求的文件类型为txt,并不在系统允许允许访问的文件类型的白名单中,所以目标文件内容并没有被输出,访问失败。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

                                                                             图2 直接请求敏感文件失败

2、绕过系统过滤

为绕过文件类型白名单过滤,可以借助“%00”截断符再进行尝试,这里使用web调试工具Fiddler进行截断。空字符截断是一个比较经典的攻击手法,文件上传、下载、读取等操作都可能利用。运行Fiddler对所有HTTP请求进行监视,同时开启Fiddler的断点功能,再次发送前面的http请求,这时由于断点功能该请求虽然已经生成,但是尚未发送给服务器,在Fiddler里将本次请求的URL里的文件名修改为:SchedLgU.Txt%00.js,如图3右上角红框处所示。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

                                                                            图3 借助断点构造恶意请求

3、执行恶意请求

点击图3中的“Run to Completion”绿色按钮将构造好的恶意请求发送给服务器,此时抓包可以发现向服务器请求的文件是SchedLgU.Txt%00.js(如图4红框处所示)。当服务器收到请求后,程序会提取%00后面的js字符串进行文件类型过滤,恶意请求顺利骗过程序检测。当程序打开../../../../../WINDOWS/SchedLgU.Txt%00.js文件时,由于%00具有截断功能,实际上打开的是WINDOWS目录下的SchedLgU.Txt文件,从图5中我们可以看出该日志文件被成功输出,攻击成功。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

                                                                        图4 发送给服务器的恶意数据包

《浅谈“目录浏览漏洞与目录遍历漏洞”》

                                                                         图5 敏感文件被成功输出

 

目录遍历漏洞产生环境

(https://www.fujieace.com/penetration-test/directory-traversal-2.html)

网站应用提供文件下载,其中文件储存在服务器中,网站脚本利用代码获取此目录文件将其显示至网站上,其中如果对代码没有进行相关的验证过滤,将会导致目录遍历漏洞。

1、以下是一个简单的PHP目录遍历漏洞示例:

$dir_path=$_REQUEST['path'];
$filename=scandir($dir_path);
var_dump($filename);
?>

《浅谈“目录浏览漏洞与目录遍历漏洞”》

一、目录遍历漏洞第一种情况

1、加密参数传递的数据

在WEB应用程序对文件名进行加密之后再提交,比如:“downfile.jsp?filename=ZmfugsbS”,在参数filename用的是Base64加密,而攻击者要想绕过,只需简单的将名加密后再附加提交即可!所以说,采用一些有规律或者轻量能识别的加密方式,也是存在风险的。

2、编码绕过

尝试使用不同的编码转换进行过滤性的绕过,比如url编码,通过参参数进行url编码提交,”downfile.jsp?filename=%66%61%6E%2E%70%64%66″来绕过。

3、目录限定绕过

在有些Web应用程序是通过限定目录权限来分离的。当然这样的方法不值得可取的,攻击者可以通过某些特殊的符号“~”来绕过。例如这样提交“downfile.jps?filename=~/../boot”。能过这样一个符号,就可以直接跳转到硬盘目录下了。

4、绕过文件后缀过滤

一些web应用程序在读取前,会对提交的文件后缀进行检测,攻击者可以在文件名后放一个空字节编码来绕过这样的文件类型的检查。

例如:../../…/../boot.ini%00.jpg,web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,刚由系统的Api会直接截断,而解析为”../../../../boot.ini”.

在类似Uninx的系统中也可以使用url编码的换行符,例如:../../../etc/passwd%0a.jpg,如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如:../../../index.jsp%20

5、绕过来路验证

HTTP Referer:HTTP Referer是header的一部份,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接来的。

 

二、目录遍历漏洞第二种情况

还有一种目录遍历,那就是因为这个web服务器的配置不当造成的。

Index of/

我们可以直接利谷歌黑客语法来寻找此形式的目录遍历漏洞:

intitle:Index of

例如:

1、IIS“目录浏览”前打勾,就是允许目录列表显示。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

2、Apache配置文件httpd.con中Options 为Indexes就是允许目录列表显示。

《浅谈“目录浏览漏洞与目录遍历漏洞”》

 

注意:虽然说此 Options 值为 Indexes,但是你去访问的时候依然不会目录列表展示,会提示403禁止访问,这也是phpstudy为了安全吧!所以说有时候,并不代表你这样设置就可以以目录列表的方式去显示了。

 

Apache设置Opions选项具体中以参考:

http://httpd.apache.org/docs/2.2/mod/core.html#options

目录遍历漏洞防御

1、系统开发阶段的防御

在系统开发阶段应充分考虑系统的安全性,对目录遍历漏洞来说,需对用户提交的内容进行严格的过滤,这里主要指过滤目录跳转符,字符截断符,dir命令等。

2、系统运行阶段的防御

系统运维人员需有强烈的安全意识,他们的一举一动都会影响用户的个人隐私信息安全。对系统运维人员来说,部署新的业务系统或者安装新的软件或应用后应通过web扫描工具积极查找系统是否存在目录遍历漏洞,尽可能不要在服务器上安装与业务不相关的第三方软件以避免引入目录遍历漏洞。除此之外,还应该合理配置web服务器(禁止目录浏览,分配好目录权限等)并积极关注所使用的各种软件和应用的版本发布情况,及时升级新的软件版本。

不同web服务器禁止目录浏览方法有所不同。对IIS而言,如果不需要可执行的CGI,可以删除可执行虚拟目录或直接关闭目录浏览;如果确实需要可执行的虚拟目录,建议将可执行的虚拟目录单独放在一个分区。

对于Apache而言,管理员需要修改配置文件,禁止浏览列出目录和文件列表,如可通过修改conf目录下的httpd.conf文件来禁止使用目录索引。以Apache 2.2.25版本为例,打开httpd.conf文件将“Options Indexes FollowSymLinks”中的“Indexes”删除,这样web目录下的所有目录都不再生成索引。

为更好的保护系统安全,实际生产环境和测试开发环境应该隔离。在生产环境中的任何改动,都需要严格遵循变更管理流程,做到执行人、执行时间、执行对象和具体改动均记录在案,并有企业信息安全部门进行事前审核和事后审计。技术人员一般不要直接调试生产系统,可以在测试环境中调试完成后再更新生产系统,以避免调试过程中开启某些接口、更改某些配置或者保存某些调试信息造成安全隐患。如果非要在线调试生产系统,而且需要保存调试信息时,应避免将调试信息直接保存到服务器本地,同时调试完成后应第一时间删除相关调试信息并恢复系统配置。

3、安全设备的防御

进行目录遍历攻击时,攻击者基本都会使用目录跳转符,同时可能配合使用字符截断符,dir命令等。对专业的安全设备来说通过检测特定语法下的目录跳转符,字符截断符,以及与查看目录相关的命令即可识别各种目录遍历攻击。部署专业的安全设备不仅可以很好的保护业务系统自身的目录遍历漏洞,同时还能防御web服务器和服务器上其他非业务相关的第三方应用漏洞引发的目录遍历攻击。目前华三通信发布的SecPath IPS系列产品采用特有技术,能够智能有效的识别各种编码方式的目录遍历攻击。

结束语

目录遍历漏洞虽然是一种非常古老的漏洞,但目前仍在很多系统中被发现。对系统运维人员来说合理配置web服务器并主动查找该漏洞,同时配合专业的安全设备进行防御可以大大提升服务器的安全性。

 


推荐阅读
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
author-avatar
w4x是真屌丝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有