第 17 课
-THE SEVENTEENTH-
目录穿越与文件包含)
课程入口(付费)
个人背景
李,本科,电子信息工程专业,毕业一年半,有JavaScript的,PHP,Python的语言基础,目前自学网络安全中。
目录穿越与文件包含
01 目录遍历1.1 目录遍历概念
目录穿越是由于Web服务器或Web应用程序对用户输入文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过HTTP请求和利用一些特殊字符就可以绕过服务器的安全限制,访问任意受限的文件(可以是Web根目录以外的文件),甚至执行系统命令。
1.2 目录遍历示例
一个Web应用的网站文件在/var/www/html目录下,理论上我们通过这个应用只能访问到Web应用的页面文件,并且只能是允许访问的,但如果存在目录穿越漏洞,则可以访问那些不允许访问的文件,比如数据库配置文件,甚至可以访问/var/www/html目录外的文件,比如Linux的密码文件/etc/passwd。
看这个链接:http://www.a.com/file.php?filename=正常参数
但如果存在目录遍历我们可以构造这样的参数:filename=../../../../../../etc/passwd
链接变为:http://www.a.com/file.php?filename=../../../../../../etc/passwd
通过我们构造的 payload 链接就可以到达根目录,并访问Linux的密码文件/etc/passwd。
02 文件包含
2.1 文件包含的概念
文件包含其实是一个正常的方法,经常在开发的时候会有一些共用的代码在多个文件中会复用,那么开发人员往往会把这样的代码或者方法写在一个文件里,而采用文件包含的方法直接包含到代码里的方法中。
2.2 文件包含示例
当访问:http://www.a.com/file.php?filename=phpinfo.php
这就意味着包含phpinfo.php这个文件,phpinfo.php中的代码被包含到file.php中执行了。
这其实就是本地包含,就上面的代码,大家可以发现,其实在做include的时候并没有对$_GET['filename']的值做相关的处理,那么意味着这里就可以是任意的文件,就会存在本地文件包含漏洞。
2.3 目录遍历和文件包含的区别
2.4 远程文件包含
上面介绍的都是本地文件包含,现在说说远程文件包含漏洞:
下面的网址链接就实现了远程文件包含,远程文件名 1.txt 的内容为 test:
2.5 目录穿越和文件包含利用
读取敏感信息,比如/etc/passwd密码文件;
读取网站的数据库配置文件等
利用远程文件包含去包含远程文件,而远程文件中如果包含写一句话的木马,并且有写权限 的情况下就可以成功写入一句话木马。
03 防御
基本的方法是设置白名单,总的来说,要防御目录穿越或者文件包含漏洞,主要还是需要包含或者访问什么,那么就允许什么,其他都应该直接禁止掉。
0下期更新笔记内容:
常见WEB漏洞:JSONP安全与防御