目录遍历漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露。
比如数据库备份文件、配置文件等,攻击者利用该信息可以为进一步入侵网站做准备。
简单来说,我个人认为目录遍历更像是一种 trick,是一种可以配合其他攻击一起使用的 trick,利用方法高于 CSRF 与 CORS。
dirb、御剑、Burpsuite 中的目录爆破工具,如果能扫出一些存在/存活的目录,其实就是目录遍历漏洞的一种。
总而言之,目录遍历这个漏洞是需要经常去摸一摸,探一探的。
存在资源的地方就极有可能存在目录遍历。
目录遍历首先要特别明确的一个点是,目录遍历的攻击基于操作系统。
基于操作系统,例如 Linux 操作系统下,cd ..命令是返回上一级目录。
../这个命令,贯穿了整个目录遍历攻击,也是目录遍历攻击的核心。
如果对方服务器是 Linux,攻击手段就是通过../,这一个../将贯穿整个目录遍历攻击,
许多的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/…/…/*53.pdf"
通过“…/”跳转目录“/fan”,即“d://site/test/pdf/*53.pdf”,
返回了读取文件的正常的页面。
路径遍历漏洞隐藏一般在文件读取或者展示图片功能块这样的通过参数提交上来的文件名,从这可以看出来过滤交互数据是完全有必要的。恶意攻击者当然后会利用对文件的读取权限进行跨越目录访问,
比如访问一些受控制的文件,“…/…/…/…/…/…/…/etc/passwd“或
者”…/…/…/…/boot.ini“,当然现在部分网站都有类似Waf的防护设备,只要在数据中会有/etc /boot.ini等文件名出直接进行拦截。
绕过 1、加密参数传递的数据在WEB应用程序对文件名进行加密之后再提交,比如:“downfile.jsp?filename=ZmfugsbS”,在参数filename用的是Base64加密,而攻击者要想绕过,只需简单的将名加密后再附加提交即可!所以说,采用一些有规律或者轻量能识别的加密方式,也是存在风险的。
2、编码绕过尝试使用不同的编码转换进行过滤性的绕过,比如url编码,通过参参数进行url编码提交,"downfile.jsp?filename=%66%61%6E%2E%70%64%66"来绕过。
URL编码绕过需要编码两次,第一次是浏览器传到后端自动解码,第二次是后端使用函数进行解码。
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,告诉服务器我是从哪个页面链接来的。
如果应用程序要求用户提供的文件名必须以预期的基本文件夹开头,例如/var/www/images,则可能包含所需的基本文件夹,后跟合适的遍历序列。例如:
filename=/var/www/images/…/…/…/etc/passwd
示例 wonkyserver 目录遍历 (CVE-2018-7171)用的是vulfocus靶场
payload
/rpc/dir?path=/
flag在tmp目录下,path=010:
这就是web应用有问题,导致目录穿越,可以任意读取文件
总结一下,poc就是/rpc/dir?path=/当出来根目录后,文件前面会自带一个数字id,然后把这个数字替换掉/就可以查看这个目录下的文件名了。
打开靶场环境
payload:
/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F.. %252Ftmp%23foo/development
%252F 两次url解码为 /
访问后直接出来flag



