含义
目录遍历, 也叫路径遍历, 由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件 (可以是web根目录以外的文件),甚至可以执行系统命令。
原理
程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
比如:http://www.***.com/index.php?file=image.jpg
当服务器处理传送过来的image.jpg文件名后,Web应用程序即会自动添加完整路径,形如“d://site/images/image.jpg”,将读取的内容返回给访问者。
如果程序对文件名称的安全性验证不足, 攻击者会采用../../../ect/passwd的文件名, 导致访问非法文件。
漏洞产生环境(原因)
网站应用提供文件下载, 其中文件储存在服务器, 网站脚本利用代码获取本网站的目录文件并将其显示在网站界面上, 如果对代码没有相关的安全验证, 将导致文件目录泄露漏洞。
分类
1. 加密型传递的参数
在web程序中, 对于传递的数据进行加密后再提交, 比如:
http://www.***.com/downfile.jsp?file=ZmfdWq==
2. 编码绕过
采用不同的编码进行过滤型绕过, 比如通过对参数进行url编码提交来绕过:
http://www.***.com/downfile.jsp?file=%66%1E%23%16%5A
3. 目录限定绕过
有些web软件通过限定目录权限来分离, 当然这样也是不可取的, 攻击者可以通过某些特定的符号来绕过
~/../boot 等价于 /boot
4. 绕过文件后缀过滤 (截断上传原理)
当web程序设置了后缀名检测(黑名单或白名单)的时候, 可以通过%00截断来绕过:
../../../boot.ini%00.jpg ==> ../../../boot.ini
5. 绕过来路验证
来路验证, 也可以理解为跳转验证, 即当前页面的打开是由于哪里的操作生成的, 确保用户在自己的网站上下载, 防止盗链(接)
比如, 直接打开baidu.com, 这时候的来路是null;
如果从baidu.com的网页中打开hao123.com, 那么hao123.com的来路就是baidu.com
点击下载链接之后, 由于需要跳转到新的下载页面, 浏览器或者web程序处于安全考虑, 会提示是否确认跳转到未知链接。
Http Refer: 是header的一部分, 当游览器向web服务器发送请求的时候, 一般会带上Refer, 告诉服务器是从那个页面跳转过来的
如在php中, 通过$_SERVER['SERVER_REDERER']获取当前页面的来路。
实例
1.利用Web应用代码进行目录遍历攻击的实例
在包含动态页面的Web应用中,输入往往是通过GET或是POST的请求方法从浏览器获得,以下是一个GET的Http URL请求示例:
http://test.webarticles.com/show.asp?view=oldarchive.html
利用这个URL,浏览器向服务器发送了对动态页面show.asp的请求,并且伴有值为oldarchive.html的view参数,当请求 在Web服务器端执行时,show.asp会从服务器的文件系统中取得oldarchive.html文件,并将其返回给客户端的浏览器,那么攻击者就可 以假定show.asp能够从文件系统中获取文件并编制如下的URL:
http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini
那么,这就能够从文件系统中获取system.ini文件并返回给用户,../的含义这里就不用多说了,相信大家都会明白。攻击者不得不去猜测需要往上多少层才能找到Windows目录,但可想而知,这其实并不困难,经过若干次的尝试后总会找到的。
2.利用Web服务器进行目录遍历攻击的实例:
除了Web应用的代码以外,Web服务器本身也有可能无法抵御目录遍历攻击。这有可能存在于Web服务器软件或是一些存放在服务器上的示例脚本中。
在最近的Web服务器软件中,这个问题已经得到了解决,但是在网上的很多Web服务器仍然使用着老版本的IIS和Apache,而它们则可能仍然无法抵御这类攻击。即使你使用了已经解决了这个漏洞的版本的Web服务器软件,你仍然可能会有一些对黑客来说是很明显的存有敏感缺省脚本的目录。
例如,如下的一个URL请求,它使用了IIS的脚本目录来移动目录并执行指令:http://server.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:
这个请求会返回C:目录下所有文件的列表,它使通过调用cmd.exe然后再用dir c:来实现的,%5c是web服务器的转换符,用来代表一些常见字符,这里表示的是“”
新版本的Web服务器软件会检查这些转换符并限制它们通过,但对于一些老版本的服务器软件仍然存在这个问题。
修复以及预防
1. 对传来的参数做过滤
2. 文件ID使用随机数命名
3. 文件路径保存至数据库,用户提交文件对应ID下载文件,路径识别拼接都在后端,黑客无法操作
4. 下载文件之前做权限判断,设置好目录权限。
文章参考于网络!如何雷同,纯属巧合。
关于我们:
北京路劲科技有限公司(Beijing Lujin Technology Co. , Ltd.)成立于2019年1月4日,是一家提供全面系统集成与信息安全解决方案的专业IT技术服务公司。公司秉承“为网络安全保驾护航”的企业愿景及“提升国家整体安全”的使命,依据风险评估模型和等级保护标准,采用大数据等技术手段,开展网络安全相关业务。公司致力于为各个行业的业务信息化提供软件和通用解决方案、系统架构,系统管理和数据安全服务、以及IT咨询规划、系统集成与系统服务等专业化服务。公司立足北京,走向全国,始终坚持“换位、细节、感恩”的核心价值观,以“共赢、共享、共成长”的经营理念为出发点,集合了一批敢于创新、充满活力、热衷于为IT行业服务的优秀人才,致力于成为您身边的网络安全专家。
关注路劲科技,关注网络安全!
公司:北京路劲科技有限公司
地址:北京市昌平区南邵镇双营西路78号院2号楼5层504
PS:如果觉得本篇文章对您有所帮助,欢迎关注!帮忙点个赞,转发一下 分享出去吧!
本文始发于微信公众号(LSCteam):目录遍历漏洞,你了解吗?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论