Статья Как украсть sudo пароль Ubuntu и macOS без каких-либо эксплойтов/кряка
С помощью простого трюка социальной инженерии, пароли sudo могут быть захвачены в считанные секунды без ведома цели. Пароли могут быть сохранены в файл или будут отправляться к другому компьютеру.
После эксплуатирования системы, пентестеры и хакеры часто начинают атаки эскалации привилегий (privesc). Такие атаки включают эксплуатацию ядра и фишинг паролей. Рекомендуемая здесь атака использует подход социальной инженерии, используя функции Bash для эмуляции функциональности команды sudo.
Как Sudo должен работать
Давайте используем следующие команды whoami и id в качестве примера. Если мы введем 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 на свою страницу
Целевые системы macOS
Этот вид атаки менее эффективен против пользователей mac OS. Просто потому, что они не так часто открывают терминал и выполняют команды с повышенными правами. Пользователям MacOS команда sudo не нужна так часто, как пользователям VPS или Ubuntu desktop. Тем не менее, я покажу, как настроить это против цели macOS, поскольку это может быть полезно для некоторых пентестеров, исследующих каждый возможный маршрут, чтобы повысить их бэкдор.
/.bashrc , macOS выполняют
Когда цель открывает терминал и выполняет команды с sudo, пароль будет сохранен в каталоге /tmp. Это показано на скриншоте ниже.
Как Вытащить пароль
В дополнение к сохранению пароля в каталоге / tmp желательно чтобы пароль был отправлен на другой компьютер или сервер. Правильный прослушиватель PHP может быть настроен для перехвата данных, содержащих пароль.
Abusing SUDO
In Linux, sudo stands for “super user do”. When you run a command in Linux and prepend it with sudo, the command will be run as with root privileges. For example, if you want to install something, you will usually have to run it with sudo. There are a few things to keep in mind about sudo:
- The user running the sudo command must be a member of the sudoers group.
- A password is usually required to run the command
- Some commands that usually require the sudo command can be run without sudo if an administrator added an exception in the /etc/sudoers file.
- sudo leaves an audit trail in the logs.
- An administrator can specify entire groups of users, or specific commands for specific users allowed to be run with sudo.
With these things in mind, let’s jump into some common misconfigurations of sudo so we can escalation our privileges.
Known Password
Let’s start really simple. If there is a user we found a password for (look at previous section), and this user happens to be a member of the sudoers group, all we have to do to become root is run this command and enter the password:
If this user is a member of the sudoers file, you should be root now if the su command isn’t blocked.
Escape Sequences
Sometimes system administrators will allow certain users to run a specific set of commands with sudo privileges. To list out a list of these privileges, we can type out sudo -l. This will list out all the programs we can run as sudo. Below is a sample output of commands the user can run with sudo.
This means any command listed here is allowed to be run with the sudo command because the system administrator added this configuration into the /etc/sudoers file. Keep this in mind because the next topic will link back to this concept.
Many programs provide a way to display a shell to the user. One popular example is an old version of the popular networking scanning tool nmap. Older versions of nmap could display a shell to users by typing in nmap –interactive. After typing this in, the user can type in !sh to get an interactive shell.
Now let’s combine the two concepts we just discussed. If we have permission to run nmap with sudo privileges, and we can get nmap to spawn an interactive shell, what permissions will the shell be running as? Theoretically root since the program was run with sudo.
Let’s try attacking nmap in the example below with only two commands:
First, we run nmap with sudo privileges in interactive mode:
Next we type in !sh into the prompt to get an interactive shell as root:
Other programs offer similar functionality as well. These are usually bundled with software as a “feature”, but when improperly implemented, they become security holes in the system. At the time of this writing there is an active project called GTFOBins located at https://gtfobins.github.io/ that contains a well-kept list of Unix binaries that can be exploited by abusing sudo or other functions. This should be one of the first places you check; there are well over a hundred known binaries on this list.
Below is a small table with a few examples of popular programs and how to spawn an interactive shell from the program. If these programs are run with sudo, the interactive shells in these programs will give you root.
Note: if the program Zip is able to run as SUDO, reference this guide for a comprehensive walkthrough on how to exploit Zip. Zip Privilege Escalation
It’s easy for a system administrator to become frustrated every time a user needs sudo access temporarily for a small task, so instead of looking for an alternative solution, the system administrator will provide permanent sudo access to particular programs for certain users. If the program provides access to an interactive shell or can write to the file system, you have a clear path to root.
Abusing Functionality
The next example is something I found online for how to abuse the built-in functionality of the apache2 service to read files on the system as root. https://touhidshaikh.com/blog/?p=790.
The service apache2 allows anyone with elevated privileges to read files systems on the server. So, what can you do with this? You can’t quite get a root shell with this command, but you can read sensitive files on the file server. If there is a password protected .config file you can’t access, but if you have sudo access, you can now access the file and read the contents. You can also do this for file such as /etc/shadow and get the password hashes of users. Let’s see how this works. By running the following command, we can get the password hashes of all the users on the machine:
When used by itself, this abuse of sudo doesn’t lead to root, but can be chained with other attacks to potentially lead to elevated privileges.
LD_PRELOAD Exploitation
LD_PRELOAD is an environment variable that can be set to point to any shared libraries specified. The dynamic linker on the Unix system will load these shared libraries before other libraries. So, what does this mean for an attacker? When we type in sudo -l and we see something that looks like the output below, we have a high likelihood of being able to elevate to root.
Let’s take a step back so we understand why this is a vulnerability. When a Unix system loads a program, it will load all the necessary libraries (usually .so files) to run the program. If we have write access to the LD_PRELOAD variable AND sudo access to a program, we can change the order of libraries loaded for that certain program, and load a malicious executable before any other libraries are loaded for the program. Our attack would look something like this:
Create a malicious executable called exploit.c located in the /tmp/ directory.
Compile the executable.
Load the new library executable first when running a program we have sudo privileges to and we get root
Generally, you won’t need to use this technique because there are so many programs you can abuse if you already have sudo privileges for them, but it’s a good one to know just in case.
Abusing SUDO (Linux Privilege Escalation)
If you have a limited shell that has access to some programs using the command sudo you might be able to escalate your privileges. here I show some of the binary which helps you to escalate privilege using the sudo command. But before Privilege Escalation let’s understand some sudoer file syntax and what is sudo command is? ;).
Index
- What is SUDO?
- Sudoer FIle Syntax.
- Exploiting SUDO user
- /usr/bin/find
- /usr/bin/nano
- /usr/bin/vim
- /usr/bin/man
- /usr/bin/awk
- /usr/bin/less
- /usr/bin/nmap ( –interactive and –script method)
- /bin/more
- /usr/bin/wget
- /usr/sbin/apache2
What is SUDO ??
The SUDO(Substitute User and Do) command, allows users to delegate privileges resources proceeding activity logging. In other words, users can execute command under root ( or other users) using their own passwords instead of root’s one or without password depending upon sudoers setting The rules considering the decision making about granting an access, we can find in /etc/sudoers file.
Sudoer File Syntax.
Explain 1: The root user can execute from ALL terminals, acting as ALL (any) users, and run ALL (any) command.
The first part is the user, the second is the terminal from where the user can use the sudo command, the third part is which users he may act as, and the last one is which commands he may run when using. sudo
Explain 2: The above command, makes the user touhid can from any terminal, run the command power off using touhid’s user password.
Explain 3: The above command, make the user touhid can from any terminal, run the command find as root user without password.
Exploiting SUDO Users.
To Exploiting sudo user u need to find which command u have to allow.
sudo -l
The above command shows which command have allowed to the current user.

Here sudo -l, Shows the user has all this binary allowed to do as on root user without password.
Let’s take a look at all binary one by one (which is mention in index only) and Escalate Privilege to root user.
Using Find Command
Using Vim Command
Using Nmap Command
Note : nmap –interactive option not available in latest nmap.
Latest Way without –interactive
Using Man Command
after that press !sh and hit enter
Using Less/More Command
after that press !sh and hit enter
Using awk Command
Using nano Command
nano is text editor using this editor u can modify passwd file and add a user in passwd file as root privilege after that u need to switch user. Add this line in /etc/passwd to order to add the user as root privilege.
touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/root:/bin/bash
now switch user password is : test
Using wget Command
this very cool way which requires a Web Server to download a file. This way i never saw on anywhere. lets explain this.
On Attaker Side.
- First Copy Target’s /etc/passwd file to attacker machine.
- modify file and add a user in passwd file which is saved in the previous step to the attacker machine.
- append this line only => touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/root:/bin/bash
- host that passwd file to using any web server.
On Victim Side.
now switch user password is : test
Note: if u want to dump file from a server like a root’s ssh key, Shadow file etc.
Setup Listener on attacker : nc –lvp 8080
Using apache Command
sadly u cant get Shell and Cant edit system files.
but using this u can view system files.
Output is like this :
Sadly no Shell. But you manage to extract root hash now Crack hash in your machine. For Shadow Cracking click here for more.
I posted some if you know any other please comment and share knowledge to other Happy HAcking.
Методы проникновения в линуксовые системы (часть 4): Страшные истории про sudo
В этой статье мы рассмотрели разные способы подбора паролей для SSH и эксплуатации приложений, запускаемых при помощи команды sudo.
Автор: Scott Sutherland
В этой статье рассматриваются различные способы подбора паролей для SSH и атак на приложения, доступные для запуска при помощи команды sudo, с целью получения шелла с правами суперпользователя. Этот кейс в основном появляется в конкурсах навроде CTF (Capture the flag; Захват флага), но рассматриваемый подход для атак на слабые пароли и приложения, запускаемые через sudo, может быть применим в реальных ситуациях. Статья будет полезна начинающим специалистам в сфере тестирования на проникновение.
Это четвертая из пяти частей, предусмотренных в этой серии, где рассматриваются наиболее распространенные методы проникновения и расширения привилегий, применимые в контексте линуксовых систем во время реальных пентестов.
Поиск SSH серверов
Перед началом подбора паролей или атак на приложения, запускаемые через sudo, нужно найти сервера с SSH. Nmap и другие сканеры портов сильно облегчают нашу задачу, поскольку SSH, как правило, использует стандартный порт 22.
Ниже показана команда, с которой можно начать.
nmap -sS -sV -p22 192.168.1.0/24 -oA sshscan
После отработки сканера портов можно быстро распарсить файл с результатами поиска и получить перечень SSH серверов. Ниже показаны примеры команд и видеодемонстрация процесса.
Атака на SSH сервера с использованием словаря
Подбор пароля – довольно простой, но в то же время эффективный, метод для получения первоначального доступа к линуксовой системе. Мы наблюдаем использование слабых или стандартных паролей примерно в половине случаев.
Если вы не решали задач подобного рода, ниже приводятся рекомендации, которых можно придерживаться на начальных этапах:
Выполняйте дополнительное сканирование и анализ сигнатур целевого SSH сервера на предмет того, является ли цель специфическим устройством: известным принтером, свитчем, роутером или другим сетевым девайсом. Во многих случаях эта информация может помочь в обнаружении стандартных паролей для устройства.
На базе анализа сигнатур служб также попробуйте обнаружить, какие приложения запущены в системе, которые могут использовать локальные учетные записи со стандартными паролями.
Наконец, попробуйте комбинации наиболее распространенных имен пользователей и паролей. Однако будьте осторожны и учитывайте, что могут использоваться политики блокировки аккаунтов. Никто не хочет иметь лишних проблем.
В этом сценарии предполагается, что мы будем проверять наиболее распространенные комбинации имени пользователя и пароля. Соответственно, нам нужен файл, содержащий имена пользователей, и файл, содержащий пароли. В дистрибутиве kali есть несколько хороших словарей с наиболее распространенными именами пользователей и паролями, многие из которых можно найти в директории /usr/share/wordlists/.

Рисунок 1: Перечень стандартных словарей в Kali Linux
Хотя эти словари могут быть очень полезны, мы будем создавать новые файлы с небольшим перечнем.
echo user >> users.txt
echo root >> users.txt
echo test >> users.txt
echo Password >> passwords.txt
echo Password1 >> passwords.txt
echo toor >> passwords.txt
echo test >> passwords.txt
В Metasploit есть модули, которые можно использоваться для сетевых атак по словарю для большинства протоколов управления. Большинство из этих модулей именуются в формате protocol_login.
Ниже показан пример использования модуля ssh_login.
set USER_AS_PASS TRUE
set USER_FILE /root/users.txt
set PASS_FILE /root/password.txt
set rhosts file:///root/ssh.txt
set threads 100
set verbose TRUE
На скриншоте ниже продемонстрировано, что должно получиться в случае успешного подбора пароля.

Рисунок 2: Пример успешного подбора пароля
Ниже приводится видеодемонстрация процесса подбора паролей и получения первоначального доступа в систему при помощи Metasploit.
Как только валидный пароль обнаружен, можно подключаться при помощи ssh клиента.

Рисунок 3: Авторизация в системе с использование найденного пароля
Просмотр опций выполнения файла sudoers
Есть множество утилит, используемых для идентификации небезопасных конфигураций с целью расширения привилегий: Metasploit, LinEnum, Lynis, LinuxPrivCheck, UnixPrivsEsc. Однако в этой статье мы рассмотрим файл sudoers, который определяет, какие команды могут запускаться в контексте какого пользователя. Кроме того, этот файл часто используется для указания команд, запускаемых от имени суперпользователя теми, у кого более низкие привилегии.
Команда sudo, показанная ниже, может использоваться для просмотра команд, которые может запускать текущий пользователей с правами root’а.

Рисунок 4: Перечень команд, которые может запускать текущий пользователь с правами суперпользователя
В этом сценарии наш пользователь может запускать любую команду с правами суперпользователя. Рассмотрим несколько примеров.
Эксплуатация команды sudo sh
К сожалению, мы наблюдали подобные ситуации в реальных средах. Пользователь, владеющий права на запуск sh или любого другого шелла через sudo, имеет полный доступ к системе с правами суперпользователя. Ниже показан простейший пример:

Рисунок 5: Получение прав суперпользователя после запуска команды sudo sh
Эксплуатация команды sudo vi
VI – текстовый редактор, идущий в составе большинства линуксовых дистрибутивов и популярный среди многих разработчиков. Соответственно, не так часто возникают ситуации, когда vi запускается через sudo для модификации привилегированных конфигурационных файлов, которые используются в средах разработки. Способность изменять любой файл в системе имеет свои риски, однако у vi есть встроенный функционал, позволяющий выполнять произвольные команды. То есть, если у пользователя есть права на запуск vi через sudo, то, по сути, есть полный доступ к серверу с правами root’а.
Ниже показан скриншот с результатами выполнения этой команды:

Рисунок 6: Результат эксплуатации команды sudo vi
Эксплуатация команды sudo python
Многим нравится Python, представляющий собой язык для написания сценариев, используемый во многих сферах и не собирающийся сдавать свои позиции в ближайшее время. Довольно редко можно увидеть, что Python или любой другому интерпретатору разрешено работать через sudo, но несколько раз встречалось. Python, как и большинство современных и популярных языков программирования, используемых для написания сценариев, по умолчанию поддерживает произвольное выполнение команд.
Ниже показана базовая команда и короткое видео, демонстрирующее весь процесс:
Эксплуатация команды sudo nmap
Большинство сценариев, связанных с повышением привилегий, включает в себя манипуляцию приложением, работающим с более высокими привилегиями, для запуска вашего кода или команд. Одна из многих техник, используемых злоумышленниками, — эксплуатация функций, встроенных в целевое приложение. Распространенная тема, наблюдаемая нами во многих приложениях, — создание и загрузка пользовательских модулей, плагинов или дополнений.
Предположим, что мы можем запускать Nmap при помощи sudo и хотим использовать функционал этого сканера для запуска команд операционной системы.
Когда я сталкиваюсь с ситуациями, когда есть возможность запуска Nmap через sudo, то обычно задаю следующие вопросы:
Позволяет ли Nmap прямое выполнение команд операционной системы? Нет (только старые версии при помощи флага –interactive и команды !whoami).
Позволяет ли Nmap расширить свою функциональность? Да. Разрешено загружать и выполнять пользовательские .nse модули.
На каком языке программирования написаны .nse модули? На языке LUA.
Поддерживает ли язык движок LUA выполнение команд операционной системы? Да.
Попробуем создать модуль для выполнения команд операционной системы. Важно отметить, что мы могли бы написать модуль для запуска шелл кода или вызова специфических API функций, но в этот раз не будем усложнять жизнь.
Предположим, что мы потратили немного времени для исследования существующих модулей и возможностей языка LUA, после чего был разработан следующий .nse модуль:
Как только модуль скопирован в целевую систему, вы можете запустить этот модуль через Nmap. Ниже продемонстрировано выполнение модуля от имени непривилегированного пользователя.
nmap —script=./exec —script-args=’command=whoami’

Рисунок 7: Результат выполнения команды whoami
nmap —script=./exec —script-args=’command=cat /etc/shadow’

Рисунок 8: Результат выполнения команды cat /etc/shadow
По скриншотам выше становится понятно, что мы можем запускать произвольные команды. Теперь попробуем сделать то же самое, но при помощи sudo.


Рисунок 9: Результат выполнения команд в контексте суперпользователя
В качестве развлечения мы периодически конфигурируем ncat в файле sudoers при проведении разных конкурсов, однако мы не наблюдали подобные ситуации в реальной жизни. На видео ниже демонстрируется процесс с использованием Nmap и ncat.
В этой статье мы рассмотрели разные способы подбора паролей для SSH и эксплуатации приложений, запускаемых при помощи команды sudo. Надеюсь, эта статья будет полезной начинающим специалистам в сфере безопасности.