在PHP代码审计的学习路径中,Session反序列化和create_function漏洞是两个经典且高频出现的考点。今天我们通过两道实战题目,深入剖析这两个漏洞的原理与利用方式。
一、Session反序列化漏洞:当"会话"成为攻击入口- 接收 content(文件内容)和 name(文件名)两个参数
- 每次访问时,对比服务器存储的Session与访问者Session
- 关键点:如果Session存在,就能获得flag权限
在利用漏洞之前,我们需要理解PHP Session的存储方式:文件命名规则:sess_<sessionid>(例如:sess_abc123)这意味着Session中有一个名为 name 的变量,值为 spoock,长度为6。题目在处理Session时,会将 content 参数拼接到默认字符串中。这里的关键在于:🔸利用 |N (null的序列化表示)分隔键名与内容通过精心构造payload,我们可以注入恶意的Session内容,从而绕过验证逻辑,获得flag访问权限。
二、create_function漏洞:动态函数的"双刃剑"这个函数可以将POST变量导入到当前符号表中,存在变量覆盖风险。extract($_POST);
// 如果POST中传入 act=xxx,就会覆盖原有的 $act 变量
create_function(string $args, string $code)
create_function('$name', 'echo $name;')
// 等价于:
functionname($name){ echo $name; }
🔸重要提示:这个函数在PHP高版本中已经被废弃,但在老版本环境中仍然常见。题目中存在 $act($arg, '') 这样的调用形式。- 将 $act 变量覆盖为 create_function
act=create_function&arg=echo "hello";//...
通过构造这样的payload,就能实现任意代码执行。
第三题的过滤较为宽松,管道符未过滤干净,可以直接利用。这提醒我们:在审计过程中,要特别关注过滤逻辑的完整性,常见的过滤绕过包括:
通过这两道题目,我们可以总结出PHP代码审计的几个关键点:✅- 理解底层机制:Session存储、变量作用域等基础知识的掌握至关重要
- 关注危险函数:extract()、create_function()、eval() 等函数都是审计重点
- 过滤的完整性:不完整的过滤往往比不过滤更危险(给人已修复的错觉)
- 版本差异性:不同PHP版本的函数行为可能有差异,要关注版本特性
- create_function的源码实现与安全问题
感兴趣的师傅可以公众号私聊我进团队交流群,咨询问题,hvv简历投递,nisp和cisp考证都可以联系我内部src培训视频,内部知识圈,可私聊领取优惠券,加入链接:https://wiki.freebuf.com/societyDetail?society_id=184(新人优惠券折扣20.0¥,扫码即可领取更多优惠)加入团队、加入公开群等都可联系微信:yukikhq,搜索添加即可