使用tabby分析rome反序列化链
用户9528 WEB安全 185浏览 · 2025-03-20 09:20

分析环境为rome1.7、jdk8、tabby2.0 rome反序列化链有若干其他情况,现一一进行分析查询 ToStringBean 这条调用链如下

这里可将sink定义为toString函数,source从HashMap的readObject出发,结合语义写查询如下:

Pasted image 20250313184238.png
图片加载失败
并没有查询到, 这里发现从java.lang.Object#hashCode关联到了com.sun.corba.se.spi.orb.OperationFactory$OperationBase#hashCode,并不是我们要的EqualsBean,考虑到java.lang.Object#hashCode会关联若干个类的hashCode,这里在链中显式明确EqualsBean

Pasted image 20250313185059.png
图片加载失败
这里看到已经调用到了com.rometools.rome.feed.impl.EqualsBean#hashCode,并且下面调用com.rometools.rome.feed.impl.EqualsBean#beanHashCode,但是没能找到ToStringBean,看下调用链发现,实际上还是刚才那个问题java.lang.Object#toString到com.rometools.rome.feed.impl.ToStringBean#toString,在路径中增加一层alias关系
Pasted image 20250313193542.png
图片加载失败
成功找到了调用链 poc如下:

EqualsBean poc如下:

com.rometools.rome.feed.impl.EqualsBean#beanEquals相当于是另外一个sink点了, source点定义为HashSet.readObject方法

Pasted image 20250313194324.png
图片加载失败
BadAttributeValueExpException

source点变了,sink没有变 这就更没什么好说的了,需要注意的还是从Object.toString到ObjectBean.toString的关联,为了避免展示太多情况,这里直接限定死了
Pasted image 20250313195956.png
图片加载失败
后面就不放poc了 JdbcRowSetImpl

之前的调用链是利用TemplatesImpl中的getter方法,这里则是利用了JdbcRowSetImpl中的getter,具体调用关系为com.sun.rowset.JdbcRowSetImpl#getDatabaseMetaData->com.sun.rowset.JdbcRowSetImpl#connect->javax.naming.InitialContext#lookup(java.lang.String) 结合语义分析,可以写出如下查询:
Pasted image 20250313205700.png
图片加载失败
发现好像com.sun.rowset.JdbcRowSetImpl#getParameterMetaData也可以调用到lookup,也算是中间新的链路了吧
Pasted image 20250314183427.png
图片加载失败


0 条评论
某人
表情
可输入 255

没有评论

目录