文章目录
目录遍历概述
在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“…/”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
区别
看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的意思,是的,目录遍历漏洞形成的最主要的原因跟这两者一样,都是在功能设计中将要操作的文件使用变量的 方式传递给了后台,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的现象不一样,因此,这里还是单独拿出来定义一下。
需要区分一下的是,如果你通过不带参数的url(比如:http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们成为敏感信息泄露。 而并不归为目录遍历漏洞。
目录遍历漏洞测试
1.打开目标网站,我们单击第一个链接和第二个链接查看内容
2.发现URL是通过title传参过去的,尝试构造漏洞利用链接,失败
/vul/dir/dir_list.php?title=../../
从上面能看出来是因为这里是使用文件包含的函数来进行完成的,所以只有目录没有文件就算包含失败了。
可是将dir_list.php去掉后,得到这样的一个页面。
3.尝试是否可以访问某些敏感文件
访问首页:
http://127.0.0.1/pikachu-master/vul/dir/dir_list.php?title=../../../index.php
访问敏感文件:
http://127.0.0.1/pikachu-master/vul/dir/dir_list.php?title=../../../../../mysql/my.ini
4.通过查看源代码
从代码里面读取文件内容用的是require()函数,并且对输入参数没有做处理和限制,因而造成了目录遍历漏洞,
由于测试用的是require()函数,因此也是有文件包含漏洞的。
漏洞原理
若web要显示一个商品的图像,有时候开发者会用通过HTML加载,如:
<img src="/loadImage?filename=214.png">
使用filename参数加载图像文件,图片文件位置可能映射在 /var/www/images/
上,所以真实的路径是
/var/www/images/214.png
这就导致了攻击者可以读取服务器上的任意文件:
https://www.*****.com/loadImage?filename=../../../etc/passwd
filename的参数值与真实路径组合起来就是:
/var/www/images/../../../etc/passwd
其等价于:
/etc/passwd
在Unix操作系统上,../
是一个标准的返回上一级路径的语法;
在Windows操作系统上, ../
和 ..\
都是返回上一级的语句。
常用漏洞验证方法
- …/…/…/…/…/…/(多少个…/都行,越多越好)/etc/passwd
URL上这一串东西的意义:…/返回上级目录,当返回到根目录时候再…/还是根目录,然后直接进入linux系统的passwd文件 - file:///etc/passwd(这里是文件包含漏洞,不过利用方法一致)
- http://xxxxx
前两者用途:可以读取到目标系统的机密文件
目录遍历漏洞的特征
?page=xxx.php
?home=xxx.html
?index=xxx.jsp
?file=content
总结
很多文件包含漏洞实际上也包含了目录遍历漏洞(payload中包含…/)
只要payload中包含../
就是有目录遍历漏洞,只是它经常作为其他比它危害更大的漏洞的不留名辅助。