
代码审计
这段代码首先定义了一个名为 Demo 的类,包含了一个私有变量 $file 和三个魔术方法 __construct()、__destruct() 和 __wakeup()。其中:
- __construce()方法用于初始化 $file 变量
- __destruce方法用于输出文件内容
- __wakeup() 方法检查当前对象的 $file 变量,如果不等于 index.php,则将其重置为 index.php,从而防止攻击者通过反序列化攻击来读取 fl4g.php 文件的内容。
if (isset($_GET['var'])) {
$var = base64_decode($_GET['var']);
if (preg_match('/[oc]:\d+:/i', $var)) {
die('stop hacking!');
} else {
@unserialize($var);
}
} else {
highlight_file("index.php");
}
?>
这段代码主要是用于接收 GET 参数 var,使用 base64_decode 函数对 var 进行解码,然后通过 preg_match 函数判断是否包含类似 o:2的字符串,如果存在则中断程序执行,否则调用 @unserialize 函数进行反序列化操作。
解题思路
逆向思想:由于反序列化时先执行wakeup函数,故先绕过wakeup函数,再依次绕过preg_match函数与base64编码。
构造初始POC:
<
最低0.47元/天 解锁文章
5858

被折叠的 条评论
为什么被折叠?



