首页 > 其他分享 >2024.12.11-13——攻防世界unserialize3

2024.12.11-13——攻防世界unserialize3

时间:2024-12-13 18:29:51浏览次数:6  
标签:2024.12 11 13 对象 flag __ 字符串 序列化 属性

知识点:PHP中的序列化和反序列化

一、序列化和反序列化

1.序列化(serialize)

将对象的状态信息转换为可以存储或传输的形式的过程,简单来说,就是将状态信息保存为字符串。为了解决不同机器之间传输复杂数据类型的一种机制

2.反序列化(unserialize)

将字符串转换为状态信息。

3.最终目的

实现对象的跨平台存储、网络传输

4.魔术方法

PHP中有一类特殊的方法叫“Magic Function”,即魔术方法,PHP将所有以__(双下划线)开头的类方法保留为魔术方法,主要重点关注

__construct():当对象创建(new)时会自动调用,但在unserialize()时是不会自动调用的(构造函数)
​
__destruct():当对象操作执行完毕后(被销毁)自动执行destruct()函数的代码
​
__wakeup():unserialize()时自动调用
​
__call()方法当调用类实例中不存在的函数时自动执行

5.其他函数

  • var:理解为定义属性一般用在class函数后,表定义xx为xx类的一个属性。

  • var_dump函数:用于输出变量的相关信息,包括类型与值。

  • class函数:定义一个类,并在类中定义属性和方法。

  • public函数:是PHP中访问控制修饰符之一,用于定义类的成员(属性和方法)的可访问级别。类的成员在类的外部可以被访问和修改。

注:在PHP的OOP中,类(Class)是构成面向对象编程的基本单位。类可以包含属性(变量)和方法(函数)。

6.序列化特征值

为了能够对一个类的序列化字符序列进行反序列化,这个对象的类必须已经定义过。

如果序列类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。

以下是常用的序列化得到的字符串所代表的含义:

例如:

二、解题思路

step 1 打开靶场审题

题目为unserialize,即与反序列化有关,看页面,显示出一个不完整的PHP代码——括号都没有完全闭合。

注:这里的 ?code= 为GET传参

step 2 代码审计

_wakeup()为魔术方法,通常用于反序列化中。

unserialize() 反序列化函数会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源,比如连接数据库。

这题到目前的代码是没有看见序列化函数的,所以我们传递参数的时候是需要自己传递已经序列化的参数,题目也给了提示,是传参给code

step 3 补充代码将其序列化

将代码补充完整,将其序列化显示出来

<?php
class xctf{                    
public $flag = '111';            
public function __wakeup(){     
exit('bad requests');
}
}
$a = new xctf();          
echo(serialize($a));       
?>

将其序列化:php代码运行

目前我还没有配置好PHP运行环境,找到了一个在线网站菜鸟教程在线编辑器,可以在线运行php代码。

以上代码运行结果如下:

O:4:"xctf":1:{s:4:"flag";s:3:"111";}
“O”:代表object(为A时代表Array)
“4”:代表"xctf"占4个字符长度
"xctf":对应前面提到的长度为 4 的对象名称,也就是这个被序列化对象的名称是 xctf。
“1”:代表着对象具有一个成员属性:s代表string
{...} :花括号内的内容是具体用来描述对象中成员属性的序列化表示情况,里面包含了具体的属性名和属性值的序列化内容。
​
“s”:表示这是一个字符串(String)类型的数据,在序列化中,每个成员属性如果是字符串类型都会以 s 开头来标识。
“4”:紧跟 s 后的数字表示后面所定义的字符串(这里是属性名)的长度,也就是 flag 这个字符串长度为 4 个字符,代表的是对象的成员属性名称。字符型(如果为i,代表int型)
"flag" :对应前面长度为 4 所指的具体的字符串内容,也就是对象 xctf 里包含的这个成员属性的名称是 flag。
​
后面又出现的
s:3:"111" 同理,先是 s 标识字符串类型,3 表示后面所跟字符串内容的长度为 3 个字符,最后的 "111" 就是该成员属性(名为 flag)具体所存储的字符串值内容,即值为 111。

step 4 构造payload,进行传参

根据代码审计,我们构造出来序列化序列之后,不能给__wakeup()执行,否则会返回bad request参数,所以需要在序列化参数做些修改。

尝试传参

?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";}

得到 bad request 信息

step 5 修改payload,得到flag

这里的漏洞就是:如果我们在序列化中说明的对象个数要比实际的对象个数要大,那么将不会执行__wakeup()这个方法,即绕过 _wakeup()

所以,我们将序列化输出的对象个数改成比1大的数就行了比如:

?code=O:4:"xctf":4:{s:4:"flag";s:3:"111";}

即可得到flag。也就是证明,我们的序列化参数真实传递给了$code

标签:2024.12,11,13,对象,flag,__,字符串,序列化,属性
From: https://blog.csdn.net/2402_87387800/article/details/144457647

相关文章

  • YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,,二次创新C3k2结构
    摘要作者引入了一种称为可变形大核注意力(D-LKAAttention)的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKAAttention还受益于可变形卷积,以适应不同的数据模式。理论介绍大核卷积(LargeKernelConvolutio......
  • Android13开机向导
    文章目录前言需求-场景第三方资料说明需求思路按照平台思路从配置上去feature换个思路,去feature。SimMissingActivity判断跳过逻辑SetupWizardUtils判断SIM、hasSystemFeatureFEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManagerhasSy......
  • 【Python网络爬虫笔记】11- Xpath精准定位元素
    目录一、Xpath在Python网络爬虫中的作用(一)精准定位元素(二)应对动态网页(三)数据结构化提取二、Xpath的常用方法(一)节点选取(二)谓词筛选(三)轴操作三、Xpath在Python中的安装和使用(一)安装(二)使用Xpath提取特定内容四、Xpath在Python网络爬虫中的典型案例(一)新闻网站......
  • 【秋招笔试-支持在线评测】11.13花子_海外版秋招(已改编)-三语言题解
    ......
  • 2024.12.12 周四
    2024.12.12周四Q1.1000Youhaveanarray$a$of$n$integers.Youcannomorethanonceapplythefollowingoperation:selectthreeintegers$i$,$j$,$x$($1\lei\lej\len$)andassignallelementsofthearraywithindexesfrom$i$to$j$theva......
  • 搜索广告召回技术在美团的实践13
      美团搜索广告介绍从美团流量场景角度来看,美团搜索广告分为两大类,一是列表推荐广告;二是搜索广告。推荐广告以展现商家模式为主,通常叫商家流。搜索广告的展现形式比较丰富,有商家模式,即以商家展现为主,会挂上菜品/商品;还有商品模式,即以商品展现为主,以呈现商品大图、商品标题等......
  • 【每日一题】20241213
    【每日一题】伽利略曾设计如图\(1\)所示的一个实验,将摆球拉至\(M\)点放开,摆球会达到同一水平高度上的\(N\)点.如果在\(E\)或\(F\)处钉子,摆球将沿不同的圆弧达到同一高度的对应点;反过来,如果计摆球从这些点下落,它同样会达到原水平高度上的\(M\)点.这个实验可以说明,物体......
  • 12.11日报
    今天完成软件设计实验二十四模板方法模式,以下为今日实验内容:实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。     [实验任务一]:数据库连接对......
  • 11.28日报
    今日完成软件设计实验二十备忘录模式,以下为实验内内容:实验20:备忘录模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解备忘录模式的动机,掌握该模式的结构;2、能够利用备忘录模式解决实际问题。[实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系......
  • 11.29日报
    今天完成机器学习B的实验,以下为实验部分代码:fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_split,cross_val_scorefromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_score,precision_score......