/0ctf-2021-2rm1-soln

solution to 2rm1 of 0CTF/TCTF 2021 Quals

Primary LanguageKotlinMIT LicenseMIT

0ctf-2021-2rm1-soln

solution to 2rm1 of 0CTF/TCTF 2021 Quals

This solution uses rebind in the second phase. Detailed writeup is on https://github.com/waderwu/My-CTF-Challenges/tree/master/0ctf-2021/2rm1


因为看到有人的文章里放了这个仓库的链接,所以重构了一下代码,比之前更加简洁明了而且只需要依赖 jrmp 这个库,旧版代码可以查看v0.1.0这个tag。

虽然上面给出了出题人writeup链接,但后续没有再补充细节,不过已经有一些公开的其他选手的writeup和相关的分析文章,因此这里只简单介绍一下这个解法。

rmiserver的jdk版本是8u232,UserInter.sayHello有一个String参数,在此版本下可以让其反序列化任意对象,结合Gadget类就可以RCE。

因为rmiclient会向registry查询0ops对象,然后向server发起RMI调用,所以可以把0ops重新绑定到我们自己实现的恶意的server,让这个server返回一个含有Gadget实例的异常,从而实现RCE。

这个仓库的结构如下:common模块中是题目自带的一些类,evil模块是用于打包成jar后下载到rmiserver上执行的,soln是这个解法的具体实现。

如何复现?把evil模块中用于外带flag的url改成你的;把evil模块打包成jar,放在你的服务器上;把downloadJar方法中的url改成你的jar的url;运行soln模块的main方法即可。