文件包含的原理:
文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
文件包含分类
本地文件包含:包含本地主机上的文件(WEB服务器),文件名称是相对路径或者绝对路径
远程文件包含:包含互联网上的文件,文件名称为URL格式,危害大
简单演示(本地文件包含)
在无限制的情况下
在我的phpstudy下的www目录下建立了一个fileinclude目录,里面有如下文件
在index.php下有如下内容,使用了一个include函数,接受get传参的文件名,并包含该文件
1.php内有代码 代表输出php版本信息
包含1.php,即可输出版本信息
值得注意的是,即使包含文件不是php后缀,但是只要内容符合php代码规范,仍然可以执行,否则直接输出文本内容
下图1.txt 内有内容
无限制本地文件包含利用
1,读取Windows系统敏感信息: C:\boot.ini //查看系统版本C:\windows\system32\inetsrv\MetaBase.xml //IS配置文件
C:\windows\repair\sam //windows初次安装的密码
C:\program Files\mysq|\my.ini //Mysq|配置信息
C:\program Files\mysq|\data\mysq|\user.MYD //Mysql root
C:\windows\php.ini //php配置信息
2,读取linux系统敏感信息: /etc/passwd //linux用户信息
/usr/local/app/apache2/conf/httpd.conf //apache2配置文件
/usr/local/app/php5/lib/php.ini //php配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/my.cnf //Mysq|配置文件
有限制情况下
例如,多了个.html,就会在包含文件后面添加.html
绕过方法:
1.php版本需低于5.3.4,才可以使用%00,url解码相当于空格
2.长度截断:windows,点号需要长于250;linux,点号需要长于4096只需在文件末尾添加类似“/./././././././.·····”、“..........·····”等的垃圾数据来将后面的“.html”挤出