PHP中的反序列化漏洞
可能利用反序列化的提示
代码中出现file_get_content
等文件操作相关函数unserialze
,serialze
等危险函数
类中存在__wakeup
,__toString
,__call
,__sleep
等魔法方法
这时输入若可控,即可构造序列化数据,在反序列化过程中执行函数,控制文件读取,拿到flag
且__construct()函数只在对象创建(new)时会自动调用,但在 unserialize() 时是不会自动调用的
BUU平台上复现题目,主要学习了一下异或绕过的操作还踩了一些奇奇怪怪的坑,题目共三层,层层绕过搞了我好几天,还是太菜了
第一层源码
$hhh = @$_GET['_'];;
if (!$hhh){
highlight_file(__FILE__);
}
if(strlen($hhh)>18){
die('One inch long, one inch strong!');
}
if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F];+/i', $hhh) )
die('Try something else!');
$character_type = count_chars($hhh, 3);
if(strlen($character_type)>12) die("Almost there!");
eval($hhh);
?>
复现复现,是一道bytectf修改了的题,加了几个过滤
<?php
highlight_file(__FILE__);
$code = $_GET['code'];
if (!empty($code)) {
if (';' === preg_replace('/[a-z]+\((?R)?\)/', NULL, $code)) {
if (preg_match('/readfile|if|time|local|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $code)) {
echo 'bye~';
} else {
eval($code);
}
}
else {
echo "No way!!!";
}
}else {
echo "No way!!!";
}
贴一下源码