Как я могу автоматически передать пароль 'su'?

2261
noobler

Я работаю над эксплойтом для курса безопасности. Цель состоит в том, чтобы получить корневую оболочку в виртуальной машине Linux. Пока что я могу написать в / etc / passwd и изменить пароль root на произвольную строку.

Теперь я хочу использовать su, чтобы получить корневую оболочку. Поскольку мой эксплойт должен быть автоматизирован, он не может запрашивать пароль, а виртуальная машина не ожидает установки. У кого-нибудь есть идеи, как я могу передать пароль команде su? Или есть лучший способ?

2
Если вы можете писать в / etc / passwd, то наверняка вы уже поднялись до root? В таком случае, вы не могли бы установить / bin / bash и запустить его? Paul 12 лет назад 1
У меня нет рута на вм. Мы должны использовать заданную программу резервного копирования с установленным setuid. Передав ему вредоносные аргументы, я могу заставить его сменить владельца / etc / passwd. noobler 12 лет назад 0
Можете ли вы передать вредоносные аргументы процесса setuid для установки setuid в / bin / bash? Paul 12 лет назад 0
@noobler У вас есть источник для программы резервного копирования? Если нет, вам нужно найти переполнение буфера методом проб и ошибок. `su` открывает / dev / tty, чтобы прочитать пароль. Вам нужно найти способ убедить `su` использовать свой собственный / dev / tty. ott-- 12 лет назад 0

2 ответа на вопрос

0
J. M. Becker

Лучший способ автоматизировать этот тип ввода, используя expectили лучше pexpect. большинство серверов поставляются с Python, по крайней мере, с современным дистрибутивом.

Во-первых, вы сказали, что ваша виртуальная машина не expectустановлена? Я не уверен, почему это важно. Есть ли причина, по которой вы не можете установить / выполнить что-либо под своей локальной учетной записью?

Следующее соображение, почему вы должны даже использовать passwd??? Вы также можете изменить пароль, заменив хэш, указанный в /etc/shadow. Очевидно, что вам сначала нужно правильно сгенерировать хеш, но если вы используете поддерживаемый хэш, он должен работать как положено. Теперь, как бы вы написали такое действие, это упражнение для вас.

Я также хочу упомянуть, passwdне читает его вход от STDIN. Если я не ошибаюсь, это читает из tty. Так что никакой фантазии просто так echoи sleepне получится. Однако возможно использование HEREDOC, но предполагается, что система достаточно отзывчива. Вы можете быть в состоянии разбить его и sleepмежду входами. Я только что проверил это, оно работало на моей рабочей станции Ubuntu.

#!/bin/bash passwd root <<'EOF' newpassword newpassword EOF 
-2
CamelBlues

Ваш эксплойт может также записать в файл groups и сделать текущего пользователя частью группы 'wheel' (или любой другой группы, которая может выполнять sudoкоманды без пароля). Тогда вы сможете sudo su root(или любой другой пользователь) без пароля.

Запуск visudoдолжен дать вам некоторые указания по настройке группы «Колесо» на вашей машине.

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

Sudo не установлен на виртуальной машине. noobler 12 лет назад 0

Похожие вопросы