热门标签 | 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服务器并主动查找该漏洞,同时配合专业的安全设备进行防御可以大大提升服务器的安全性。

 


推荐阅读
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
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社区 版权所有