【第13周】使ysoserial支持执行自定义代码

admin 2021年8月3日21:54:56评论105 views字数 1756阅读5分51秒阅读模式

修改ysoserial代码,可使其支持执行自定义代码,是在一次与Bearcat师傅聊天时提到的。当时觉得眼前一亮,感觉在命令执行受阻时,也许可以通过代码执行达到目的。后面去查资料找到了fnmsd师傅的文章,解决了实现该想法的疑问。在此感谢两位师傅给我的启发。



 0x01 

意义



一、绕过检测,执行某些禁止命令


有些系统做了防护,不许执行或者没有某些命令(比如wget)。这时可以编写命令同等功能的代码,来绕过限制。


二、解决各个平台命令不一致


不同操作系统,命令会有不同。比如查看ip操作,Windows是ipconfig,Linux是ifconfg。而java代码是可以跨平台的。


三、获取更高的自由度,实现更复杂的操作


命令的背后也是代码,当需要执行一些比较复杂的操作时,纯命令是很难实现的,但代码可以!



 0x02 

原理



ysoserial/payloads/util/Gadgets.java中的代码注释,作者提到


TODO: could also do fun things like injecting a pure-java rev/bind-shell to bypass naive protections(待做,可以做一些有趣的事情比如注入一个纯java的反弹或绑定shell去绕过较弱的保护)


可知作者也有此意,并给我们预留了可指定自定义代码的变量cmd

【第13周】使ysoserial支持执行自定义代码

我们从控制台传入的命令,会被保存到command变量中,最后ysoserial会将该变量的值,拼接到"Runtime.getRuntime.exec(" + 命令 + ")"中,生成形成达到命令执行的代码,所以本质上还是代码执行。


因此要想使ysoserial支持执行自定义代码,只要使得在控制台输入能控制cmd变量的值即可。实现起来并不难。



0x03

编码



根据我个人的的需要,给ysoserial加入以下三种方式来指定要执行的自定义代码。

【第13周】使ysoserial支持执行自定义代码

注意:如果没有指定以上开头,就默认当命令处理。



基于上面的需求,我修改了createTemplatesImpl()函数的代码为如下,具体如何实现,请参考代码和注释。

【第13周】使ysoserial支持执行自定义代码

修改完代码后,我们重新将其打包为ysoserial-0.0.6.1-custom-code-

exec.jar,就可以使用可以指定自定义代码的ysoserial了。需要我编译好的jar,请公众号后台回复“ysoserial可执行自定义代码版本”获取。


注意:只有以下payload支持指定支持任意代码执行,其他paylaod需要手工修改其代码,因为它们没有调用我们修改的Gadgets.createTemplatesImpl方法。

【第13周】使ysoserial支持执行自定义代码



 0x04 

案例



下面举一个“不痛不痒”的例子,来展现其高自由度。


假设我们有个需求是这样的,获取目标系统的web物理路径,如果目标能访问我们服务器就把信息提交到服务器的web服务上。如果不能,就把信息写到目标自己的web目录下。如果你使用命令在实现,是比较费劲的,但是用代码就轻而易举!


custom-code.java


【第13周】使ysoserial支持执行自定义代码

这里我利用CNVD-C-2019-48814这个漏洞,让远程服务器(192.168.149.142)加载我本机rmi服务(192.168.149.1:1664),我的rmi服务指定执行的代码,是我们编写好的custom-code.java。具体命令如下:

java -cp ysoserial-0.0.6.1-custom-code-exec.jar ysoserial.exploit.JRMPListener 1664 Jdk7u21 "codefile:custom-code.java"

通过测试发现,在本机启动web服务(92.168.149.1:1665),且目标可访问时,可成功接收信息。

【第13周】使ysoserial支持执行自定义代码

然后我把服务器web服务停止了,目标自然无法访问。结果在目标系统嗯的web目录下成功生成了文件,保存着我们要采集的信息。

【第13周】使ysoserial支持执行自定义代码

从任意命令执行变成任意代码执行,在我看来危害增大了不少。在命令执行getshell受阻时,如何通过代码执行突破呢,到这里懂的人自然懂了。



 0x05 

参考文章



https://blog.csdn.net/fnmsd/article/details/79534877

本文始发于微信公众号(回忆飘如雪):【第13周】使ysoserial支持执行自定义代码

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年8月3日21:54:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【第13周】使ysoserial支持执行自定义代码http://cn-sec.com/archives/345959.html

发表评论

匿名网友 填写信息