给定一个允许任何人提供输入的脚本。是否有任何输入可以突破变量。例如给出以下脚本:
echo $1
无论如何,是否可以制作$1
类似的东西:
text && rm -rf /
我正在尝试做类似上面的事情,但它不起作用。
谁能确认上述情况是不可能的吗?
答案1
2014 年,有一个名为 Shellshock 的 Bash 漏洞被利用。与常见软件中的大多数漏洞一样,发布了常见漏洞和暴露 (CVE) 公告 CVE-2014-6278。 Shellshock 是 Bash 的远程利用,它允许通过常见服务器软件堆栈(包括 Apache 的 cgi 模块以及 OpenSSH)中的多个攻击向量在远程主机上执行任意代码。
该漏洞影响了从 1989 年到 2014 年的所有 Bash 版本,当容易创建的漏洞被广泛证明后,该漏洞就得到了修补。
进一步阅读:
ServerFault Shellshock 问题,2014 年
我相信 Distro Repos 中提供的大多数版本都已修补。
更正:炮弹休克是一种家庭漏洞... CVE-2014-6271、CVE-2014-6277、CVE-2014-6278、CVE-2014-7169、CVE-2014-7186、CVE-2014-7187
而且,最好记住,如果存在 Apache Web 服务器或 SSH 等端口转发...以及任何未修补(并且可能未修补)的物联网设备,这些很容易影响 LAN。
答案2
命令分隔符在扩展之前进行处理,因此变量中的\n
、;
、&
、&&
或永远不会产生效果,除非变量内容被编辑。||
eval
答案3
看起来通配符是一个漏洞:
$ echo 'echo $1' > injection.sh
$ bash injection.sh '/*'
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
这就是为什么你总是引用变量:
$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*