有时命令执行PayloadRuntime.getRuntime().exec()会失败。 当通过Webshell、反序列化漏洞或其他方式执行命令时,会出现这种情况。

这是因为重定向和管道字符的使用方式在正在启动的进程的上下文中没有意义。 例如 ls > dir_listing,在shell中执行应该将当前目录的列表输出到名为dir_listing的文件中。但是在 exec() 函数的上下文中,该命令将被解释为列举 >dir_listing 目录。

某些时候,包含空格的参数会被 StringTokenizer 类破坏。该类将命令字符串按空格拆分。类似的例子 ls "My Directory" 会被解释为 ls '"My' 'Directory"'

通过下方的转换器,在Base64编码的帮助下可以有效减少这类问题。它可以通过调用Bash或PowerShell再次使管道和重定向变得更好,并且还确保命令参数中没有空格。

Input type: