PHP代码审计实战:两个经典漏洞的深度剖析

admin 2026-04-02 03:49:24 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文深入剖析PHP代码审计中Session反序列化和createfunction两个经典漏洞,通过实战案例详解漏洞原理与利用方式。Session反序列化漏洞利用/tmp目录存储机制和|N分隔符实现权限绕过;createfunction漏洞结合extract变量覆盖实现代码执行。文章强调理解底层机制、关注危险函数、检查过滤完整性的重要性,并提供相关扩展阅读建议。 综合评分: 81 文章分类: 代码审计,漏洞分析,WEB安全,实战经验,安全开发


cover_image

PHP代码审计实战:两个经典漏洞的深度剖析

原创

油漆工 油漆工

C4安全

2026年4月1日 15:14 江苏


在PHP代码审计的学习路径中,Session反序列化和create_function漏洞是两个经典且高频出现的考点。今天我们通过两道实战题目,深入剖析这两个漏洞的原理与利用方式。


一、Session反序列化漏洞:当”会话”成为攻击入口

场景还原

题目功能非常简单:

  • 接收 content(文件内容)和 name(文件名)两个参数
  • 将文件存储到 /tmp 文件夹
  • 每次访问时,对比服务器存储的Session与访问者Session
  • 关键点:如果Session存在,就能获得flag权限

知识储备:PHP Session存储机制

在利用漏洞之前,我们需要理解PHP Session的存储方式:

存储位置:/tmp 文件夹

文件命名规则:sess_(例如:sess_abc123)

文件内容格式:键名|序列化后的结果

举个栗子:

name|s:6:"spoock"

这意味着Session中有一个名为 name 的变量,值为 spoock,长度为6。

漏洞利用思路

题目在处理Session时,会将 content 参数拼接到默认字符串中。这里的关键在于:

🔸

利用 |N (null的序列化表示)分隔键名与内容

通过精心构造payload,我们可以注入恶意的Session内容,从而绕过验证逻辑,获得flag访问权限。


二、create_function漏洞:动态函数的”双刃剑”

场景还原

题目的参数要求:

  • POST方式传入 key 值
  • 同时需要 act 和 arg 参数
  • act 参数只做首尾匹配,过滤不严格

知识储备:两个关键函数

  1. extract() 函数

这个函数可以将POST变量导入到当前符号表中,存在变量覆盖风险。

extract($_POST);
// 如果POST中传入 act=xxx,就会覆盖原有的 $act 变量
  1. create_function() 函数

函数原型:

create_function(string $args, string $code)

它相当于动态创建一个函数,比如:

create_function('$name', 'echo $name;')
// 等价于:
function name($name) { echo $name; }

🔸

重要提示:这个函数在PHP高版本中已经被废弃,但在老版本环境中仍然常见。

漏洞利用思路

题目中存在 $act($arg, ”) 这样的调用形式。

结合 extract() 的变量覆盖,我们可以:

  1. 将 $act 变量覆盖为 create_function
  2. 在 $arg 参数中注入恶意代码
  3. 通过闭合 $code 参数执行任意命令

举个payload示例:

act=create_function&arg=echo "hello";//...

通过构造这样的payload,就能实现任意代码执行。


三、补充:题3的启示

第三题的过滤较为宽松,管道符未过滤干净,可以直接利用。

这提醒我们:在审计过程中,要特别关注过滤逻辑的完整性,常见的过滤绕过包括:

  • 大小写混用
  • 双写绕过
  • 编码绕过
  • 利用未被过滤的特殊字符

四、总结与思考

通过这两道题目,我们可以总结出PHP代码审计的几个关键点:

  1. 理解底层机制:Session存储、变量作用域等基础知识的掌握至关重要
  2. 关注危险函数:extract()、create_function()、eval() 等函数都是审计重点
  3. 过滤的完整性:不完整的过滤往往比不过滤更危险(给人已修复的错觉)
  4. 版本差异性:不同PHP版本的函数行为可能有差异,要关注版本特性

扩展阅读

如果你对这两个漏洞还想深入了解,建议阅读:

  • PHP官方手册关于Session处理的说明
  • PHP序列化与反序列化的完整机制
  • create_function的源码实现与安全问题

感兴趣的师傅可以公众号私聊我进团队交流群,咨询问题,hvv简历投递,nisp和cisp考证都可以联系我

内部src培训视频,内部知识圈,可私聊领取优惠券,加入链接:https://wiki.freebuf.com/societyDetail?society_id=184

安全渗透感知大家族

(新人优惠券折扣20.0¥,扫码即可领取更多优惠)

加入团队、加入公开群等都可联系微信:yukikhq,搜索添加即可

END


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:C4安全 油漆工 油漆工《PHP代码审计实战:两个经典漏洞的深度剖析》

评论:0   参与:  0