Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
polyshell — 一个Bash/Batch/PowerShell多语言脚本! | Kitploit
工具/GitHubGitHub/llamasoft/polyshell
Payload生成脚本与自动化渗透测试红队Payload 开发
GitHubllamasoft/polyshell

polyshell

一个Bash/Batch/PowerShell多语言脚本!

查看仓库
22520123年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PolyShell: 一个 Bash/Batch/PowerShell 多语言脚本

这是什么

PolyShell 是一个在 Bash、Windows Batch 和 PowerShell 中同时有效的脚本(即一个多语言脚本)。

这使得 PolyShell 成为渗透测试的有用模板,因为它可以在大多数系统上执行,而无需针对特定目标的 payload。

PolyShell 还专门设计为可通过使用 USB Rubby Ducky、MalDuino 或类似设备的输入注入进行交付。

Batch 演示 Powershell 演示 Unix shell 演示

如何使用

作为独立脚本

  1. 复制/重命名脚本,使其具有正确的文件扩展名(.sh、.bat 或 .ps1)。
  2. 使用 Unix shell、作为批处理文件或使用 PowerShell 运行脚本。

使用输入注入

  1. 在目标机器上打开一个终端。
  2. 运行 payload。
  3. 按下 Ctrl-C,然后运行 exit。

输入注入方法的行为与脚本方法略有不同。作为脚本运行时,payload 会在处理完一种语言后立即退出。通过注入交付时,payload 会运行一个读取循环。如果没有它,payload 会关闭终端窗口,但会继续向未知窗口输入。Ctrl-C 使脚本跳出读取循环,从而允许其运行而不会产生意外的副作用。

此外,_粘贴_脚本到终端可能会失败。一旦脚本到达读取循环,某些终端会将剩余的粘贴文本视为读取循环的输入(好),但其他终端可能会在读取循环退出时继续执行脚本(坏)。

工作原理

主要技巧是让其他语言在我们只想运行其中一种语言的特定代码时“移开视线”。这是通过利用围绕引号、重定向和注释的语言特性来实现的。
考虑以下行:

echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"

每种语言都会看到 echo 命令,但会对该行的其余部分进行不同的解释。
例如,这是每种语言将解释为字符串的内容:

      echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
Bash                                      [-----]     [---]
Batch       [-----------------------------]     [-]   [---]
PS          [-----------------------------]     [-]

执行该行后,bash 脚本将处于 here document 中,PowerShell 脚本将处于 多行注释 中,而 batch 脚本将正常继续执行。每种语言执行完毕后,我们终止它。这使我们无需在脚本后面处理其特性。

小技巧

显然,制作这个多语言脚本所需的技巧并不遵循_正常_的编码规范。
有许多被利用或必须处理的特性:

  • 这三种语言都有不同的转义字符:
    • Bash: 反斜杠 (\)
    • Batch: 脱字符 (^)
    • PowerShell: 反引号 (`)
  • 转义字符在 Bash 和 PowerShell 字符串内部有效,但在 batch 字符串中无效。
  • 重定向(即 < 和 >)在所有三种语言中都具有特殊含义,除非被引用。
  • 重定向不必在命令的末尾。
    • 这在 Bash/Batch/PowerShell 中是有效的:echo >output.txt "Hello World"
  • Batch 是唯一_没有_多行字符串或注释的语言。
  • Batch 将 > 视为重定向,即使它直接接触字符串,但 PowerShell 不会。
  • Batch 脚本的 GOTO 语句仅在作为脚本运行时有效,在交互式运行时无效。
  • PowerShell 的多行注释(<#)必须立即前面有空白字符。
  • Bash 的 here document 可以在任何位置开始,只要它是未引用的且不是注释。
下载工具