反序列化相关题目解题记录

[SWPUCTF 2022 新生赛]1z_unserialize

打开题目

分析源码

首先定义了一个名为lyh的类和三个全局变量,其中$url被初始化为字符串‘NSSCTF.com’,$lt和$ily未初始化

然后魔术方法_destruct()在对象被销毁是自动调用,在代码中,试图执行$lt作为函数,传入$ily作为参数

下面unserialize($_POST['nss'])为反序列化

将 $a 赋值为 system ,也就是将 $this->lt 赋值为 system 即可(system 函数是一个执行外部程序并显示其输出的函数)

传入nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";} 

解释:nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";} 

O:表示class   3:表示类名lyh长度为3   :3表示有三个属性   {...}括号内包含了属性的序列化表示      s:3:"url";s:10:"NSSCTF.com";表示第一个属性为url,长度为3,他的值为字符串NSSCTF.com长度为10

s:2:"lt";s:6:"system"表示第二个属性it,长度为2,他的值为字符串system,长度为6

s:3:"lly";s:9:"cat/flag"表示第三个属性lly,长度为3,值为字符串cat/flag,长度为9,这将会是传递给system函数的命令,用于读取/flag文件的内容

[SWPUCTF 2022 新生赛]ez_ez_unserialize

打开题目

分析源码

首先定义了一个名为x的类,然后定义了一个公共属性$x并初始化为当前文件的路径(_FILE_为一个魔术常量,表示当前文件的完整路径和文件名)

function_construct()为类的构造函数,当创建新实例时自动调用,他接受一个参数并将其赋值给属性$x

function_wakeup()为当对象被反序列化时,_wakeup会自动调用,实现检查$x属性值是否不等于当前文件的路径,若不等于,会将$x重新设置为当前文件的路径

function_destruct为当对象被销毁时自动调用,此处为高亮显示$x指定内容

由注释可得到信息为flag在名为fllllllag.php的文件中

if (isset($_REQUEST['x'])) 用于检查是否有一个名为x的请求参数

@unserialize($_REQUEST['x']);  若x参数存在,进行反序列,@用于抑制由@unserialize产生的错误或警告

若没有x请求参数,代码将会高亮显示当前文件内容

这个题目关键在于绕过_wakeup(绕过方式:序列化字符串中表示对象属性个数的值大于真实属性个数时可以跳过_wakeup)

输入?x=O:1:"x":2:{s:1:"x";s:13:"fllllllag.php";}

得到flag

[SWPUCTF 2021 新生赛]ez_unserialize

打开靶机发现

查看源码

发现有robots.txt

在这一部分中User-agent:*是一个适用于所有网络爬虫的通用规则

Disallow:什么东西呢?是一个无用的robotx.txt规则。因为通常Disallow:后应该是一个路径或路径模式

先上传一个robots.txt看一下,发现给出了一个路径

将路径上传,发现php代码

分析源码

首先关闭了所有错误报告然后定义了一个名为wlim的类,其中有两个全局变量$admin和$passwd,两个魔术方法_construct() , _destruct()

_construct()为构造函数,自动调用,使admin的值为user,passwd的值为123456

_destruct()在对象被销毁时调用,若admin的值为admin且passwd的值为ctf,则执行flag.php文件输出flag,否则输出admin和passwd的值和字符串just a bit more

$p=$_GET['p']从URl的p参数中获取值,储存在变量p中

unserialize($p)对p中的值进行反序列化

通过分析源码发现传入?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}即可

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值