某Github开源物联网系统RCE

admin 2024年12月26日15:36:34评论23 views字数 1689阅读5分37秒阅读模式

全局搜索找到代码中有一处关于newInstance实例化方法的调用,位于jetlinks-supports-1.2.3-SNAPSHOT.jar!/org/jetlinks/supports/protocol/management/jar/JarProtocolSupportLoader.class类的lookupProvider方法中

代码如下:

某Github开源物联网系统RCE

不难发现providerType.getDeclaredConstructor().newInstance()在这个位置有一处调用构造方法实例化返回一个ProtocolSupportProvider对象。

向上找到org.jetlinks.community.protocol.AutoDownloadJarProtocolSupportLoader#load这个方法有两处调用,一处是location参数是http形式的

某Github开源物联网系统RCE

另一处则是参数为fileid指定的文件:

某Github开源物联网系统RCE

最后定位到入口点org.jetlinks.community.device.web.ProtocolSupportController#convertToDetail,web根路径是/api,所以对应的路由是/api/protocol/convert

某Github开源物联网系统RCE

后面动态调试一下求证一下前面的猜想

断点放在org.jetlinks.community.device.web.ProtocolSupportController#convertToDetail方法中,会调用到org.jetlinks.community.protocol.SpringProtocolSupportLoader#load这个方法

某Github开源物联网系统RCE

再往下就到了我们关注的org.jetlinks.community.protocol.AutoDownloadJarProtocolSupportLoader#load这个load方法,这个方法有两部分加载方式,首先看第一种

某Github开源物联网系统RCE

获取参数location的值,判断是否是http,把值md5后找一下临时目录中的jar包,如果存在就直接调用org.jetlinks.supports.protocol.management.jar.JarProtocolSupportLoader#load方法处理,如果文件不存在,就从指定的url下载jar包到本地,然后再调用load去加载,

某Github开源物联网系统RCE

另一种则是通过我们指定fileId参数去指定加载目标本地的一个jar包。

某Github开源物联网系统RCE

上述两种获取jar的方式最后都会走到org.jetlinks.supports.protocol.management.jar.JarProtocolSupportLoader#load这里主要是获取一个classloader

某Github开源物联网系统RCE

最后调用sink点

某Github开源物联网系统RCE

org.jetlinks.supports.protocol.management.jar.JarProtocolSupportLoader#lookupProvider方法中有一处

            loaderScanner.walkClass((loader, name, clazz)->{this.visitor.validate(name, clazz);});

这里调用ASM去检查了我们jar包的classname是否包含com.googleorg.apachecn.hutool这几个包名

某Github开源物联网系统RCE

如果不是以上述包名开头的类,就检查方法调用的黑名单

某Github开源物联网系统RCE
某Github开源物联网系统RCE

这里很好绕过,可以直接使用反射加载字节码的方式进行恶意类加载。不过需要注意的是这套系统是基于netty的响应式web。

两种加载恶意jar的方式

第一种;

利用系统自带的upload接口去上传一个jar,拿到id

某Github开源物联网系统RCE

然后进行加载

某Github开源物联网系统RCE

第二种:

直接出网远程加载一个jar

某Github开源物联网系统RCE
本文首发先知社区:https://xz.aliyun.com/t/16848
本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

原文始发于微信公众号(安全白白):某Github开源物联网系统RCE

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月26日15:36:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某Github开源物联网系统RCEhttps://cn-sec.com/archives/3556712.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息