前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP反序列化漏洞学习

PHP反序列化漏洞学习

作者头像
Elapse
发布2020-08-17 11:31:34
3870
发布2020-08-17 11:31:34
举报
文章被收录于专栏:E条咸鱼E条咸鱼

类似前言一样的东西

在很多CTF题目上或者一些实际环境中都有碰到过反序列化漏洞,但是看到那些乱七八糟的就感觉学不进去,趁着暑假时间多的时候,研究一番,这篇也算是学习笔记,主要内容有:

什么是序列化和反序列化 为什么要用到序列化 产生这个漏洞的原因

什么是序列化和反序列化

在PHP中,实现序列化和反序列化,主要是靠 serialize()unserialize()这两个函数,序列化做的工作就是,将一个一个对象变成一个可传输字符串,json就是一种序列化,而反序列化的工作就是将字符串再变回对象

序列化和反序列化有点像Python中的 encode()decode(),编码和解码,只不过这两个处理的都是字符串

举一个例子:

代码语言:javascript
复制
<?php
class test{
public $name = "Elapse";
public $age = "18";
}
$example=new test();
$t = serialize($example);
echo $t;
?>

$example实例化test对象

内容为 {"name":"Elapse","age":"18"}

在实际环境中,可能需要对内容进行修改,如下:

代码语言:javascript
复制
<?php
class test{
public $name = "Elapse";
public $age = "18";
}
$example=new test();
$example->name="Ernket";
$t = serialize($example);
echo $t;
?>

如果我们想要将内容传输出去的话,则需要将内容序列化,变成一串字符串后才可发送

也可以将变量储存,有需要的时候在拿出来使用,而不是二次调用,浪费系统资源

PHP中可以通过 unserialize()来将字符串转为对象,然后调出内容

代码语言:javascript
复制
<?php
class test{
public $name = "Elapse";
public $age = "18";
}
$example=new test();
$example->name="Ernket";
$t = serialize($example);
$a=unserialize($t);
echo $a->name;
?>

产生漏洞的原因

那么上面清楚了序列化和反序列化后,这里就讲一哈反序列化漏洞产生的原因

PHP中,会产生这个漏洞的一大问题,在于PHP的魔法函数,魔法函数会因为某些条件的触发而自动执行某些指定的操作

__construct()当一个对象创建时被调用 __destruct()当一个对象销毁时被调用 __toString()当一个对象被当作一个字符串使用 __sleep() 在对象在被序列化之前运行 __wakeup将在序列化之后立即被调用

举一个任意命令执行的例子

代码语言:javascript
复制
<?php
class A{
    var $test = "ls";
    function __destruct(){
            system($this->test);
    }
}
$a = $_GET['test'];
$a_unser = unserialize($a);
?>

__destruct()为当一个对象销毁时被调用,而我们可以通过反序列化的时候,调用A对象,因为PHP魔法函数的缘故,他会自动执行__destruct()的内容,接着就是system()部分

所以通过反序列化,就可以做到控制test这个变量,从而达到任意命令执行

====分割线====

参考链接:https://www.freebuf.com/articles/web/167721.html https://www.imooc.com/article/33036 https://www.freebuf.com/column/182293.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 E条咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类似前言一样的东西
  • 什么是序列化和反序列化
  • 产生漏洞的原因
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档