攻防世界WEB---unserialize3

攻防世界WEB—unserialize3

	## PHP序列化漏洞相关知识

本文仅记录我自己的学习过程

unserialize3

题目:

class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=

给出的是一个代码块页面,而且还是不完整的,在这里我们可以得到两部分内容:1.一个xctf的类;2.要返回一个code参数,还有题目提示的反序列化函数unserialize().既然是反序列化,那么code传入很有可能xctf类的序列化字符串,因此我们补齐代码试一试(PHP在线编程)

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

输出的是这样一串字符串:O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}

构造payload:code===O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}==发送,返回如下页面
在这里插入图片描述
这和上面__wakeup()函数的输出内容一样,调用了该函数,如果知道PHP魔术方法的同学就应该认识这个__wakeup函数(在反序列化时如果存在首先调用执行),就是绕过__wakeup()函数说不定就能够得到flag

百度绕过__wakeup()函数

__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行

由此重新构造payload:code===O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}==发送
在这里插入图片描述

知识点:序列化,反序列化,序列号字符串的格式,魔术方法(__wakeup())的绕过


相关的知识点

序列化和反序列化

描述:
serialize ( mixed $value ) : string
serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。

说明:
unserialize ( string $str ) : mixed
参数: 序列化后的字符串。
作用:unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。

序列化后的字符串格式

具体参照:PHP序列化_serialize_格式详解

对象(object)通常被序列化为:
O:<length>:"<class name>":<n>:{<field name 1><field value 1><field name 2><field value 2>…<field name n><field value n>}
其中<length> 表示对象的类名<class name> 的字符串长度。<n> 表示对象中的属性(字段)个数。

要注意的是:
1.私有字段的字段名在序列化时,字段名前面会加上 \0<declared class name>\0 的前缀。这里 <declared
class name> 表示的是声明该私有字段的类的类名,而不是被序列化的对象的类名,同时\0也要占据一位长度
2.静态字段在序列化时不受影响,即无法被序列化

<?php
    class test {
        public $a='1111';
        static $b='1111';
        private $c=123;
    }
    
    $a=new test();
    $s=serialize($a);
    print($s);
?>

输出:

O:4:"test":2:{s:1:"a";s:4:"1111";s:7:" test c";i:123;}

这个例子刚刚好能够说明上述的注意要点

以上面的结果了解一下字段的含义

O:对象的序列化
4:序列化对象的类名的长度
"test":序列化对象的类名
2:两个可见加的字段()
s:1:"a";s:4:"1111";:字段a的名称和值以及长度,数据类型
s:7:" test c";i:123;:同上,不过由于c是私有的变量,会加上类名

PHP魔术方法

魔术方法:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为"魔术方法"(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

和序列化反序列化有关的函数:

serialize() 函数
serialize() 会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。__sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

__wakeup()函数:
unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

__wakeup()函数绕过

百度上有这样一句话:
__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行
在早些年这样是一个漏洞曾经被爆出来过

参考链接:
PHP官方文档:https://www.php.net/manual/zh/
PHP序列化_serialize_格式详解:https://blog.csdn.net/Iamduoluo/article/details/8491746?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
[反序列化篇]反序列化漏洞之PHP反序列化全家桶(理论认知):https://blog.csdn.net/qq_43668710/article/details/105502267
其他大佬的wp:https://blog.csdn.net/wyj_1216/article/details/95320000


*如有不足之处,请告知,转载请表明出处

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pure_color xctf是一个CTF比赛平台,致力于举办和推广网络安全竞赛。 pure_color xctf的目标是为安全爱好者和专业人士提供一个学习、切磋和交流的平台。这个平台上举办的比赛覆盖了各种网络安全领域,包括但不限于网络攻防、密码学、逆向工程等。通过参与这些比赛,参赛者可以提升自己的技能,了解最新的安全威胁和攻击技术,锻炼解决问题的能力。 pure_color xctf的比赛模式多样,可以是个人或团队参与。参赛者需要在限定的时间内完成一系列的题目,这些题目可能包含漏洞分析、编程挑战、数据分析等。比赛过程中,参赛者需要运用各种技术手段,如渗透测试、代码审计、漏洞利用等,解决题目的要求。参赛者不仅需要具备网络安全相关的知识,还需要具备良好的团队合作和解决问题的能力。 此外,pure_color xctf也为参赛者提供了一个交流平台。比赛期间,参赛者可以在平台上与其他选手交流经验、讨论解题思路。参赛者也可以通过竞赛结果来评估自己的能力,并与其他选手进行切磋比拼。 总之,pure_color xctf是一个举办网络安全竞赛的平台,旨在为安全爱好者和专业人士提供学习和交流的机会,促进网络安全技术的发展。 ### 回答2: pure_color xctf 是一项竞技性的网络安全挑战赛。XCCTF 是全球知名的网络安全竞赛组织之一,而 pure_color 是该竞赛组织内的一项赛事。该赛事旨在提升参赛者的网络安全技能和知识,让他们在一个仿真的网络环境中进行攻防对抗。 在 pure_color xctf 中,参赛队伍将根据题目要求进行网络攻击和防御。这些题目有不同的难度级别,并涵盖了各种不同的网络安全技术和攻击类型。参赛队伍将需要利用他们的知识和技能,像真实的黑客一样去攻击系统漏洞,获取目标系统内的敏感信息或是直接控制目标系统。同时,他们也需要通过搭建防御策略和系统来保护自己的系统免受攻击。 pure_color xctf 不仅仅是一个交流学习的平台,也是一个展示能力的舞台。优胜的参赛队伍将会被邀请参加更高级别的网络安全竞赛和会议,进一步提升他们的技能并扩展职业网络。此外,pure_color xctf 也为参赛者提供了一个找到职业机会的平台,很多安全公司和组织会在赛事期间招聘优秀的选手。 总而言之,pure_color xctf 是一个有挑战性的网络安全竞赛,旨在通过攻击和防御对抗提升参赛者的技能,并为他们提供职业发展和展示的机会。同时,这个赛事也在促进网络安全领域的交流和合作,为提升整个网络安全行业的水平做出贡献。 ### 回答3: pure_color xctf 是一个CTF(Capture The Flag,夺旗赛)竞赛平台。CTF是一种网络安全竞赛,旨在让参赛者通过解决一系列的密码学、逆向工程、漏洞利用等问题来获取旗标,比赛者可以通过这些旗标来获取积分并竞争排名。 pure_color xctf 平台是一个为CTF竞赛提供的一个在线环境,类似于一个实验室,用于举办CTF比赛。在这个平台上,参赛者可以注册账号并加入已经发布的CTF赛事中。赛事中的题目被分为不同的难度级别,涵盖了各种安全领域的知识。参赛者需要通过解决题目中的任务来获取旗标,并将其提交到平台上进行验证。在比赛结束后,将根据参赛者解决的题目数量、用时、积分等因素来计算最终排名,并颁发奖励给获胜者。 pure_color xctf 提供了逼真的仿真环境,使得参赛者能够在一个安全的网络环境下进行实时的攻防演练。平台上的题目多样化且具有挑战性,旨在让参赛者将所学的理论知识应用到实际场景中去,并培养解决问题和团队合作的能力。同时,pure_color xctf 还为参赛者提供了交流平台,方便他们在比赛过程中与其他参赛者交流经验、技巧以及解题思路。 总之,pure_color xctf 是一个提供CTF竞赛平台的在线环境,旨在鼓励参赛者在安全领域中深入学习和实践,并通过解决各种挑战赛题目来提升技能和知识水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值