JAVA远程代码执行的反序列化漏洞调试

         在了解反击ysoserial的环节路上,jar包的出错使我误认为这一构思不太行。之后发觉了问题的所属,并拓展一下下自个的构思。registry.string和registry.event,这两处便是读取的原始的RegistryImpl_Stub,会开启UnicastRef#async->StreamRemoteCall#executeCall造成反序列化。一路跟下去,就可以见到这一方式里边有反序列化点了。由于全部都是原始的方式,也没存有其他的筛选。

outputo-20211208-102559-768-euza.png

刚开始我对反击有疑问,可以看这儿存有了java沙盒的机值,会限定命令的实行。:之后认证了一下下,还真拿到了那样的结论:可以看的确在右侧的最下边可以看存有自定的SercurityManager去限定了命令的实行,可以看箭头符号上边提到的地点,这儿是在exploit这一方式中实行并捕捉了命令实行的问题,咱们去看看程序代码:

可以看第2个箭头符号所偏向的地点,在exploit实行的情况下,的确是将整篇代码放到沙盒内去实行的。可是我们可以见到箭头符号1所偏向的地方,理当在这儿便会实行反序列化而造成命令的实行。由于出错数据里边没有有关string方式的出错,先推测一下下,咱们再去跟随程序代码调节一下下。

即然string方式并没有实行顺利,那应当在这个方式里面会抛出异常。可以看string函数扔出了2个出现异常,分别是AccessException和RemoteException,后边threw的出现异常全部都是这两个类别的派生类,应该是会捕捉的。图中的self,throw块是捕捉ConnectIOException,是RemoteException的派生类,应当捕捉不了,期待了解的师傅可以回答一下下。之后当我将jar包拖进想法的情况下我愣住了。我以为用的是最新版,结论用的是历史版本。

可以看2018.4.23次的递交适用了sslrmi,在以前用string方式检测了一下下,造成了反击的问题。也就是在这个版本以前的是不可能在这个点被反击利用的。那样咱们恰好来看一下下,能不能反反击。可以看ysoserial内嵌了2个自定的SecurityManager。而exploit方式内采用的是第2个sp。使我们来了解一下这一sp。

类人员和方式在左边,挑一点说。可以看checkExec传承成员变量的方式,这儿的命令提示符主要参数表明系统软件特殊的命令,在此次调节中便是命令提示符.dll。后边可以看扔出了出现异常[在ExexCheckingSecurityManager目标读取构造函数的情况下,将throwException主要参数设变成true]。这一ExecException类的getMessage方式可以在语义中见到。


分享: