神兵利器 | 分享个全新的内存马(附下载)

admin 2022年7月11日22:56:33评论67 views字数 2879阅读9分35秒阅读模式
神兵利器 | 分享个全新的内存马(附下载)

点击上方“蓝字”,关注更多精彩


神兵利器 | 分享个全新的内存马(附下载)

原文链接:https://veo.pub/2022/memshell/

前言

WebSocket是一种全双工通信协议,即客户端可以向服务端发送请求,服务端也可以主动向客户端推送数据。这样的特点,使得它在一些实时性要求比较高的场景效果斐然(比如微信朋友圈实时通知、在线协同编辑等)。主流浏览器以及一些常见服务端通信框架(Tomcat、netty、undertow、webLogic等)都对WebSocket进行了技术支持。

版本

2013年以前还没出JSR356标准,Tomcat就对Websocket做了支持,自定义API,再后来有了JSR356,Tomcat立马紧跟潮流,废弃自定义的API,实现JSR356那一套,这就使得在Tomcat7.0.47之后的版本和之前的版本实现方式并不一样,接入方式也改变了。

JSR365是java制定的websocket编程规范,属于Java EE 7的一部分,所以要实现websocket内存马并不需要任何第三方依赖

服务端实现方式

注解方式

@ServerEndpoint(value = "/ws/{userId}", encoders = {MessageEncoder.class}, decoders = {MessageDecoder.class}, configurator = MyServerConfigurator.class)

Tomcat在启动时会默认通过 WsSci 内的 ServletContainerInitializer 初始化 Listener 和 servlet。然后再扫描 classpath下带有 @ServerEndpoint注解的类进行 addEndpoint加入websocket服务

所以即使 Tomcat 没有扫描到 @ServerEndpoint注解的类,也会进行Listener和 servlet注册,这就是为什么所有Tomcat启动都能在memshell scanner内看到WsFilter

神兵利器 | 分享个全新的内存马(附下载)

继承抽象类Endpoint方式

继承抽象类 Endpoint方式比加注解 @ServerEndpoint方式更麻烦,主要是需要自己实现 MessageHandler和 ServerApplicationConfig@ServerEndpoint的话都是使用默认的,原理上差不多,只是注解更自动化,更简洁

可以用代码更方便的控制 ServerEndpointConfig 内的属性

ServerEndpointConfig serverEndpointConfig = ServerEndpointConfig.Builder.create(WebSocketServerEndpoint3.class, "/ws/{userId}").decoders(decoderList).encoders(encoderList).configurator(new MyServerConfigurator()).build();

websocket内存马实现方法

之前提到过 Tomcat 在启动时会默认通过 WsSci 内的 ServletContainerInitializer 初始化 Listener 和 servlet。然后再扫描 classpath下带有 @ServerEndpoint注解的类进行 addEndpoint加入websocket服务

那如果在服务启动后我们再 addEndpoint 加入websocket服务行不行呢?答案是肯定的,而且非常简单只需要三步。创建一个ServerEndpointConfig,获取ws ServerContainer,加入 ServerEndpointConfig,即可

ServerEndpointConfig config = ServerEndpointConfig.Builder.create(EndpointInject.class, "/ws").build();ServerContainer container = (ServerContainer) req.getServletContext().getAttribute(ServerContainer.class.getName());container.addEndpoint(config);

效果

首先利用i.jsp注入一个websocket服务,路径为/x,注入后利用ws连接即可执行命令

神兵利器 | 分享个全新的内存马(附下载)

且通过memshell scanner查询不到任何异常(因为根本就没注册新的 Listener、servlet 或者 Filter)

神兵利器 | 分享个全新的内存马(附下载)

代理

WebSocket是一种全双工通信协议,它可以用来做代理,且速度和普通的TCP代理一样快,这也是我研究websocket内存马的原因。

例如有一台不出网主机,有反序列化漏洞。

以前在这种场景下,之前可能会考虑上reGeorg或者利用端口复用来搭建代理。

现在可以利用反序列化漏洞直接注入websocket代理内存马,然后直接连上用上全双工通信协议的代理。

注入完内存马以后,使用 Gost:https://github.com/go-gost/gost 连接代理

./gost -L "socks5://:1080" -F "ws://127.0.0.1:8080?path=/proxy"

然后连接本地1080端口socks5即可使用代理

完整代码:https://github.com/veo/wsMemShell

文章来源:Gamma实验室

【往期推荐】

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

【超详细 | Python】CS免杀-Shellcode Loader原理(python)

【超详细 | Python】CS免杀-分离+混淆免杀思路

【超详细 | 钟馗之眼】ZoomEye-python命令行的使用

【超详细 | 附EXP】Weblogic CVE-2021-2394 RCE漏洞复现

【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现

【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现

【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞

【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

  记一次HW实战笔记 | 艰难的提权爬坑

【漏洞速递+检测脚本 | CVE-2021-49104】泛微E-Office任意文件上传漏洞

免杀基础教学(上卷)

免杀基础教学(下卷)

走过路过的大佬们留个关注再走呗神兵利器 | 分享个全新的内存马(附下载)

往期文章有彩蛋哦神兵利器 | 分享个全新的内存马(附下载)

神兵利器 | 分享个全新的内存马(附下载)

一如既往的学习,一如既往的整理,一如即往的分享神兵利器 | 分享个全新的内存马(附下载)

如侵权请私聊公众号删文

推荐阅读↓↓↓

我知道你在看










原文始发于微信公众号(渗透Xiao白帽):神兵利器 | 分享个全新的内存马(附下载)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月11日22:56:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   神兵利器 | 分享个全新的内存马(附下载)https://cn-sec.com/archives/1169138.html

发表评论

匿名网友 填写信息