文章总结: 本文深入剖析PHP代码审计中Session反序列化和createfunction两个经典漏洞,通过实战案例详解漏洞原理与利用方式。Session反序列化漏洞利用/tmp目录存储机制和|N分隔符实现权限绕过;createfunction漏洞结合extract变量覆盖实现代码执行。文章强调理解底层机制、关注危险函数、检查过滤完整性的重要性,并提供相关扩展阅读建议。 综合评分: 81 文章分类: 代码审计,漏洞分析,WEB安全,实战经验,安全开发
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_
文件内容格式:键名|序列化后的结果
举个栗子:
name|s:6:"spoock"
这意味着Session中有一个名为 name 的变量,值为 spoock,长度为6。
漏洞利用思路
题目在处理Session时,会将 content 参数拼接到默认字符串中。这里的关键在于:
🔸
利用 |N (null的序列化表示)分隔键名与内容
通过精心构造payload,我们可以注入恶意的Session内容,从而绕过验证逻辑,获得flag访问权限。
二、create_function漏洞:动态函数的”双刃剑”
场景还原
题目的参数要求:
- POST方式传入 key 值
- 同时需要 act 和 arg 参数
- act 参数只做首尾匹配,过滤不严格
知识储备:两个关键函数
- extract() 函数
这个函数可以将POST变量导入到当前符号表中,存在变量覆盖风险。
extract($_POST);
// 如果POST中传入 act=xxx,就会覆盖原有的 $act 变量
- create_function() 函数
函数原型:
create_function(string $args, string $code)
它相当于动态创建一个函数,比如:
create_function('$name', 'echo $name;')
// 等价于:
function name($name) { echo $name; }
🔸
重要提示:这个函数在PHP高版本中已经被废弃,但在老版本环境中仍然常见。
漏洞利用思路
题目中存在 $act($arg, ”) 这样的调用形式。
结合 extract() 的变量覆盖,我们可以:
- 将 $act 变量覆盖为 create_function
- 在 $arg 参数中注入恶意代码
- 通过闭合 $code 参数执行任意命令
举个payload示例:
act=create_function&arg=echo "hello";//...
通过构造这样的payload,就能实现任意代码执行。
三、补充:题3的启示
第三题的过滤较为宽松,管道符未过滤干净,可以直接利用。
这提醒我们:在审计过程中,要特别关注过滤逻辑的完整性,常见的过滤绕过包括:
- 大小写混用
- 双写绕过
- 编码绕过
- 利用未被过滤的特殊字符
四、总结与思考
通过这两道题目,我们可以总结出PHP代码审计的几个关键点:
✅
- 理解底层机制:Session存储、变量作用域等基础知识的掌握至关重要
- 关注危险函数:extract()、create_function()、eval() 等函数都是审计重点
- 过滤的完整性:不完整的过滤往往比不过滤更危险(给人已修复的错觉)
- 版本差异性:不同PHP版本的函数行为可能有差异,要关注版本特性
扩展阅读
如果你对这两个漏洞还想深入了解,建议阅读:
- PHP官方手册关于Session处理的说明
- PHP序列化与反序列化的完整机制
- create_function的源码实现与安全问题
感兴趣的师傅可以公众号私聊我进团队交流群,咨询问题,hvv简历投递,nisp和cisp考证都可以联系我
内部src培训视频,内部知识圈,可私聊领取优惠券,加入链接:https://wiki.freebuf.com/societyDetail?society_id=184
安全渗透感知大家族
(新人优惠券折扣20.0¥,扫码即可领取更多优惠)
加入团队、加入公开群等都可联系微信:yukikhq,搜索添加即可
END
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:C4安全 油漆工 油漆工《PHP代码审计实战:两个经典漏洞的深度剖析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论