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