反序列化漏洞
反序列漏洞,但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码
运行
漏洞代码 - readObject
public String cc(String base64) { try { BASE64Decoder decoder = new BASE64Decoder(); base64 = base64.replace(" ", "+"); byte[] bytes = decoder.decodeBuffer(base64); ByteArrayInputStream stream = new ByteArrayInputStream(bytes); ObjectInputStream in = new ObjectInputStream(stream); in.readObject(); in.close(); return "反序列化漏洞"; } catch (Exception e) { return e.toString(); } }
运行
安全代码 - 预编译方法
编码建议
更新commons-collections、commons-io等第三方库版本; 业务需要使用反序列化时,尽量避免反序列化数据可被用户控制,如无法避免建议尽量使用白名单校验的修复方式
运行
安全代码 - 过滤方法