我在检查时得到了这个炮弹休克漏洞:
host1:~$ env x='(){ :;}; echo vulnerable' bash -c "echo hello"
hello
host1:~$ env x='() { :;}; echo vulnerable' bash -c "echo hello"
vulnerable
hello
host1:~$
很奇怪吧?
如果环境变量恰好以这四个字符开头,Bash 会将其识别为函数() {
,包括空间。所以env x='(){ :;}; echo vulnerable'
不算。
这不太符合您用来定义函数的语法bash
;内部,bash
将以标准化形式存储函数的字符串表示形式。如果函数被导出(使用export -f function_name
),然后将规范化形式添加到环境中,并且子代bash
进程会将其识别为函数定义。
“shellshock”bug 的来源方式bash
处理已识别的功能;有缺陷的版本bash
(可以追溯到很久以前)只需将环境中的字符串评估为函数定义(通过将变量名称作为函数名称添加到前面),这会受到漏洞测试中演示的注入攻击。
手动创建看起来像的字符串bash
函数定义,以便在子级中定义函数bash
过程是已知技术。导出函数并重新导入它们非常常见,并且通常甚至不会被用户注意到。 (例如,该技术用于将 bash 函数传递到由xargs bash -c
and find ... -exec bash -c
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)