<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    一種全新的內存馬

    VSole2022-12-13 10:56:20

    前言

    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

    websocket
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    WebSocket 測試入門篇
    2023-02-08 15:56:52
    這種傳統的模式帶來很明顯的缺點,即瀏覽器需要不斷的向服務器發出請求,然而 HTTP 請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費很多的帶寬等資源。瀏覽器通過 JavaScript 向服務器發出建立 WebSocket 連接的請求,連接建立以后,客戶端和服務器端就可以通過 TCP 連接直接交換數據。
    淺析websocket劫持
    2022-07-15 15:43:18
    WebSocket劫持漏洞導讀WebSocket協議技術WebSocket是HTML5推出的新協議,是基于TCP的應用層通信協議,它與http協議內容本身沒有關系。為了建立連接,瀏覽器和服務器通過HTTP執行WebSocket握手。此時,網絡連接保持打開狀態,并且可以用于向任一方向發送WebSocket消息。
    最近,看到網上有安全研究人員發布了一篇文章,描述了一款在?為此,筆者對該內存馬的原理進行了分析,并在此提出了一種檢測該內存馬的思路,可以幫助安全人員檢測出此種類型內存馬,從而降低業務系統安全隱患。筆者寫了一個簡單的 jsp 檢測腳本,訪問該 jsp 就能打印出所有的 ws 服務。
    一種全新的內存馬
    2022-12-13 10:56:20
    前言WebSocket是一種全雙工通信協議,即客戶端可以向服務端發送請求,服務端也可以主動向客戶端推送數據。這樣的特點,使得它在一些實時性要求比較高的場景效果斐然。主流瀏覽器以及一些常見服務端通信框架都對WebSocket進行了技術支持。版本2013年以前還沒出JSR356標準,Tomcat就對Websocket做了支持,自定義API,再后來有了JSR356,Tomcat立馬緊跟潮流,廢棄自定義的API,實現JSR356那一套,這就使得在Tomcat7.0.47之后的版本和之前的版本實現方式并不一樣,接入方式也改變了。
    淺析JWT安全問題
    2022-08-08 15:44:18
    觀察確定為JWT,將payload處字符base64解碼得??把sub的wiener修改為administrator,重新傳參??成功越權,然后就是刪除用戶即可?然后前往jwt.io生成我們需要的的jwt,把sub和secret進行修改??重新傳包,成功?
    給木馬帶雙眼睛
    2023-04-18 09:56:25
    近月,內存馬的技術也產生新的變化,如利用websocket進行通信,Executor內存馬進行socket通信。本文介紹利用Poller內存馬實現全流量監控,這樣,攻擊方可以實時監控經過系統的每一個請求,或者增加了釣魚等信息利用的便利。這也就是說注入Poller的內存馬一定是不能出任何bug的,一旦出了,整個服務直接崩潰。反向,Executor是一個任務類,創建后就執行一個線程任務,如果這次業務異常,最多這次的請求無法正常執行罷了。
    近期,觀成科技安全研究團隊在現網中檢測到了利用Gost工具實現加密隧道的攻擊行為。
    Web 前端與后臺的通信短輪詢:通過不斷發送 http 請求達到即時通信的目的長輪詢:訪問無資源并不會立刻返回,保持較長時間的通訊,直到獲得數據或超時返回。
    Spring Framework、5.0.5 之前的 5.0.x 版本和 4.3.16 之前的 4.3.x 版本以及不支持的舊版本允許應用程序通過spring-messaging模塊通過簡單的內存 STOMP 代理通過 WebSocket 端點公開 STOMP 。惡意用戶(或攻擊者)可以向代理發送可能導致遠程代碼執行攻擊的消息。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类