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

 


推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
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社区 版权所有