If you want to test for any of the bits, use /
. I.e. for your use case:
find "$DIRECTORY" -perm /4000
and:
find "$DIRECTORY" -perm /2000
or combined:
find "$DIRECTORY" -perm /6000
You may use both folders and files as argument for GNU find
.
Another, IMO better readable, approach is using the mnemonic shortcuts. I.e.:
find "$DIRECTORY" -perm /u=s,g=s
Caveat emptor
Keep in mind that the variants of find
vary. They may also behave differently. Always read the friendly manual (RTFM).
SUID(Set-user Identification) and SGID(Set-group identification) are two special permissions that can be set on executable files, and These permissions allow the file being executed to be executed with the privileges of the owner or the group.
- SUID: It is special file permission for executable files. This enables other users to run the file with the effective permissions of the file owner. But Instead of normal x which represents executable permissions. We will see s(this indicates SUID) special permission for the user.
- SGID: This is also special file permission for executable files that enables other users to inherit the effective GID(Group Identifier) of a group owner. Here rather than x which represents executable permissions, we will see s(which indicates SGID) special permission for group users
Now let’s look at how to find files that have SUID and SGID set using the find command:
Syntax:
find directory -user root -perm -4000 -exec ls -ldb {} ; >/tmp/filename
Here,
Find directory | Checks for all mounted parts starting with the specified directory |
---|---|
-user root | Display files owned by root |
-perm -4000 | Print files only with permissions set to 4000 |
-exec la -ldb | Displays the output of find command in ls – |
>/tmp/filename | Writes the result to the filename we specify |
Note: For some directories such as (/etc, /bin, /sbin) or files that require root privileges we should use the sudo command to get the root privileges.
So now we will show how to list all files which have SUID permissions:
find directory -user root -perm -4000 -exec ls -ldb {} ; >/tmp/ckprm
The above command will dump all of our files having SUID permissions into a ckprm file.
The below images shows all files with SUID permissions:
Now we are going to see How to list all files which have SGID permissions:
Note: In place of filename we can use filename up to our choice
Command: find / -user root -2000 -exec ls -ldb {} ; > /tmp/ckprm
Since there are more files with SGID permissions I cannot show up the full entire one.
To find files that have both SUID and SGID set, run the command below.
find / -user root -perm -6000 -exec ls -ldb {} ; > /tmp/ckprim1
As you can see only one file is having both SUID and SGID Permissions
Removing SUID and SGID:
If we want to remove SGID and SUID permissions on the files which have these two permissions.Then for removing the first SUID permissions:
chmod u-s filename
For Example, we have removed permission for the SUID file
Here in the above image, we have removed permission for the /usr/sbin/ppd file
You can see the left side image before removing permissions and the right side image after removing the permissions.
Then for removing the first SGID permissions: we have to do the same but change the command a little.
chmod g-s file_name
For Example, we have removed permission for the SGID file
Here in the above image, we have removed permission for the /usr/bin/wall file.
You can see the left side image before removing permissions and the right side image after removing the permissions.
Last Updated :
19 Feb, 2021
Like Article
Save Article
Сегодня в этой статье мы вернулись с еще одной наиболее выгодной командой из серии Linux для пентеста, а именно «Find».
Команда Find используется для поиска из списка файлов и каталогов, поэтому, зная этот факт, мы теперь проиллюстрируем, как мы можем использовать ее в Повышении привилегий.
Содержание
- Содержание
- Введение в find
- Эксплуатация find
- Введение в find
- Основная операция с использованием Find
- Поиск файлов с полными правами.
- Чтобы найти все скрытые файлы
- Чтобы найти все читаемые файлы в каталоге
- Поиск файлов SUID
- Найти файлы SGID
- Чтобы найти все доступные для записи файл
- Эксплуатация Find
- Использование прав sudo
- Настройки SUID для повышения привилегий
- Использование SUID
Содержание
Введение в find
- Основная операция выполнена с использованием Find
Эксплуатация find
- Настройка прав sudo для повышения привилегий
- Использование прав sudo
- Настройки SUID для повышения привилегий
- Использование SUID
Введение в find
Команда «find» – это средство командной строки, позволяющее обойти структуру файловой пирамиды и найти точное местоположение файла и каталога в соответствии с желанием пользователя.
Эта команда может использоваться различными службами, такими как поиск любого файла по «размеру, разрешениям, дате изменения / доступа, пользователям, группам» и многим другим в соответствии с пользовательскими реквизитами.
Подобно каждой команде Find также можно кратко понять используя help / man, как показано на рисунке ниже. find –help
Основная операция с использованием Find
Поиск любого файла по определенному имени в текущем каталоге: эта команда поддерживает поиск любого файла по определенному имени.
Предположим, мы хотим найти в текущем каталоге текстовый файл по имени «raj», а затем просто составим команду, как показано ниже:
Поиск любого файла по определенному имени в домашнем каталоге: если мы хотим найти все файлы в домашнем каталоге по нужному имени файла, в нашем случае это «raj.txt»:
(Это позволит пользователю найти все файлы «raj.txt» в домашнем каталоге)
Найти файлы по их расширению:
это можно сделать, указав конкретное расширение файла.
Если какой-либо пользователь хочет получить какой-либо файл по его расширению, то это можно сделать с помощью опции «-type f».
В нашем сценарии мы выбираем поиск файлов с расширением .txt
Можно также использовать опцию «-type d» вместо «-type f» для получения каталога.
find / -type f -name “*.txt”
Эта команда будет выводить все файлы .txt в качестве желаемого вывода.
Поиск файлов с полными правами.
Когда кто-либо захочет исследовать файлы с полными правами, например, «777», это можно сделать с помощью «-perm 0777», а затем команда find с опцией «-type f», которая выведет вывод для всех файлов, которые имеют «777»
find . –type f –perm 0777 –print |
Чтобы найти все файлы из определенного пользователя каталога: если нам нужно найти все файлы, которые принадлежат определенному пользователю, в любом выборочном каталоге, то мы можем выполнить это командой:
В нашем случае мы находим все те файлы, которые принадлежат пользователю «raj» в «каталоге tmp».
Чтобы найти все скрытые файлы
Если мы хотим найти все скрытые файлы в любом каталоге, мы наберем команду, как показано ниже:
find /tmp -type f -name “.*”
Чтобы найти все читаемые файлы в каталоге
Найти все читаемые файлы из определенного каталога.
На примере ниже мы обнаруживаем все те файлы, которые находятся в читаемой форме в каталоге /etc
find /etc/ -readable -type f 2>/dev/null
Введя команду выше, мы получим все читаемые файлы, которые находятся в /etc в качестве вывода.
Поиск файлов SUID
при выполнении любой команды, для которой установлен бит SUID, ее действующий UID становится владельцем этого файла.
Уязвимости Linux в файлах SUID SUGID
Итак, если мы хотим найти все эти файлы, которые содержат бит SUID, его можно получить, введя команду:
find / –perm –u=s –type f 2>/dev/null
Найти файлы SGID
Разрешение SGID аналогично SUID, но единственное отличие состоит в том, что всякий раз, когда выполняется какая-либо команда, для которой установлено разрешение SGID, процесс будет иметь ту же группу владения, что и владелец файла.
Итак, чтобы запустить все те файлы, которые имеют бит SGID, введите команду:
find / -perm -g=s -type f 2>/dev/null
Чтобы найти файлы SUID и SGID одновременно: Если мы хотим извлечь все эти файлы одновременно, для которых установлены оба бита, то есть «SUID и SGID», то команда find выглядит так:
find / –perm –g=s –o –perm –u=s –type f 2>/dev/null
Чтобы найти все доступные для записи файл
Чтобы найти любые доступные для записи каталоги в любом нужном каталоге, например: /home, /tmp, /root, мы запустим команду:
find /home -writable -type d 2>/dev/null
Мы нашли все доступные для записи каталоги из /home.
Эксплуатация Find
Права sudo настроены для повышения привилегий
Теперь мы создадим нашу настройку команды Find, предоставив ей более высокие привилегии, то есть с правами администратора.
Как мы знаем, производительность каждой команды изменяется после влияния более высоких привилегий.
Точно так же мы проверим нашу команду Find и поймем, какой эффект это окажет после выполнения прав sudo и как мы можем настроить ее еще больше при повышении привилегий.
Мы создадим локального пользователя (test), который получит права sudo в качестве пользователя root.
Чтобы добавить права sudo, откройте файл /etc/sudoers и вставьте нижеприведенную команду в качестве спецификации привилегий пользователя.
test ALL=(root) NOPASSWD: /usr/bin/find
Использование прав sudo
Теперь мы начнем использовать сервис Find, используя привилегию sudo.
Для этого у нас должен быть сеанс на компьютере жертвы, который позволит нам разработать локальный пользовательский доступ к целевой системе, что будет способствовать дальнейшему расширению прав пользователя root.
Для этого нам нужно соединиться с целевой машиной с помощью ssh, поэтому введите команду, как показано ниже, чтобы выполнить то же самое.
Затем мы проверили право sudo пользователя «test» (если он указан) и обнаружили, что пользователь «test» может выполнить команду «find» как «root» без пароля.
Команда Find позволяет вам выполнять некоторые конкретные действия, такие как «print, delete и exec».
Поэтому здесь мы используем привилегию «exec» для выполнения команды доступа к корневой оболочке, запустив /bin/bash с помощью команды find, как показано ниже:
sudo find /home -exec /bin/bash ;
Выполнив команду выше, мы успешно расширили оболочку рута как показано на рисунке ниже.
Настройки SUID для повышения привилегий
Как известно, битовое разрешение SUID позволяет пользователю выполнять любые файлы в качестве владельца существующего элемента файла.
Теперь мы включаем разрешение SUID для Find, чтобы локальный пользователь мог использовать функцию Find в качестве пользователя root.
Следовательно, введите следующий для включения бита SUID:
which find chmod u+s /usr/bin/find ls -la /usr/bin/find
Использование SUID
Как мы знаем, у нас есть доступ к компьютеру жертвы, поэтому мы будем использовать команду Find, чтобы определить двоичные файлы, имеющие разрешение SUID.
find / –perm –u=s –type f 2>/dev/null
Итак, здесь мы пришли к выводу, что бит SUID имеет полномочия для очень многих двоичных файлов, но нас беспокоит: /usr/bin/find.
Как мы знаем, команда Find поддерживает выполнение определенных действий, таких как print, delete и exec.
Итак, здесь мы снова пользуемся привилегией «exec» для выполнения другой команды, то есть «whoami»
find raj –exec “whoami” ;
Точно так же вы можете воспользоваться командой Find для повышения привилегий root.
Loading
I’m looking for find
command arguments to find all files under the /
that have setuid and setgid privileges. I have find / ???
so far.
Palec
12.5k8 gold badges66 silver badges138 bronze badges
asked Feb 3, 2010 at 5:52
0
setuid or setgid (GNU findutils):
find / -perm /6000
setuid or setgid (POSIX):
find / -perm -4000 -o -perm -2000
setuid and setgid:
find / -perm -6000
answered Feb 3, 2010 at 5:56
Sean BrightSean Bright
118k17 gold badges138 silver badges145 bronze badges
2
find / ( -perm -u+s -o -perm -g+s ) -type f
answered Feb 3, 2010 at 5:59
Alok SinghalAlok Singhal
92.4k21 gold badges125 silver badges158 bronze badges
2
find / -perm -u=s -g=s -type f 2>/dev/null
the following command you can enumerate all binaries having SUID permission.
answered May 20, 2018 at 15:59
BoschkoBoschko
3575 silver badges14 bronze badges