函数中的mailbox是执行命令参数的一部分,所以我们可以通过更改邮箱名来进行命令注入执行。
IMAP服务器类型及SSH连接
现在有两种基于Unix的IMAP服务器被人们广泛使用,一种为华盛顿大学开发的 imapd ,另一种为Cyrus开发的IMAP服务器。
①Cyrus开发的IMAP服务器会将用户邮件存储到内置数据库中,只有通过IMAP协议才能访问Cyrus。因此,当使用Cyrus时,已安装IMAP的Unix系统上的用户账户与IMAP账户之间并没有任何关联。
②华盛顿大学开发的 imapd 会将邮箱存储到文件中,而这些文件由Unix系统中邮件用户所有,如 /var/spool/mail ,因此 imapd 对应的用户账户以及访问权限与Unix服务器直接相关。如果邮件存放在我们具备访问权限的 spool 文件中,我们可以通过SSH方式登录系统,验证我们对这些文件的访问权限。
当能够使用SSH时,整个过程并不需要建立 IMAP 连接。 也就是说,imap_open 函数首先会建立SSH连接,如果认证通过,则会在没有 IMAP 连接的情况下继续执行,这就是所谓的 IMAP 预认证模式。且在设置 SSH 连接时, mailbox 参数的值会以参数形式传递给SSH命令。
-oProxyCommand 参数
SSH 命令中用到了许多命令,其中我们可以使用 -o 参数来设置连接期间可用的各种选项。在建立SSH连接之前,我们可以设置 ProxyCommand 参数,如下所示: