type
status
date
slug
summary
tags
category
icon
password
upload1
上传一个she.php%00.jpg发现回显给我一个xxx.she.php%00.jpg
就知道没有给我隔断,但是思路也有了,他直接多给了一个参数. 那我其实只需要把名字设为php就可以成功连接上了,说干就干

成功注入

之后就可以连接蚁剑进行查找flag了

upload3:

在上传头像处上传php文件


在此处可以看到上传的路径
是成功上传了,但是默认上传的是png格式。我们需要把它改为php格式
回想到题目上给了
www.tar.gz,猜测是一个目录,在url上拼接该目录成功获取源码
解压时发现下面问题(尝试更改压缩包格式):


成功拿到文件。然后然后就没有后续了菜菜/(ㄒoㄒ)/~~
看了大佬的wp发现https://blog.csdn.net/qq_46263951/article/details/122429013
先找到profile配置文件

Profile.php:
为什么cookie值需要序列化: Cookie 存储限制:Cookie 的值只能是字符串,无法直接存储对象、数组等复杂数据结构。 数据转换需求:$this->checker->profile 假设是一个对象或数组(例如包含用户配置、属性的复合数据),需先通过 serialize 将其转换为字符串格式(序列化后的字符串),才能存入 Cookie。
关键
Profile.php代码:
代码审计:
在Profile文件中进行代码审计后,我们发现代码思路:
登录验证 → 2. 接收文件 → 3. 改文件名(强制.png)→ 4. 检查是不是图片 → 5. 保存文件 → 6. 存数据库和 Cookie。
以此创建一个对应的poc脚本:
主要目的是为了更改文件类型为php,因为它默认是png格式
魔术方法:
__call() //在对象上下文中调用不可访问的方法时触发
__get() //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义
解析:
__get(‘index’) 返回 $this->except[‘index’],而 $profile->except = [‘index’ => ‘img’],所以 $this->index 的值是 ‘img’。
还要构造一个__destruct()(析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行)
filename_tmp变量存储的是已上传文件的临时路径;
filename变量指定的是最终要保存的目标路径;
upload_img方法负责将临时文件移动到目标位置;
$this->filename = md5(…).”.png”; 看似不能控制?但我们通过漏洞链可以伪造这个值!
Poc思路:
反序列化漏洞导致
用户可控的Cookie数据且没有做任何安全检查!
相当于允许黑客在Cookie里塞入任意PHP对象的构造指令。
更改掉此处的cookie值。

反序列化是目标站在加载 cookie 时自动触发的
目标站点自己有逻辑会从 cookie 中
unserialize() 用户对象。
举个常见例子(很多 ThinkPHP 或原生 PHP 框架中常有):// 后面直接使用 userdata[′img′]、user_data[‘username’] 等
攻击者伪造的 cookie 被当作用户对象处理,自动触发 __destruct() → 进入利用链 → 写马
这时候再去用蚁剑连接就成功连接到后台


unserialize3
开始给出这个下面的代码:

可以看出
要绕过
__wakeup 方法获取 flag,核心是利用 PHP 反序列化的 __wakeup 方法触发条件漏洞:当反序列化字符串中声明的属性个数大于实际对象的属性个数时,__wakeup 方法会被跳过执行
目标类 xctf 实际只有 1 个公开属性 $flag(实际属性个数为 1)。
所以我们要构造反序列化字符串时,将属性个数声明为 大于 1(例如 2),即可绕过 __wakeup 方法。首先 正常序列化结果:0:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
修改属性个数后序列化结果:0:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
所以我们只需要在url后面拼接上?code=0:4:“xctf”:2:{s:4:“flag”;s:3:“111”;} 即可解得flag
- 作者:zhiles小屋
- 链接:https://tangly1024.com/article/2025/06/21
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章

