偶尔有时命令执行有效负载Runtime.getRuntime().exec()失败. 使用 web shells, 反序列化漏洞或其他向量时可能会发生这种情况.

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

其他时候,其中包含空格的参数会被StringTokenizer类破坏.该类将空格分割为命令字符串. 那样的东西 ls "My Directory" 会被解释为 ls '"My' 'Directory"'.

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

Input type: