反序列化攻击的愚蠢示例

时间:2014-01-10 15:59:58

标签: java security serialization deserialization exploit


我试图理解一个反序列化攻击,所以我想到了这个例子,如果你能纠正我,如果我误解了一些东西,那将会很有帮助。

我有这个小说课。

public class Player{
    String name;
    int attackStrength;

    public Player(String name){
        this.name = name;
        this.attackStrength = Random.nextInt(10);
    }   
}

如果我序列化了这个类它将为我提供一个表示对象实例及其内部值(nameattackStrength)的字节数组。

这个小说类是随机的创建最大值为10的攻击强度。

如果我编辑了字节数组并重新读回来。我可以将代表attackStrength的字节修改为50!然后DeSerialise数组,我现在有一个被黑客攻击的角色。

这是否是这种攻击形式背后的想法。

2 个答案:

答案 0 :(得分:2)

假设Player实现了java.io.Serializable,那么反序列化将绕过构造函数,前提是它处于对手可以提供原始数据的环境中。这在[{3}} Java编程语言安全编码指南4.0版中得到了解决。

答案 1 :(得分:0)

老实说,我没有听过“反序列化攻击”这个词,但是你是对的,这是一个安全漏洞。

在某处存储文件的任何情况都可以编辑它,然后存在漏洞。如果他们只是在他们的本地机器(单人)上运行,那么就不值得担心。如果他们愿意,你无法阻止他们。

对于多玩家来说,唯一的方法是让服务器具有权威性并让它验证玩家所做的一切。你永远不会让客户告诉你他们的攻击力,你会告诉客户。