返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >渗透学习之PHP--序列化
  • 454
分享到

渗透学习之PHP--序列化

学习php 2023-09-04 05:09:59 454人浏览 安东尼
摘要

1.1什么是序列化 序列化. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程 1.2PHP如何序列化数据? 大多数情况下,我们需要将复杂的数组存储在数据库中或PHP中的文件中。有些人可能会使用php

1.1什么是序列化

序列化. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程

1.2PHP如何序列化数据?

大多数情况下,我们需要将复杂的数组存储在数据库中或PHP中的文件中。有些人可能会使用php内置函数来完成这项任务。所谓复杂数组是具有多个数据类型或数组的元素的数组。

1.3序列化实现


PHP序列化处理共有几种,分别为php、php_serialize、php_binary和WDDX(需要编译时开启支持),默认为php,可通过配置中的 session.serialize_handler 修改。

如果 PHP 编译时加入了 WDDX 支持,则只能用 WDDX,WDDX从PHP 7.4版本后开始弃用。从 PHP 5.5.4 起可以使用 php_serialize。 php_serialize 在内部简单地直接使用 serialize/unserialize 函数,并且不会有 php 和 php_binary 所具有的限制。

其中PHP处理器的格式为:键名 + 竖线 + 经过serialize()函数序列化处理的值。

其中php_binary处理器的格式为:键名的长度对应的 ASCII 字符 + 键名 + 经过serialize()函数序列化处理的值。

其中php_serialize处理器的格式为:经过serialize()函数序列化处理的数组。

1.4  序列化格式

boolean     b:;    b:1; // true    b:0; // false integer     i:; double     d:; NULL     N; string     s::"";    s:1:"s"; array     a::{key, value};    a:1:{s:4:"key1";s:6:"value1";} // array("key1" => "value1"); object     O::""::{}; reference     指针类型    R:reference;    O:1:"A":2:{s:1:"a";i:1;s:1:"b";R:2;}    $a = new A();$a->a=1;$a->b=&$a->a;

1.5  private与protect

private与protect变量和public变量不同,不能直接设置。

private属性只能在其被定义的类内部访问,且不会被继承,在属性前加上类名,即 %00className%00 用于标定其是私有的。

protected属性可以在父类和子类中访问,变量前添加 %00*%00 用于标定其是受保护的。

1.6 反序列化漏洞

php在反序列化的时候会调用 __wakeup / __sleep 等函数,可能会造成代码执行等问题。若没有相关函数,在析构时也会调用相关的析构函数,同样会造成代码执行。

另外 __toString / __call 两个函数也有利用的可能。

其中 __wakeup 在反序列化时被触发,__destruct 在GC时被触发, __toString 在echo时被触发, __call 在一个未被定义的函数调用时被触发。

tips:PHP __destruct触发时间 (GC)

1 对象被null
2 对象被unset
3 对象用完自动触发

1.7 利用点

 SoapClient 原生利用

php中的SoapClient类可以创建soap数据报文,在非wsdl模式下,SoapClient的实例反序列化的时候会对第二个参数指明的url进行soap请求,该特性可用于SSRF。

tips:(1条消息) SoapClient原生类在开发以及安全中利用_合天网安实验室的博客-CSDN博客_soapclient

其中wdsl接口 WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与WEB服务通讯和使用的服务描述

 ZipArcHive 原生利用

php原生类 ZipArchive::open() 中的flag参数如果设置为 ZipArchive::OVERWRITE 时,会删除指定文件,该特性在一定条件下可以用于删除文件。

PHP Session中的利用

PHP中的Session的实现是没有的问题,危害主要是由于程序员的Session使用不当而引起的。
如果在PHP在反序列化存储的$_SESSION数据时使用的引擎和序列化使用的引擎不一样,会导致数据无法正确第反序列化。通过精心构造的数据包,就可以绕过程序的验证或者是执行一些系统的方法

$_SESSION['ryat'] = '|O:11:"PeopleClass":0:{}';

上述的$_SESSION的数据使用php_serialize,那么最后的存储的内容就是a:1:{s:6:"spoock";s:24:"|O:11:"PeopleClass":0:{}";}

但是我们在进行读取的时候,选择的是php,那么最后读取的内容是:

array (size=1)  'a:1:{s:6:"spoock";s:24:"' =>     object(__PHP_Incomplete_Class)[1]      public '__PHP_Incomplete_Class_Name' => string 'PeopleClass' (length=11)

这是因为当使用php引擎的时候,php引擎会以|作为作为key和value的分隔符,那么就会将a:1:{s:6:"spoock";s:24:"作为SESSION的key,将O:11:"PeopleClass":0:{}作为value,然后进行反序列化,最后就会得到PeopleClas这个类。
这种由于序列话化和反序列化所使用的不一样的引擎就是造成PHP Session序列话漏洞的原因。

具体利用请看 PHP中SESSION反序列化机制 | Spoock

Phar反序列化

phar反序列化就是可以在不使用php函数unserialize()的前提下,进行反序列化,从而引起的严重的php对象注入漏洞

Phar是将php文件打包而成的一种压缩文档,类似于Java中的jar包。它有一个特性就是phar文件会以序列化的形式储存用户自定义的meta-data。以扩展反序列化漏洞的攻击面,配合phar://协议使用。

来源地址:https://blog.csdn.net/qq_62886656/article/details/127153207

--结束END--

本文标题: 渗透学习之PHP--序列化

本文链接: https://lsjlt.com/news/392958.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 渗透学习之PHP--序列化
    1.1什么是序列化 序列化. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程 1.2PHP如何序列化数据? 大多数情况下,我们需要将复杂的数组存储在数据库中或PHP中的文件中。有些人可能会使用PHP...
    99+
    2023-09-04
    学习 php
  • 渗透学习笔记
    渗透学习笔记 首先给出一个网站,该网站收录了各种红队渗透工具: https://github.com/guchangan1/All-Defense-Tool 信息收集 信息收集需要收集资产的企业备案、...
    99+
    2023-09-11
    网络安全 web安全 sql php
  • python3学习之序列化
    其他-->字符串,叫序列化字符串-->其他,叫反序列化有两个模块:json   可以处理python基本数据类型,字典,列表,元组,保存的文件是“明文的”pickle 可以处理python全部数据类型,专用于python,保存的...
    99+
    2023-01-31
    序列化
  • 【渗透测试学习】—记录一次自测试渗透实战
    写在前面 本文是作者入门web安全后的第一次完整的授权渗透测试实战,因为最近在总结自己学习与挖掘到的漏,无意中翻到了这篇渗透测试报告,想当初我的这篇渗透测试报告是被评为优秀渗透测试报告的,故在此重新整了一下,分享一下自己的思路与骚操作给大家...
    99+
    2023-09-02
    php python 学习 运维 网络
  • 我的MSF之Android木马渗透的学习笔记
    免责声明:以下内容仅供学习参考,如果用于任何非法途径,后果自负,希望大家做一个遵纪守法的好公民,一起保护国家的的网络安全!!! 文章目录 环境准备一、入侵操作1.木马制作2.开启http服务3.靶机下载木马4.安装木马5.监听...
    99+
    2023-08-23
    android kali msf
  • msf渗透练习-php后门反弹
    说明: 本章内容,仅供学习,不要用于非法用途(做个好白帽) (一)后门反弹是什么 后门反弹是指攻击者在成功入侵一台计算机后,在目标计算机上安装一个“后门程序”,将该程序与反向Shell连接在一起。这种“后门程序”通常是一个被精心编写...
    99+
    2023-08-31
    php 网络安全
  • PHP反序列化新手入门学习总结
    最近写了点反序列化的题,才疏学浅,希望对CTF新手有所帮助,有啥错误还请大师傅们批评指正。 php反序列化简单理解 首先我们需要理解什么是序列化,什么是反序列化? PHP序列化:serialize()...
    99+
    2023-09-06
    php PHP反序列化 CTF
  • Python学习笔记 --- 序列化Se
    序列化 (serialization) 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化, 它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 序列化和反序列化的目的   1、以某种存储形式使自定义...
    99+
    2023-01-31
    学习笔记 序列化 Python
  • C++11系列学习之列表初始化
    目录前言:旧标准初始化方式C++11标准初始化方式初始化列表技术细节总结前言: 由于旧标准初始化方式太过繁杂,限制偏多,因此在新标准中统一了初始化方式,为了让初始化具有确定的效果,于...
    99+
    2024-04-02
  • 文件上传漏之upload靶场练习——渗透day12
    一、靶场准备         将upload解压在PhpStudy2018\PHPTutorial\WWW\upload          二、靶场练习过程         (一)、pass-01                    ...
    99+
    2023-09-26
    安全 xss html
  • C++学习之初始化列表详解
    目录前言一、类的初始化表二、initializer_list前言 本文主要介绍C++中地初始化列表 目前对初始化列表应该有两个方面的定义,一个是类的构造函数中使用的那个初始化表,另一...
    99+
    2023-03-19
    C++初始化列表 C++ 列表
  • C++学习笔记之初始化列表
    目录一、用初始化列表初始化对象1.初始化列表用法2.初始化列表特性二、explicit关键字1.内置类型的隐式转换2.如何避免单参构造函数初始化发生隐式类型转换三、匿名对象1.匿名对...
    99+
    2023-05-17
    c++ 初始化列表 如何初始化列表 c++ 初始化
  • 详解SpringMVC学习系列之国际化
    在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单、标题等)做国际化处理呢?这就是本篇要将的内容—>国际化。一.基于浏览器请求的国际化实现:首先配置我们项目...
    99+
    2023-05-31
    spring mvc 国际化
  • python学习之列表
    序列是python的最基本数据结构,序列的每个元素都分配一个数字,它的索引,第一个是0,第二个是1,依次类推;python的6个内建的序列分别是列表,元祖,字符串,unicode字符串,buffer对象和xrange对象;序列通用操作包含...
    99+
    2023-01-31
    列表 python
  • python3学习之列表
    列表:L.append(object)   追加备注:append将obj作为一个整体追加,无论obj是字符串、数字、字典、列表等,当是字典时全部插入,跟L.extend(iterable) 不同test = [1,2,3,4,5]test...
    99+
    2023-01-31
    列表
  • 网络安全渗透测试反序列化漏洞分析与复现工作
    目录0x00 概述0x01 服务分析0x02 漏洞分析0x03 POC构造0x04 总结0x00 概述 GENESIS64...
    99+
    2024-04-02
  • PHP序列化和反序列化
    一.什么是序列化和反序列化 php类与对象 类是定义一系列属性和操作的模板,而对象,就是把属性进行实例化,完事交给类里面的方法,进行处理。 `。尝试构造payload: ...
    99+
    2023-08-31
    php 开发语言
  • PHP反序列化漏洞之产生原因(题目练习)
    1、反序列化漏洞的产生 PHP反序列化漏洞又叫做PHP对象注入漏洞,是因为程序对输入的序列化后的字符串处理不当导致的。反序列化漏洞的成因在于代码中的unserialize()接收参数可控,导致代码执行,SQL注入,目录遍历,getshell...
    99+
    2023-09-09
    php 安全 web安全
  • < 渗透测试学习指南 > python编写目录遍历工具
    转载请注明作者及出处:         在编写目录遍历工具之前,我们首先要搭建一个WordPress框架环境,用以实践我们稍后编写出的工具。这里推荐大家通过在kali linux安装小皮面板搭建环境,毕竟用小皮搭环境是真方便(真香!) ...
    99+
    2023-09-03
    web安全 python php 系统安全 网络
  • 网络安全渗透测试反序列化漏洞分析与复现的方法
    这篇文章主要介绍了网络安全渗透测试反序列化漏洞分析与复现的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇网络安全渗透测试反序列化漏洞分析与复现的方法文章都会有所收获,下面我们一起来看看吧。0x00...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作