WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类

news2025/6/17 2:52:09

目录

一、序列化和反序列化

二、为什么会出现反序列化漏洞

三、序列化和反序列化演示

<演示一>

<演示二>

<演示二>

四、漏洞出现演示

<演示一>

<演示二>

四、ctfshow靶场真题实操

<真题一>

<真题二>

<真题三>

<真题四>


一、序列化和反序列化

  • 序列化:对象转换为数组或字符串等格式

        serialize()              //将一个对象转换成一个字符串

  • 反序列化:将数组或字符串等格式转换成对象

        unserialize()          //将字符串还原成一个对象

  • 比如我们在传输类似这种内容的时候,内容里包括很多空格,传输起来容易发生错误,也比较浪费空间。

  • 因此就将其转换为了字符串或者数组的形式去发送,之后再进行反序列化就可以将原本的数据输出出来,这样可以使数据传输更加稳定,效率也更高。

二、为什么会出现反序列化漏洞

        在php里有时会存在一些魔术方法,可以控制优先执行什么或者初始化什么,但是如果魔术方法使用不当,就可能会造成反序列化漏洞。

         原理 :未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
        魔术方法利用点分析:
触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
__construct():     //构造函数,当对象 new 的时候会自动调用
__destruct():    //析构函数当对象被销毁时会被自动调用
__wakeup():     //unserialize()时会被自动调用
__invoke():     //当尝试以调用函数的方法调用一个对象时,会被自动调用
__call():     //在对象上下文中调用不可访问的方法时触发
__callStatci():     //在静态上下文中调用不可访问的方法时触发
__get():     //用于从不可访问的属性读取数据
__set():     //用于将数据写入不可访问的属性
__isset():     //在不可访问的属性上调用 isset()或 empty()触发
__unset():     //在不可访问的属性上使用 unset()时触发
__toString():     //把类当作字符串使用时触发
__sleep():     //serialize()函数会检查类中是否存在一个魔术方法__sleep(),如果存在,该方法会被优先调用

三、序列化和反序列化演示

<演示一>

1.这里是一段经典的系列化和反序列化的代码。

2.先将后两行注释掉,仅让其输出$s,可以看到其内容如下。

3.下面是对其序列化的内容的解释。

4. 将代码修改成下面的样式。

5.将$u输出出来如下图所示。

6.完整的解释如下图所示。

        总结:就是一种典型的数据传输方法,可以更好的保证代码的正确性和完整性。

<演示二>

1.再来看一段代码。
        魔术方法通常就是看其前面有没有两个下划线——“__”

2.我们首先将代码更改成下面的样式。

 3.此时访问可以可到下面的返回结果。

4.这里我们仅仅创建了一个对象,就将下面的两个函数给调用了,从而输出了对应的内容。

        总结:无需函数,创建对象就会调用魔术方法。 

<演示二>

1.再来看一段代码。

 2.执行结果如下图所示。

3.我们将代码更改为下面的样式。

 4.将上面序列化后的代码使用参数上传上去。

 5.网页返回下面的结果。 

6.在代码里我们没有进行创建,但是仍然返回的end,是因为我们上传了序列化的内容,此时默认就进行了调用。

7.将代码再次更改。

8.此时再次执行可以发现test()被触发出来了。

         总结:传递序列化字符串,就相当于默认实现获取对象里的数据,包括调用里面的函数,也就是说即使不去创建对象,也能够触发对象里的变量以及函数,触发过程就是按照魔术方法的触发逻辑,

四、漏洞出现演示

<演示一>

1.打开下面的代码。

2.创建一个对象,会先调用__construct,然后销毁调用__destruct。运行结果如下图所示。

3.更改代码然后执行,将序列化字符串输出出来然后复制。

4.将代码更改成下图样式。

5.将序列化的代码当作参数进行上传,之后可以看到页面内依然返回了ipconfig执行结果。相当于此时没有创建对象,只是输入了序列化字符串,就默认调用了__destruct代码。

<演示二>

1.打开下面的代码。

 2.此时访问后,会先执行__construct,显示“xiaodisec”,然后回执行__destruct,执行系统命令ipconfig。 

3.更改代码然后访问,来获取cc的序列化代码。

4.将代码更改为下面的样式来接收序列化的代码c。

5.将序列化代码c当作参数提交,此时执行了__destruct,没有执行__construct,因为我们这里皆有进行“new”操作。

6.此时我们可以想到更改参数c的内容来执行一些其它的命令,下面进行尝试。

7.将参数里的ipconfig更改为“var”,然后将前面的长度改为“3”,执行后可以得到下面的返回结果,成功执行了“var”命令。

        这里就是序列化漏洞的核心点,前面讲解的所有都是为这一步做准备!

        总结:在反序列化操作里,对象里设置好的一些变量也可以进行修改,这里就是将ipconfig修改成了ver。也就是说,有时只要创建对象,就会调用对象内的魔术方法;或者当类似于unserialize的这种函数出现时,即使没有创建对象,也可以通过控制输入的参数,去让它调用对象里的内容。

        这种漏洞一般出现在白盒里,在黑盒里要想发现几乎是不可能的,因为需要看到源代码对源代码的代码逻辑进行分析后才能分析到是否存在反序列化漏洞。

四、ctfshow靶场真题实操

        靶场地址:ctf.show

<真题一>

1.找到对应题目进入靶场。 

2.打开靶场。

3.进入靶场。

4.分析代码后得到下面的解题思路:

  • 首先触发vipOneKeyGetFlag。
  • 然后让$this->isVip为真即可。

5.继续分析代码:

  • 仅需让username='xxxxxx';password='xxxxxx'即可。 

 6.开始操作。

http://eaece883-4d1b-411b-989d-b09aae68b5df.challenge.ctf.show/?username=xxxxxx&password=xxxxxx

7.成功得到了flag。

<真题二>

1.找到对应题目进入靶场。 

 2.打开靶场。

3.进入靶场。

4.分析代码后可以想到进行下面的操作。

5.将POP链复制下来。

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

6.打开Hack Firefox访问靶场链接。

7.使用burp抓包。

8.将抓到的数据包发送到Repeater。 

9.根据源代码可以知道它接收的是cookie里的user数据,并且会检测username和password因此对数据包进行下面的修改。

10.放包后可以看到成功获取到了flag。

<真题三>

1.找到对应题目进入靶场。 

 2.打开靶场。

 3.进入靶场。

4.分析代码后可以想到进行下面的操作。

 5.将POP链复制下来。

O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A1%3A%22x%22%3Bs%3A8%3A%22password%22%3Bs%3A1%3A%22y%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

6.打开Hack Firefox访问靶场链接。

7.使用burp抓包。

 8.将抓到的数据包发送到Repeater。 

9.根据源代码可以知道它接收的是cookie里的user数据,并且会检测username和password因此对数据包进行下面的修改,然后放包。

10.可以看到成功获取到了flag。

<真题四>

1.找到对应题目进入靶场。 

 2.打开靶场。

3.进入靶场。

4.这关里可以看到有多个class,因此我们就先要看哪个地方能获取到flag,但是我们并没有找到直接和flag相关的操作,但是我们在下面看到了函数eval。

        补充: eval()函数可以把字符串按照php代码来执行。

5.因为这里只可能eval会与flag相关,所以我们就判断谁会触发eval。

6.可以看到getInfo会触发eval,__destruct会触发getInfo,而__destruct触发时class='info',当将'info'修改成backDoor后就可以调用到eval函数了。

7.复制class代码到在线工具内,然后将无用的代码删除后修改,之后执行。 

O%3A11%3A%22ctfShouUser%22%3A1%3A%7Bs%3A18%3A%22%00ctfShouUser%00class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A14%3A%22%00backDoor%00code%22%3Bs%3A17%3A%22system%28%22cat+f%2A%22%29%3B%22%3B%7D%7D

8.打开Hack Firefox访问靶场链接。

9.使用burp抓包。

 10.将抓到的数据包发送到Repeater。  

9.对数据包进行下面的修改然后放包,可以得到flag。

10.成功获取到了flag。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++入门到入土(一)

C语言中&#xff0c;我们这样定义&#xff0c;输出100。 因为局部作用域的访问权限大于全局作用域的。 当我们加入头文件#include <time.h>的时候&#xff0c;就会报错 看报错&#xff0c;我们也知道&#xff0c;time重定义&#xff0c;因为我们头文件time.h里面有time函…

验证码识别过程中切割图片的几种方案

目录 方案一&#xff1a;图片均分 方案二&#xff1a;寻找轮廓并截取 方案三&#xff1a;聚类算法 方案四&#xff1a;垂直投影法 源码下载 在用机器学习识别验证码的过程中&#xff0c;我们通常会选择把验证码中的各个字符切割出来然后单独识别&#xff0c;切割质量会直接…

JS Hook 基本使用

前言 Hook技术也叫钩子函数&#xff0c;功能是把网站的代码拉出来&#xff0c;改成我们自己想执行的代码片段&#xff0c;简单来说就是可以控制执行函数的入参和出参&#xff1b; 一、资源下载 编程猫插件&#xff1a;https://pan.baidu.com/s/1SP8xHoDpugssFRpu-nLxPw?pwdz…

ARM 编译器 Arm Compiler for Embedded 6 相关工具链简介

目录 1, Introduction to Arm Compiler 6 1.1 armclang 1.2 armasm 1.3 armlink 1.4 armar 1.5 fromelf 1.6 Arm C libraries 1.7 Arm C libraries 1,8 Application development &#xff0c;ARM程序开发流程 2&#xff0c;ARM 编译器 5和ARM 编译器 6的兼容性 3&…

Opencv项目实战:22 物体颜色识别并框选

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示与部分讲解 Color_trackbar.py bgr_detector.py test.py 4、项目资源 5、项目总结 0、项目介绍 本次项目要完成的是对物体颜色的识别并框选&#xff0c;有如下功能&#xff1a; &#xff08;1&#xff09;…

【权限提升】Linux Sudo权限提升漏洞(CVE-2023-22809)

文章目录前言一、Sudo介绍二、漏洞概述三、漏洞成因四、漏洞分析五、影响版本六、本地复现七、修复建议前言 Sudo存在权限提升漏洞,攻击者可过特定的payload获取服务器ROOT权限 一、Sudo介绍 sudo (su " do")允许系统管理员将权限委托给某些用户(或用户组),能够以…

网络安全与防御

1. 什么是IDS&#xff1f; IDS(入侵检测系统)&#xff1a;入侵检测是防火墙的合理补充&#xff0c;帮助系统对付网络攻击&#xff0c;扩展了系统管理员的安全管理能力&#xff0c;提高了信息安全基础结构的完整性。主要针对防火墙涉及不到的部分进行检测。 入侵检测主要面对的…

ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)

​ 一、AI框架重要性日益突显&#xff0c;框架技术发展进入繁荣期&#xff0c;国内AI框架技术加速发展&#xff1a; 1、AI框架作为衔接数据和模型的重要桥梁&#xff0c;发展进入繁荣期&#xff0c;国内外框架功能及性能加速迭代&#xff1b; 2、Pytorch、Tensorflow占据AI框…

5.2 中心极限定理

学习目标&#xff1a; 要学习中心极限定理&#xff0c;我会采取以下几个步骤&#xff1a; 学习基本概念&#xff1a;了解什么是随机变量、样本、总体、概率密度函数等基本概念&#xff0c;为学习中心极限定理打下基础&#xff1b;学习正态分布&#xff1a;中心极限定理的核心…

【JavaEE】计算机组成以及操作系统(进程)的基本知识

目录 前言 1、计算机基本组成 1.1、存储器 2、操作系统 2.1、 进程&#xff08;任务&#xff09;的概念 2.2、进程的管理 2.2.1、进程控制块PCB&#xff08;process control block&#xff09; 2.3、CPU分配&#xff08;进程调度&#xff09; 2.3.1、并发 2.3.2、并…

string容器

1、string的构造和赋值 #include #include using namespace std; void test01() { string str1(“hello world”); //使用字符串初始化 cout<<str1<<endl; string str2(5,‘A’); //使用 n 个字符串是初始化 cout<<str2<<endl; string str3 str2; …

深度学习数据集—水果数据集大合集

近期整理的各类水果&#xff08;包括干果&#xff09;数据集&#xff0c;分享给大家。 1、8类水果图片数据集&#xff08;每类100张图片左右&#xff09;[橘子&#xff0c;菠萝&#xff0c;苹果&#xff0c;木瓜&#xff0c;火龙果&#xff0c;香蕉&#xff0c;樱桃&#xff0…

系统升级 | RK3568开发平台成功搭载SylixOS国产实时操作系统

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

【GPT4】微软 GPT-4 测试报告(5)与外界环境的交互能力

欢迎关注【youcans的AGI学习笔记】原创作品 微软 GPT-4 测试报告&#xff08;1&#xff09;总体介绍 微软 GPT-4 测试报告&#xff08;2&#xff09;多模态与跨学科能力 微软 GPT-4 测试报告&#xff08;3&#xff09;编程能力 微软 GPT-4 测试报告&#xff08;4&#xff09;数…

被裁了,39 岁阿里 P9,攒下 1.5 亿....

今天刷知乎&#xff0c;在问题 “40 岁因为财务自由决定不上班的人&#xff0c;个人资产总和到底有多少” 下看到一位阿里 P9 的匿名回答让我狠狠的酸了一把~ 这刚刚失业的四十岁高级码农自曝了自己的人生经历&#xff0c;作为一名“阿里 P9”的程序员&#xff0c;他讲述了自己…

重庆理工大学教授程平:智能会计时代,应充分发挥数据资产的价值

近日&#xff0c;由用友主办的「智能会计 价值财务」2023企业数智化财务创新峰会北京站在北京国家会计学院圆满举办&#xff01;来自知名院校的专家学者、央国企等大型企业财务领路人、以及权威财经媒体相约北京国家会计学院&#xff0c;一同见证“智能会计”新时代的到来&…

centos 搭建 wiki

需要安装软件 mysqlmm-wikinginx&#xff08;非必须&#xff09; mysql 1.查询本机是否安装mysql rpm -qa | grep mysql 如安装&#xff0c;知道mysql账号密码&#xff0c;可以直接使用&#xff0c;跳过此步骤 如已安装&#xff08;centos可能默认已安装mysql或者之前有人…

day13_oop

今日内容 零、 复习昨日 一、final 二、static 三、多态 四、向上转型&向下转型 五、多态应用 零、 复习昨日 封装 类的封装: 1 属性私有 2提供setget 继承 A extends B子类可以使用父类非私有属性和方法好处: 复用,多态准备 重写/覆写/覆盖/Override 子类重写父类的方法,以…

什么是雪花算法?啥原理?

1、SnowFlake核心思想 SnowFlake 算法&#xff0c;是 Twitter 开源的分布式 ID 生成算法。 其核心思想就是&#xff1a;使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛&#xff0c;且 ID 引入了时间戳&#xff0c;基本上保持自增的&#xf…

关于ChatGPT人工智能浅谈

ChatGPT人工智能优点与不足 现今ChatGPT已经向我们展示了其强大的数据收集分析和处理能力&#xff0c;这点随着其不断的学习训练会越来越强。ChatGPT这类生成式人工智能在数据收集分析和处理能力这方面远远超过人类&#xff0c;虽然它目前还不能完全做到按人类的方式对数据进行…