相关疑难解决方法(0)

什么 env x='() { :;}; 命令' bash 做,为什么不安全?

bash 中明显存在漏洞(CVE-2014-6271):Bash 特制环境变量代码注入攻击

我试图弄清楚发生了什么,但我不完全确定我理解它。如何echo在单引号中执行?

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
Run Code Online (Sandbox Code Playgroud)

编辑 1:打补丁的系统如下所示:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
Run Code Online (Sandbox Code Playgroud)

编辑 2:有一个相关的漏洞/补丁:CVE-2014-7169,它使用了一个稍微不同的测试:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c …
Run Code Online (Sandbox Code Playgroud)

bash vulnerability shellshock

246
推荐指数
5
解决办法
11万
查看次数

bash 迭代文件列表,除非为空

我认为这很简单 - 但事实证明它比我预期的要复杂。

我想遍历目录中特定类型的所有文件,所以我这样写:

#!/bin/bash

for fname in *.zip ; do
   echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)

只要目录中至少有一个匹配的文件,这就会起作用。但是,如果没有匹配的文件,我会得到:

current file is *.zip
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

#!/bin/bash

FILES=`ls *.zip`
for fname in "${FILES}" ; do
    echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)

当没有文件时循环体不执行,我从 ls 收到错误:

ls: *.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何编写一个干净地处理没有匹配文件的循环?

bash parameter

54
推荐指数
1
解决办法
3万
查看次数

Bash 中是否存在编程的“回调”概念?

有几次,当我阅读有关编程的内容时,我遇到了“回调”概念。

有趣的是,对于“回调函数”这个术语,我从来没有找到我可以称之为“教学”或“清晰”的解释(在我看来,我读到的几乎所有解释都与另一个解释完全不同,我感到困惑)。

Bash 中是否存在编程的“回调”概念?如果是这样,请用一个小的、简单的 Bash 示例来回答。

bash function

21
推荐指数
3
解决办法
8080
查看次数

Shellshock Bash 漏洞是如何发现的?

由于此错误影响了如此多的平台,我们可能会从发现此漏洞的过程中了解到一些信息:它是 ?????? (尤里卡)时刻还是安全检查的结果?

由于我们知道 Stéphane 发现了 Shellshock 错误,其他人也可能知道这个过程,我们会对他如何找到这个错误的故事感兴趣。

bash bugs vulnerability shellshock

20
推荐指数
1
解决办法
853
查看次数

如何在 bash 中明确且安全地强制使用内置命令

有一个类似的问题涉及“包装”场景,例如您想cd用调用 builtin 的命令替换cd

但是,鉴于 shellshock 等人并知道 bash 从环境中导入函数,我进行了一些测试,但找不到cd从脚本中安全调用内置函数的方法。

考虑这个

cd() { echo "muahaha"; }
export -f cd
Run Code Online (Sandbox Code Playgroud)

在此环境中使用调用的任何脚本cd都会中断(考虑类似 的效果cd dir && rm -rf .)。

有用于检查命令类型的命令(方便地称为type)和用于执行内置版本而不是函数的命令(builtincommand)。但是,瞧,这些也可以使用函数覆盖

builtin() { "$@"; }
command() { "$@"; }
type() { echo "$1 is a shell builtin"; }
Run Code Online (Sandbox Code Playgroud)

将产生以下结果:

$ type cd
cd is a shell builtin
$ cd x
muahaha
$ builtin cd x
muahaha
$ command …
Run Code Online (Sandbox Code Playgroud)

security bash

20
推荐指数
2
解决办法
2623
查看次数

"${var,,}" 中的逗号是什么意思?

read -p "Enter yes/no   " SOMEVAR

SOMEVAR=`"echo ${SOMEVAR,,}"`
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一个${SOMEVAR,,}: bad substitution错误。

bash

11
推荐指数
1
解决办法
2533
查看次数

Bash - Shell 变量中的函数

我正在阅读这篇关于在 bash shell 变量中使用函数的文章。我观察到要使用 shell 函数,必须导出它们并在子 shell 中执行它们,如下所示:

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function
Run Code Online (Sandbox Code Playgroud)

我想问一下是否可以在 bash shell 变量中定义函数,以便它们可以在当前 shell 中执行而不使用 export & running new shell?

bash

7
推荐指数
2
解决办法
5633
查看次数

CVE-2014-6271 Bash 漏洞示例

我试图了解可能存在的安全问题CVE-2014-6271,我看到的所有链接都只提供了以下命令。

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Run Code Online (Sandbox Code Playgroud)

如果我得到的输出为

vulnerable
this is a test
Run Code Online (Sandbox Code Playgroud)

这意味着我的 bash shell 很脆弱。

但它与安全有什么关系呢?换句话说,会对我的系统造成什么损害?

security bash shellshock

5
推荐指数
1
解决办法
4843
查看次数

你能用 `at` 命令执行 Bash 函数吗?

我想在预定的时间执行 Bash 函数。我认为正确的工具是at命令。

但是,它似乎不起作用。

function stupid () {
    date
}

export -f stupid

cat << EOM | at now + 1 minute
stupid
EOM
Run Code Online (Sandbox Code Playgroud)

等待一分钟后,我检查了我的邮件,这是我看到的错误:

sh: line 41: syntax error near unexpected token `=\(\)\ {\ \ date"
"}'
sh: line 41: `"}; export BASH_FUNC_stupid()'
Run Code Online (Sandbox Code Playgroud)

我不明白这里出了什么问题,尤其是因为我知道该功能有效。

$ stupid
Fri May 29 21:05:38 UTC 2015
Run Code Online (Sandbox Code Playgroud)

查看错误,我认为使用了不正确的 shell 来执行函数(sh而不是bash),但是如果我检查$SHELL/bin/bash,我看到它指向,并且手册页at说:

$ echo $SHELL
/bin/bash
$ man at

    ...

    SHELL   The value of …
Run Code Online (Sandbox Code Playgroud)

bash environment-variables function at

5
推荐指数
1
解决办法
2882
查看次数

如何跟踪/记录在 shell 上执行的命令?

命令可以在任何 shell 中执行之前写入日志文件吗?我知道 ssh 有一个补丁可以记录来自 ssh 会话的所有命令,但我什至想记录通过 cgi 或 php-scripts 从网络服务器执行的命令。

shell security logs monitoring

4
推荐指数
2
解决办法
3万
查看次数