参见英文答案 > Is the behavior behind the Shellshock vulnerability in Bash documented or at all intentional? 4个
我在检查Shellshock漏洞时得到了这个:
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 ='(){:;};回声脆弱’不计算在内.
这与用于在bash中定义函数的语法不完全一致;在内部,bash将以规范化的形式存储函数的字符串表示.如果导出函数(使用export -f function_name),则将规范化表单添加到环境中,子bash进程将其识别为函数定义.
“shellshock”错误来自bash处理已识别函数的方式; bash的错误版本(可以追溯到很长一段路)简单地将环境中的字符串作为函数定义进行评估(通过将变量的名称添加为函数名称),这将受到注入攻击,如漏洞中所示测试.
手动创建看起来像bash函数定义的字符串以便在子bash过程中定义函数是一种已知技术.导出功能并重新导入它们非常常见,用户通常甚至都注意不到. (例如,这种技术用于将bash函数传递给由xargs bash -c启动的子shell,并找到… -exec bash -c.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。