【问题标题】:how dangerous is to echo passwords via pipe to passwd通过管道将密码回显到 passwd 有多危险
【发布时间】:2017-10-31 19:10:51
【问题描述】:

我在不止一次的讨论中看到,使用 echo 来管道到 passwd 是危险的,因为可以从进程列表中获取提供给 echo 的参数。

我目前正在开发一个通过 ssh 远程更改密码的工具。我确实使用 echo 方法,因为我没有使用 usermod 或 chpasswd 的 root 访问权限。

命令:

echo -e 'old\nnew\nnew' | passwd

为了检查它是多么容易 - 我试过了。但无法得到它们。

这是我的方法:

#!/bin/bash
filename=$1

while true
do
    echo "$(pgrep -af passwd)" >> "$filename"
    sleep 0.1
done

我几次通过 echo 更改密码,但什么也没看到。我认为 sleep 0.1 可能是个问题。

从进程列表中获取它是多么容易,因此以这种方式使用它是多么不安全。

【问题讨论】:

  • 您只需要 root 权限即可更改某人 else 的密码。让数据来自标准输入而不是终端不会改变这一点。
  • 它确实有效。试试看。

标签: bash processlist


【解决方案1】:

这取决于您使用的 shell 是否具有 echo 作为内置函数,或者使用外部二进制文件 (/bin/echo)。如果它是一个外部二进制文件,它将作为一个子进程运行,密码在其参数列表中清晰可见(通过pspgrep 等)。如果它是内置的,管道中的 echo 命令将作为子进程运行,但它将是与父 shell 具有相同可见参数列表的子 shell(即它是安全的)。

所以它可能是安全的,但有几个并发症需要担心。首先,如果您通过ssh 在远程计算机上运行它,您不一定知道它的默认shell 是什么。如果是 bash,你就没事。如果是破折号,我认为你有问题。其次,您不必担心远程 shell 和/或echo 命令,您还必须担心从本地脚本到远程echo 命令的路径上的每一步。例如,如果您使用:

ssh user@computer "echo -e 'old\nnew\nnew' | passwd"

...那么远程echo 可能是安全的(取决于远程shell),但正如@thatotherguy 指出的那样,密码将在远程shell 的(bash -c echo -e 'foo\nbar\nbar' | passwd和 em> 在本地ssh 进程的参数列表中。

还有另一个复杂的问题,顺便说一句:echo 在处理选项(如-e)和在输出字符串中转义(参见this question 示例)的方式上并不一致。最好使用printf(例如printf '%s\n' "$oldpass" "$newpass" "$newpass"),它也是bash 的内置函数。或者,如果您确定您使用的是 bash,则可以使用 here-string (<<<string) 代替。它根本不解释转义,但您可以使用 bash 的 $' ' 构造来解释它们:

passwd <<<"$old"$'\n'"$new"$'\n'"$new"

这根本不涉及子进程(/bin/echo 或子shell),所以不用担心进程表。

另一种避免远程shell 不确定问题和ssh 参数列表中显示密码问题的方法是通过ssh 的标准输入传递密码:

ssh user@computer passwd <<<"$old"$'\n'"$new"$'\n'"$new"

【讨论】:

  • 这是我最喜欢的答案,现在已经搜索了好几个小时。
【解决方案2】:

如果您要通过ssh 调用您的echo|passwd 命令,例如:

client$ ssh example.com "echo -e 'foo\nbar\nbar' | passwd"

那么你需要查看的进程不是passwd而是远程端sshd调用的用户登录shell:

server$ until pgrep -af bash | grep passwd; do true; done
8387 bash -c echo -e 'foo\nbar\nbar' | passwd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多