作者名:Demo不是emo 

主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构

每日emo:我并不是一直都这样沉默的

目录

一、什么是序列化?

二:初识反序列化漏洞

三: 漏洞产生原理

四: 序列化简析

五:反序列化简析

六:反序列化漏洞攻击

七:攻击案例

七:反序列化漏洞修复


一、什么是序列化?

序列化是将变量或对象转换成字符串的过程。

二:初识反序列化漏洞

就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量,如果我们让这个class一直不销毁,等着下一次要用它的时候再一次被调用的话,浪费系统资源。当我们写一个小型的项目可能没有太大的影响,但是随着项目的壮大,一些小问题被放大了之后就会产生很多麻烦。这个时候PHP就和我们说,你可以把这个对象序列化了,存成一个字符串,当你要用的时候再放他出来就好了。在我们讲PHP反序列化的时候,基本都是围绕着serialize()unserialize()这两个函数。

三: 漏洞产生原理

serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的,之所以会产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。

当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害

四: 序列化简析

来看一段php序列化操作的代码

 class S{public $test="pikachu";}$s=new S(); //创建一个对象serialize($s); //把这个对象进行序列化

这段代码是将"pikachu"进行序列化操作,序列化后得到的结果是

O:1:"S":1:{s:4:"test";s:7:"pikachu";}
        O:代表object1:代表对象名字长度为一个字符 (即“S”)S:对象的名称1:代表对象里面有一个变量s:数据类型   (string 字符串)4:变量名称的长度test:变量名称s:数据类型    (pikachu 同样为字符串string)7:变量值的长度pikachu:变量值

对于对象,序列化后的格式为:

O:strlen(类名):类名:类的变量个数:{类型:长度:值;类型:长度:值…}

其他类型的数据序列化后的格式为:

String类型 :s:size:valueInteger类型 :i:valueBoolean类型 : b:value (保存1或0)Null型 :N Array :a:size:{key definition;value definition}

还有需要注意的点是:分割不同字段以}结尾,这对反序列化很重要

五:反序列化简析

与 serialize() 对应的,unserialize()可以从已存储的表示中创建PHP的值,单就本次所关心的环境而言,可以从序列化后的结果中恢复对象(object)。

<?php
class chybeta{var $test = '123';
}
$class2 = 'O:7:"chybeta":1:{s:4:"test";s:3:"123";}';   print_r($class2);
echo "</br>";
$class2_unser = unserialize($class2);
print_r($class2_ser);
?>

这里提醒一下,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

六:反序列化漏洞攻击

序列化反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题.

常见的几个魔法函数:     //不同场景下被自动调用

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

七:攻击案例

代码举例

class S{var $test = "pikachu";function __destruct(){echo $this->test;    //一旦S这个类被创建,则将会自动使用魔法函数。当对象被销时,则下面的操作会被自动执行} }$s = $_GET['test'];@$unser = unserialize($a);

则payload如下

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

反序列化的内容是从用户前端传过来的,若从前端传来的内容中插入了恶意的反序列化的内容,后台检测到会对内容进行反序列化,则通过反序列化的接口造成XSS漏洞。

七:反序列化漏洞修复

1、安全配置好php相关参数

通过Php配置文件里面有个disable_functions = 配置,这个禁止某些php函数, 服务器便是用这个来禁止php的执行命令函数。 例如: disable_functions =system,passthru,shell_exec,exec,popen 便禁止了用这些函数来执行系统命令

2、升级中间件

3、严格控制传入变量,严谨使用魔法函数

【疑难攻关】——反序列化漏洞快速入门相关推荐

  1. php反序列化漏洞 freebuf,入门Web需要了解的PHP反序列化漏洞

    前言 最近才开始学习安全,虽然练习过南邮CTF和Bugku的CTF,但是打各种线上CTF经常不尽人意,因为最近的比赛都有着一个新手入门CTF不常遇到的考点-----反序列化. 看了很多师傅们,各种前辈 ...

  2. PHP反序列化漏洞-从入门到提升

    目录 第一章 PHP序列化基础 1.1 PHP序列化 1.1.1 PHP序列化概述 1.1.2 标准序列化 1.1.3 自定义序列化 1.1.4 序列化存储和转发 1.2 PHP反序列化 1.2.1 ...

  3. 【web安全】——XXE漏洞快速入门

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:一切为了她 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构 每日emo:该怎么开口呢?今晚天气不错,但还是想你了 目 ...

  4. JBoss5.x6.x 反序列化漏洞

    JBOSS 下载地址:http://download.jboss.org/jbossas/6.1/jboss-as-distribution-6.1.0.Final.zipEXP 下载地址:https ...

  5. php initlize,PHP 反序列化漏洞入门学习笔记

    参考文章: 序列化和反序列化的概念 序列化就是将 对象.string.数组array.变量 转换成具有一定格式的字符串. 具体可以看 CTF PHP反序列化,下图摘自此篇文章 其实每个字符对应的含义都 ...

  6. CTF-PHP反序列化漏洞5-反序列化字符逃逸

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  7. CTF-PHP反序列化漏洞1-基础知识

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  8. 带你快速入门RabbitMQ(附思维导图,案例代码)

    RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应. 异步通讯:就像发邮件,不需要马上回复. 两种方式各有优劣,打电话可以立 ...

  9. 渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

    漏洞数据库:https://www.exploit-db.com/google-hacking-database 1.渗透测试 实用 浏览器插件 chrome.edge 插件:搜索 cookie,安装 ...

最新文章

  1. 关于WordPress中字体加载慢的问题解决方案(转)
  2. [JAVA][Liferay] Configure sharding in multiple sites
  3. redis as session_handler
  4. 《Adobe Photoshop CC经典教程(彩色版)》—第4课4.7节添加调整图层
  5. highlight js 为博客增加代码着色
  6. python selenium 用法 和 Chrome headless
  7. Go1.17新特性 ,给我们带来了10%的性能提升
  8. java tdd测试驱动开发_测试驱动开发TDD(test drive development)
  9. jsp+servlet实现最基本的注册登陆功能
  10. 突然发现,工作已满四年了
  11. 残差灰色模型matlab,数学建模+灰色预测模型+MATLAB详解.doc
  12. PMP考试要多少费用
  13. SaaS第一,股价暴涨,25年的金蝶迎来第二春
  14. [SPRD]展锐Android R关机充电动画修改
  15. 计算机端口怎么配置波特率,西门子plc波特率如何设置?
  16. 解决Win11或Win10版本配置IDEA的JDK1.8的版本以及java环境是否成功配置的问题
  17. 机器人学基础--运动学--2.3 变换矩阵
  18. 盘点,7个关键字,看电信物联网2022发展情况
  19. 朴素贝叶斯分类器之分类实操
  20. 2022-2027年中国机器人伺服电机行业发展前景及投资战略咨询报告

热门文章

  1. 问题之PreparedStatement executeBatch() 更新仅部分有效
  2. 使用U盘重装电脑操作系统
  3. python documentation弹出_为什么在使用python idle时,会弹出python documentation?
  4. Centos7 Mondo 制作系统iso镜像文件
  5. 零基础学习 Python 之初识生成器
  6. 新商盟订烟自动获取可订烟数量及自动填充数量
  7. 课程设计题一:八人抢答器
  8. 红帽linux系统备份指令,redhat Linux系统tar、gzip、zip等压缩命令
  9. php md5加密(并小写),PHP常见加密函数用法示例【crypt与md5】
  10. 香港大学一实验室突发爆炸!博士生操作失当致另一博士生面部严重灼伤