网站开发终止协议书,云主机做网站,惠州网站建设佳木斯,互动营销案例漏洞挖掘之目录遍历漏洞 (baidu.com)
从0到1完全掌握目录遍历漏洞
0x01 什么是目录遍历漏洞
目录遍历漏洞是由于网站存在配置缺陷#xff0c;导致网站目录可以被任意浏览#xff0c;这会导致网站很多隐私文件与目录泄露。
比如数据库备份文件、配置文件等#xff0c;攻击…漏洞挖掘之目录遍历漏洞 (baidu.com)
从0到1完全掌握目录遍历漏洞
0x01 什么是目录遍历漏洞
目录遍历漏洞是由于网站存在配置缺陷导致网站目录可以被任意浏览这会导致网站很多隐私文件与目录泄露。
比如数据库备份文件、配置文件等攻击者利用该信息可以为进一步入侵网站做准备。
简单来说我个人认为目录遍历更像是一种 trick是一种可以配合其他攻击一起使用的 trick利用方法高于 CSRF 与 CORS。
早在最早接触的 dirb、御剑、Burpsuite 中的目录爆破工具如果能扫出一些存在/存活的目录其实就是目录遍历漏洞的一种。 总而言之目录遍历这个漏洞是需要经常去摸一摸探一探的。 存在资源的地方就极有可能存在目录遍历。
0x02 几种目录遍历攻击手段 首先要特别明确的一个点是目录遍历的攻击基于操作系统。 基于操作系统例如 Linux 操作系统下cd ..命令是返回上一级目录。 ../这个命令贯穿了整个目录遍历攻击也是目录遍历攻击的核心。 如果对方服务器是 Linux攻击手段就是通过../这一个../将贯穿整个目录遍历攻击 1. 在文件上传中利用目录遍历漏洞
靶场地址WebGoat 靶场目录遍历下的 PageLesson2 题目中简单描述了通过文件上传利用目录遍历漏洞
靶场界面 题目的要求让我们讲图片上传至非本目录下。 本来要上传的目录是/PathTraversal/user/tests 下我们能够通过目录遍历的方式将要上传的图片上传至其他目录。
已经 OS 为 Linux所以使用../来完成目录遍历攻击
利用 Burpsuite 抓包将 “test” 修改为 “…/test”也就是 /test 目录的上一级目录。 如图修改成功将头像上传至 /PathTraversal/user 目录下了。 2. 对网站上存在的资源点进行目录遍历攻击 网站上存在的资源点比如图片这种资源在请求图片的同时尝试目录遍历。
例如图片资源所在的目录
127.0.0.1/home/image
而在 127.0.0.1/home 下存在一个名为password.txt的文件
image 通过 GET 请求获取参数那么获取图片的 url 就是。
127.0.0.1/home/image?filename1.jpg
当然/home 根目录当然不会流出来。此时如果我们将 filename 的请求变成../1.jpg请求就变成了
127.0.0.1/home/image?filename../1.jpg
直接就访问到了 /home 这一目录下所以此时若我们把请求再构造一下就不是那么简单的事情了filename../password.txt请求就变成了
127.0.0.1/home/image?filename../password.txt
接下来我们通过一道靶场再深化一下对已有资源点进行目录遍历的攻击方式
靶场地址已有资源点的目录遍历 靶场要求我们搞到 /etc/passwd 这一文件
靶场界面如图所示 抓包并点开图片获取到图片的 GET 请求。并直接开始我们的目录遍历攻击。 目录遍历攻击成功返回的是 400说明服务器后台并未对目录遍历攻击作任何限制但是并没有请求到资源再往上一层试试。也就是../../。也失败了不要着急继续尝试。
终于在第三层的时候成功了不容易啊…… 本身 /etc/passwd 这一文件在 Linux 当中是非常重要的文件了 我们通过截图其实也很能体会到漏洞的可利用之处非常之多轻信息泄露重 Getshell。
3. 对于 Zip 文件在文件上传中可以替代头像上传并利用目录遍历 场景应用于文件上传界面但同样也是一个非常特殊的点。早在之前人们并不重视这个情况的时候Zip 文件可以作为文件上传。 攻击者可以利用../来改变 Zip 包中某个文件的存放位置。 明明也算是文件上传的部分但也要单独拉出来说道说道 Zip 文件在解压之后在攻击者的精心设计之下很有概率会覆盖服务器上原有的文件。举个例子php 当中的 .htacess 文件就是最著名的文件上传的覆盖若是覆盖了 .htacess 文件那就出大事儿咯 ~
0x03 目录遍历普通防御的绕过方式
1. 对简单../的目录遍历防御
当服务器后台过滤../的时候例如这段代码
return super.execute(file, fullName ! null ? fullName.replace(../, ) : );
此时因为输入的../会被处理替换成空格。
那么我们通过双写绕过也就是输入..././它会被解析成 》../ 成功绕过~
靶场地址 WebGoat Path Traversal PageLesson3 一般的防御手段的源码如图所示 绕过如图所示 2. GET 请求参数中不允许存在..与/
回顾一下之前的例子对网站上存在的资源点进行目录遍历攻击。
此时我们请求资源是通过 GET 请求中的参数的若参数中不允许存在..与/较难进行目录遍历攻击但总归还是有绕过方法的 ~ 原理 服务器后台在获取我们的参数值之后会进行一次 url 编码若只是单纯的对参数进行这种过滤则可以通过 url 编码绕过。 payload
?filename%2e%2e%2f/etc/passwd
%2e%2e ------ … %2f ------ /
可以如此绕过。具体靶场可以看 WebGoat Path Traversal PageLesson5。 防御的源码如图所示 使用 url 编码绕过 3. 当服务器只允许获取当前格式的资源 情景若此时资源为图像那么服务器只允许的请求是?filename图片格式的后缀。只有?filename1.jpg才可以被请求。 绕过手段空字节绕过
原本的 payload
?filename../etc/passwd
因为服务器限制了请求的资源所以此时必然会报错。
空字节绕过也就是增添空格因为空格后的内容都会被自动过滤。而空格对应的 hex 编码为 %20所以我们构造新的 payload。
?filename../etc/passwd%201.jpg!--转换一下也就是--?filename../etc/passwd 1.jpg
在空字节存在的情况下空格后面的内容会直接被注释掉就变成了这样。
?filename../etc/passwd
绕过实现 GET ~ !
0x04 目录遍历的终极防御手段 前面讲了一些目录遍历存在的简单的防御手段并不顶用接下来我们介绍一下能够很好防御目录遍历的方法。
1. 限制用户输入的路径在某一个范围内。
2. 标准化所有字符
当用户请求访问文件/目录时直接标准化所有字符将所有字符转换成 url 编码这样做之后到了服务器手上不会解析成../就不存在目录遍历了。
3. 验证用户的输入是否在白名单那内
也就是限制用户请求资源对于少量的文件(例如都是图像)写正则表达式批量规范请求资源的白名单这样可以做到完美防御目录遍历漏洞