php代码审计【12】反序列化漏洞

一、漏洞生成条件
      1.unserialize 函数的参数可控
      2.脚本中存在一个构造函数。析构函数、——wakeup函数中有类

        对象中的成员变量的值
解释

php允许保存一个对象方便以后重用,这个过程被称为序列化。为什么要有序列化这种机制呢?在传递变量的过程中,有可能遇到变量值要跨脚本文件传递的过程。试想,如果为一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有的变量和内容释放掉了,我们要如何操作呢?难道要前一个脚本不断的循环,等待后面脚本调用?这肯定是不现实的。serialize和unserialize就是用来解决这一问题的。serialize可以将变量转换为字符串并且在转换中可以保存当前变量的值;unserialize则可以将serialize生成的字符串变换回变量。

漏洞名称的由来:在变量可控并且进行了unserialize操作的地方注入序列化对象,实现代码执行或者其它坑爹的行为。

生成序列化的值

 

浏览器执行 http://127.0.0.1/test.php

php代码审计【12】反序列化漏洞_第1张图片

结果为 O:4:“demo”:1:{s:4:“test”;s:10:“phpinfo();”;}

测试漏洞

 test);
     }
 }
 unserialize($_GET['code']);
 ?>

浏览器执行 http://127.0.0.1/test.php?code=O:4:"demo":1:{s:4:"test";s:10:"phpinfo();";}

将上述序列化的值放在 URL 中,即可得出结果

php代码审计【12】反序列化漏洞_第2张图片

最后,我要看看https://www.freebuf.com/news/172507.html

ctf中反序列化的代码审计拿flag 

 

你可能感兴趣的:(php代码审计学习历程)