反序列化漏洞练习

在这个练习环境中,你将学习如何识别和利用反序列化相关的漏洞。每个挑战都模拟了真实世界中的场景。

挑战1:PHP反序列化

简单

目标:通过PHP反序列化漏洞执行系统命令。

// 目标代码 class User { public $username; public $isAdmin; function __wakeup() { if ($this->isAdmin) { system($this->username); } } } // 序列化数据 $user = new User(); $user->username = "whoami"; $user->isAdmin = false; echo serialize($user);

修改序列化数据中的isAdmin值为true。

挑战2:Java反序列化

中等

目标:利用Java反序列化漏洞执行命令。

// 目标代码 public class User implements Serializable { private String username; private boolean isAdmin; private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); if (isAdmin) { Runtime.getRuntime().exec(username); } } }

使用ysoserial工具生成payload。

挑战3:Python反序列化

困难

目标:利用Python pickle反序列化漏洞执行命令。

// 目标代码 import pickle class User: def __init__(self, username, is_admin): self.username = username self.is_admin = is_admin def __reduce__(self): if self.is_admin: return (os.system, (self.username,)) return None

使用pickle.dumps()生成payload。