浅析路径遍历漏洞 文/饭


许多的Web应用程序一般会有对服务器的文件读取查看的功能,大多会用到提交的参数来指明文件名,形如:http://www.nuanyue.com/getfile=image.jgp

当服务器处理传送过来的image.jpg文件名后,Web应用程序即会自动添加完整路径,形如“d://site/images/image.jpg”,将读取的内容返回给访问者。

初看,在只是文件交互的一种简单的过程,但是由于文件名可以任意更改而服务器支持“~/”,“/..”等特殊符号的目录回溯,从而使攻击者越权访问或者覆盖敏感数据,如网站的配置文件、系统的核心文件,这样的缺陷被命名为路径遍历漏洞。在检查一些常规的Web应用程序时,也常常有发现,只是相对隐蔽而已。

发现路径遍历漏洞
路径遍历漏洞的发现,主要是对Web应用程序的文件读取交互的功能块,进行检测,面对这样的读取方式:

“http://www.nuanyue.com/test/downfile.jsp?filename=fan.pdf”

我们可以使用 “../”来作试探,比如提交Url:“getfile=/fan/fan/*53.pdf”,而系统在解析是“d://site/test/pdf/fan/fan/http://www.cnblogs.com/*53.pdf”,通过“../”跳转目录“/fan”,即“d://site/test/pdf/*53.pdf”,返回了读取文件的正常的页面。

路径遍历漏洞隐藏一般在文件读取或者展示图片功能块这样的通过参数提交上来的文件名,从这可以看出来过滤交互数据是完全有必要的。恶意攻击者当然后会利用对文件的读取权限进行跨越目录访问,比如访问一些受控制的文件,“http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/../etc/passwd“或者”http://www.cnblogs.com/http://www.cnblogs.com/boot.ini“,当然现在部分网站都有类似Waf的防护设备,只要在数据中会有/etc /boot.ini等文件名出直接进行拦截。

遍历路径攻击变异
路径遍历漏洞是很常见的,在Web应用程序编写过程,会有意识的对传递过来的参数进行过滤或者直接删除,存在风险的过滤方式,一般可以采用如下方式进行突破:

以下是一些绕过的方法,当然在实际运行过程中,可以组合使用。

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

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

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

(4)  绕过文件后缀过滤;一些Web应用程序在读取文件前,会对提交的文件后缀进行检测,攻击者可以在文件名后放一个空字节的编码,来绕过这样的文件类型的检查。例如:http://www.cnblogs.com/http://www.cnblogs.com/boot.ini%00.jpg,Web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,则由系统的Api会直接截短,而解析为“http://www.cnblogs.com/http://www.cnblogs.com/boot.ini”。在类Unix的系统中也可以使用Url编码的换行符,例如:http://www.cnblogs.com/../etc/passwd%0a.jpg如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如: http://www.cnblogs.com/../index.jsp%20

(5)  绕过来路验证。在一些Web应用程序中,会有对提交参数的来路进行判断的方法,而绕过的方法可以尝试通过在网站留言或者交互的地方提交Url再点击或者直接修改Http Referer即可,这主要是原因Http Referer是由客户端浏览器发送的,服务器是无法控制的,而将此变量当作一个值得信任源是错误的。

防范遍历路径漏洞
在防范遍历路径漏洞的方法中,最有效的是权限的控制,谨慎的处理向文件系统API传递过来的参数路径。主要是因为大多数的目录或者文件权限均没有得到合理的配置,而Web应用程序对文件的读取大多依赖于系统本身的API,在参数传递的过程,如果没有得严谨的控制,则会出现越权现象的出现。在这种情况下,Web应用程序可以采取以下防御方法,最好是组合使用。

(1)  数据净化,对网站用户提交过来的文件名进行硬编码或者统一编码,对文件后缀进行白名单控制,对包含了恶意的符号或者空字节进行拒绝。

(2)  Web应用程序可以使用chrooted环境访问包含被访问文件的目录,或者使用绝对路径+参数来控制访问目录,使其即使是越权或者跨越目录也是在指定的目录下。

总结
路径遍历漏洞允许恶意攻击者突破Web应用程序的安全控制,直接访问攻击者想要的敏感数据 ,包括配置文件、日志、源代码等,配合其它漏洞的综合利用,攻击者可以轻易的获取更高的权限,并且这样的漏洞在发掘上也是很容易的,只要对Web应用程序的读写功能块直接手工检测,通过返回的页面内容来判断,是很直观的,利用起来也相对简单。

转载于:https://www.cnblogs.com/demonspider/archive/2012/05/24/2515911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摆脱困境:在DbUnit数据集中使用空值

如果我们正在为使用Spring Framework的应用程序编写集成测试,则可以通过使用Spring Test DbUnit将DbUnit与Spring测试框架集成。 但是, 这种集成并非没有问题 。 通常,我们必须在运行测试之前向数据库中插入空值,或者验证保存到…

artdialog5 bug

1.使用artdialog5时,使用两个输入框传值,一直无法取到值,使用简单的ID无法取到值,如idbranch..改为idbranch_str_dialog就可以了,问题是解决了,可是没有找到原因所在! 转载于:https://www.cnblo…

vue中通过js控制页面样式方法

在使用vue.js框架的时候,有时候会希望在页面渲染完成之后,再执行函数方法来处理初始化相关的操作,如果只处理页面位置、宽或者高时,必须要在页面完全渲染之后才可以,页面没有加载完成之前,获取到的宽高不准…

Memcached入门指南

1 概览 Memcached是一个免费开源,高性能的,分布式内存对象缓存系统,为了加快动态web应用程序,减轻数据库负载。 Memcached是一个内存中的基于键/值存储任意数据小片段(字符,对象),存…

css正則匹配、模糊匹配

//所有class包含font-red的p标签 p[class~"font-red"] {color: red;} [abc^"def"] 选择 abc 属性值以 "def" 开头的所有元素 [abc$"def"] 选择 abc 属性值以 "def" 结尾的所有元素 [abc*"def"] 选择 abc 属性值中…

快速指南:剖析JBoss BPM跨进程通信

(文章来宾与北美红帽公司高级解决方案架构师杰伊保拉杰共同撰写) 几周的提示与技巧文章将深入探讨JBoss BPM Suite,特别是有关如何在两个流程之间进行通信的问题。 在进入解决方案详细信息之前,让我们首先约束将要讨论的用例。 …

字符串中全角半角之间的转换

前几天,在做表单验证的时候,发现用户在输入表单内容的时候,正常情况下都是半角输入,但是也有可能是全角输入,所以就牵扯到全角输入内容的验证,这里便提供全角和半角之间的转换函数,与大家分享一…

Android HAL 层,三个重要的结构体的源码~

最近在学习android HAL 层 ~ 离不开这三个数据结构~~先贴出来 typedef struct hw_module_t { /** tag must be initialized to HARDWARE_MODULE_TAG */ uint32_t tag; /** major version number for the module */ uint16_t version_major; /** minor version number …

React使用的扩展

待续。。。 转载于:https://www.cnblogs.com/wenxuehai/p/11387188.html

使用命令行工具创建WildFly OpenShift应用程序

通过使用快速入门,可以在OpenShift上轻松配置WildFly的新实例。 只需单击一下,您就可以准备就绪! 通常,OpenShift的高级用户使用命令行工具 。 但是,您无法使用CLI工具创建WildFly墨盒。 但现在已解决错误1134134 。 …

word-break属性和css换行显示

这几天在做项目的时候,遇到了比较棘手的问题,便是在一个标签里边展示内容,如果说展示中文汉字,一点问题都没有,但是只要连续展示英文字母或者中文的标点符号(中间不带空格),那么所渲…

第四种行转列

--动态处理 select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even, row_number() over (partition by StuName,BZKTypeName order by getdate()) ID into #t1 from BKLIST A --where StuName林健辉 declare sql1 varchar(max) declare sql2…

React-router的基本使用

1、安装使用 $ npm install -S react-router import { Router, Route, hashHistory } from react-router;render((<Router history{hashHistory}><Route path"/" component{App}/></Router> ), document.getElementById(app)); 1.1、版本问题 reac…

使用反应流API将Akka流与rxJava结合在一起

这次只是一篇简短的文章&#xff0c;因为我仍在尝试这种东西。 关于反应式编程有很多话题。 在Java 8中&#xff0c;我们有Stream API&#xff0c;我们有rxJava我们有ratpack &#xff0c;Akka有akka-streams 。 这些实现的主要问题是它们不兼容。 您不能将一个实现的订阅者连…

九宫格有规律高亮滚动效果

前几天朋友去面试&#xff0c;面试官要求当场用九宫格写出一个滚动有规律的大转盘滚动高亮效果&#xff0c;结果可想而知。如下图&#xff1a; 也就是说当页面刚进来的时候&#xff0c;红色方块在左上角&#xff0c;接下来按照图上所标注的箭头方向来依次循环。当我听说了这个面…

[源码学习]调试Razor从哪里开始

使用ASP.NET MVC时&#xff0c;我们知道&#xff0c;要使用Views中的视图&#xff0c;需要在Action中写 return View(); 这个方法返回的返回值是一个 ViewResult&#xff0c;进入这个类&#xff0c;继承了父类ViewResultBase后只写了MasterName属性和FindView方法。 不过已经开…

使用Maven原型高效创建Eclipse模块

Maven Archetype是一个项目模板工具包&#xff0c;可为开发人员提供生成内置或自定义脚手架工件的参数化版本的方法。 最近&#xff0c;我将其应用于我们的Xiliary P2存储库&#xff0c;以实现Eclipse模块存根创建的自动化。 由于效果很好&#xff0c;所以我认为值得在这篇文章…

ubuntu 编译 /usr/bin/ld: cannot find 问题解决

参考文档&#xff1a; http://www.iq38.com/38536.html linux下编译应用程序常常会出现如下错误&#xff1a; /usr/bin/ld: cannot find -lxxx 意思是编译过程找不到对应库文件。其中&#xff0c;-lxxx表示链接库文件 libxxx.so。 注&#xff1a;有时候&#xff0c;由于库文件是…

CSS知识点整理(2):框模型,定位

1. 框模型&#xff1a;Box Model 规定了元素处理元素框处理元素内容、外边距、边框、内边距的方式。 2. 当边距给定的值 可以小于4个。CSS定义了一些规则、处理这中情况&#xff1a; 如果缺少左外边距的值&#xff0c;则使用右外边距的值。如果缺少下外边距的值&#xff0c;则…

Vux的安装使用

1、Vux的安装 1.1、vue-cli的vux模板生成项目 可以直接使用 vue-cli 的模板生成一个 vux 项目 vue init airyland/vux2 projectName 由此可以直接使用 vux。&#xff08;或许运行项目可能会报错&#xff0c;那是 vue-cli 初始项目的通病&#xff09; 1.2、手动安装 vux 首先在项…