参考《白帽子讲web安全》,实验心得:
想要成功利用文件包含的漏洞,需要满足两个条件
(1)include()等函数通过动态变量的方式引入需要包含的文件
(2)用户能够控制该动态变量
以DVWA的文件包含来做实验
实验环境:
DVWA,win10,wampserver2.4-x86,中国菜刀等
本地文件包含漏洞
当用户可以控制page参数时,我们可以进行查看我们任意想要查看的文件。即目录遍历。因为wamp的php.ini文件默认情况下allow_url_fopen=on
包含漏洞 漏洞探索 phpinfo使用../../的方式来返回上层目录。当然也采用不同的编码来进行绕过一些限制。
文件包含的防护
当php采用了open_basedir,它用来限制特定目录php能打开的文件。
在php.ini中默认是没有打开的。
无设置我们对其进行设置,任意文件包含就会失败
限制目录如果是要限制一个指定的目录,最后一定要加上\
远程文件包含
默认情况下php.ini的配置选项allow_url_include=off,不能远程文件,我们手动设置为on,以方便我们的实验
www.baidu.com success我们还可以利用文件包含漏洞执行任意命令,需要借助另一台服务器,我利用虚拟机的win7来让实验更加完美,虚拟机IP为192.168.15.156,我们新建一个文件hack.txt,代码为:
远程包含一句话木马注:创建的文件后缀名一定是txt、jpg、rar,一定是非php文件后缀名的文件,进而getshell
然后我们控制page参数来访问我们构建的脚本
我们可看到在本机win10的dvwa下新建了一个文件sheller.php
sheller.php访问sheller.php
成功利用那么我们可以把hack.txt代码进行修改,和中国菜刀相结合
hack.txt文件再次访问,并使用菜刀,成功利用。
生成shell.php 中国菜刀 成功我们还有别的思路,都可以进行尝试
比如在hack.php文件里,写以下代码
系统命令 ipconfig IP地址注意:$_POST和$_GET的传递方式不一样。
本地文件包含的利用技巧
1. php://input是可以访问请求原始数据的只读流。
可以读取到post没有解析的原始数据
2. php://filter读取包含漏洞脚本的源码
php://filter/read=convert.base64-encode/resource=[文件路径]
base64读取index.php文件,再使用base64进行解码。
3. data URL schema将文件包含漏洞变成代码进行执行漏洞
data:text/plain,<?php system('ipconfig');?>
执行系统命令4. 包含apache配置文件
首先利用burpsuite进行抓包访问,将想要执行的php代码插入其中,避免<、>等符号被过滤,随后访问access.log,执行代码。
(我使用的wampserver,access.log默认在wamp/logs/access.log)
burpsuite抓包 访问access.log success5. file:// 协议查看任意文件
可查看任意文件6. zip:// 协议
zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件。可以被php解析的子文件后缀名
还有其他一些协议的利用:
php://stdin 是只读的, php://stdout 和 php://stderr 是只写的,ftp://访问ftp
expect://协议执行任意linux的指令,使用http://localhost/include.php?page=expect://command
来执行任意linux指令
总结:
文件包含漏洞即是类似include函数在包含文件的时候,使用GET或POST请求方式,使得参数有可能被控制。
所以出现文件包含漏洞
如:
可用于代码审计参考文献:
网友评论