【web安全】目录遍历攻击学习与防范


原文: 什么是目录遍历攻击? (acunetix.com)

1.目录遍历攻击是什么

  • 目录遍历或者路径遍历是一种HTTP攻击,允许攻击者访问受限制的目录并在web服务器的根目录【放网站的目录】之外执行命令。

  • 如果系统受到了目录遍历攻击,攻击者可以利用此漏洞跳出根目录,并访问非web文件夹的其他文件部分,查看到大量本应该受限制的文件,从而为攻击者提供进一步危害系统所需要的更多信息。

  • 以微软的IIS举例,用户本不应该有权限访问到wwwroot以上或者同级的其他内容,如果发起了目录遍历攻击,攻击者就可以访问包括下面的mysql、php等其他文件部分。【我们也可以说www目录之所以存在,就是为了防范目录遍历攻击】在这里插入图片描述

2.目录遍历攻击如何实现

两个步骤:

  1. 测试检索文件和检索参数

    攻击者尝试发送这样一个url,成功返回了oldarchive.html后,攻击者就知道show.asp文件是可以通过web服务器的文件系统进行查询找到view参数后面的文件的。【需要攻击者不断测试网站拥有的请求和响应,找到正确的查询文件脚本和查询参数】

GET http://test.webarticles.com/show.asp?view=oldarchive.html HTTP/1.1
Host: test.webarticles.com

​ ps:show.asp是微软IIS特有的,也可以理解成java的show.jsp,是一个动态页面,在服务端有能查询文件的功能。

  1. 恶意参数注入

    攻击者通过不断测试去修改参数,以不断往上翻高层目录可以找到windows所在的位置,进行恶意攻击

GET http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini HTTP/1.1
Host: test.webarticles.com

在旧版本的IIS或者Apache中,这些服务器组件本身也有可能受到目录遍历的攻击,当然在新版本里很早就修复了该漏洞。例如,利用 IIS 的脚本目录遍历目录并执行命令的 URL 请求可以是

GET http://server.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\ HTTP/1.1
Host: server.com

解释:
1.访问到允许用户访问的scripts文件夹,通过注入字符%5c【%5c是'/'的编码】来操纵进入高层目录
2.也就是../../windows进入到了windows文件夹。
3.服务端误认为是访问 '/scripts/xxx' 文件,把后面'..%5c../Windows/System32/cmd.exe?/c+dir+c:\' 当做了文件名 xxx 交给了文件系统
4.也就是本应该把'/scripts/xxx' 交给文件系统的,结果却把'/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\'提交给了文件系统
5.那文件系统肯定是直接执行的,也就是直接进入/scripts/..%5c../Windows/System32/cmd.exe命令行了,并且对该命令行提供了 /c+dir+c:\ 的参数,找到了c盘的文件列表

该请求将通过执行命令cmd文件并在cmd中运行命令,将目录中所有文件的列表返回给用户。URL 请求中的表达式是 Web 服务器转义代码,用于表示普通字符,比如这个%5c 和后面的 \c【‘/’ 的 编码就是%5c】

较新版本的现代Web服务器软件检查这些转义码,不要让它们通过。但是,某些较旧的版本不会在根目录执行程序中过滤掉这些代码,而是允许攻击者执行此类命令。

但是对于网站代码本身,就需要开发者人工进行安全干预和防范。

3.如何防御目录遍历攻击

  • 确保web服务器软件版本最新,并且已经安装所有补丁

  • 有效过滤任何用户输入,防范参数中的转义字符,通过utf8编码后只要发现参数包含可能引发目录遍历攻击的非法字符,直接拒绝请求,如果合法再将用户输入提交到服务器。

  • 确保权限控制到位,谨慎处理传向文件系统API的参数【与第二点差不多】

  • 对文件类型进行白名单控制【只允许请求html文件、css文件、js文件等这些】,对包含恶意字符或者空字符的参数进行拒绝。【windows现在已知的文件名非法字符有 \ / : * ? " < > | 】【 linux文件名非法字符 "/ " 】

  • 当然,如有需要,使用全面的web漏洞扫描,把网站安全可能涉及的各种漏洞都进行检查。

总结为一句话:不要信任任何用户的任何输入。对任何输入都要规范化检查与处理。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值