我了解 CVE-2014-6271 的原始测试,即:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Run Code Online (Sandbox Code Playgroud)
但我对 CVE-2014-7169 的更新测试和相应输出感到困惑:
$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:50:18 BST
Run Code Online (Sandbox Code Playgroud)
有人可以简要解释一下这里发生了什么以及它如何绕过 CVE-2014-6271 的补丁吗?
bil*_*lyw 13
自从我第一次发布这个问题以来,我一直在网上挖掘。
根据该漏洞的最初发现者的说法,在 CVE-2014-6271 补丁之前的 bash 引入了一个函数,例如:
foo=() {
code
}
Run Code Online (Sandbox Code Playgroud)
通过用空格替换等号并对其进行解释……这意味着可以在函数定义之外进行解释。
CVE-2014-6271的补丁引入了 parse_and_execute() 函数的特殊模式,以限制对函数定义的评估,而不是超出它。
但是,正如本线程中所解释的,CVE-2014-7169 漏洞测试的特制环境变量旨在 1) 将解析器弄死 2) 在缓冲区中留下碎片 3) 完全改变原始 bash 命令在以下情况下的作用它与缓冲区中已有的碎片结合。
所以要剖析环境变量:
X='() { (a)=>\'
() { (a)=>\
. 请注意,这\
是字符串的一部分;它没有逃避尾随的单引号。() {
(a)=
>\
>\[NEWLINE]
sh
命令运行之前的某个时刻,缓冲区中放置了一个换行符。>\[NEWLINE]echo date
sh
被调用时(在这种情况下可能是 bash 的符号链接),它会将其命令参数 , 添加echo date
到缓冲区中已经存在的字符中。>echo date
>echo date
,其效果与date > echo
. echo
创建一个名为的文件,并将date
命令的标准输出重定向到其中。; cat echo
归档时间: |
|
查看次数: |
3211 次 |
最近记录: |