sudo
Ранее я писал о расширенном (advanced) повышении привилегий с помощью возможностей Linux, эта статья посвящена простому повышению привилегий. Эти методы активно используются в CTFS и, конечно, в реальной жизни. В будущем я планирую продолжить писать статьи o расширенном повышении привилегий.Уровень: Легкий
Требования: Знание простых команд в Linux, логикa
Словарь:
запустить/выполнить - execute
Содержание
- Что такое повышение привилегий?
- Лаборатории и методы
Что такое повышение привилегий?
Повышение привилегий - это использование уязвимости, при которой пользователь может совершать действия, выходящие за рамки его привилегий. Мы попытаемся выполнить повышение привилегий в Linux, суть всего этого в том, чтобы обычный пользователь мог выполнять действия, которые могут быть выполнены только другим пользователем. Другим пользователем может быть либо root, либо любой другой пользователь в системе. Эта уязвимость связана с логикой, вы должны проанализировать, распознать и использовать. Прежде чем продолжить изучение лабораторий, мы должны понять некоторые основы того, как все это работает.Что такое бит setuid/setgid ?
Каждый файл и каталог в Linux имеет три набора битов разрешений, которые управляют доступом для трех различных категорий пользователей. Владелец (Owner) - пользователь, которому принадлежит файл или каталог. Если кто-то создал каталог или файл, это не означает, что этот пользователь является его владельцем, "владельство" может быть передано. Группа (Group) - группа пользователей, которые имеют одинаковые права. Другие (Others) - это все пользователи, которые не являются владельцами и не входят ни в группу, связанную с этим файлом.У каждого пользователя может быть три типа разрешений. Чтение (Read) - позволяет пользователю прочитать файл. Запись (Write) - позволяет пользователю редактировать файл. Для редактирования файла пользователю не нужно его читать, это означает, что вы можете редактировать файл, не имея разрешения "читать". Выполнить/Запустить (Execute) - позволяет пользователю запустить файл. В Windows, если мы хотим открыть Firefox, мы нажимаем на него, в Linux мы можем "запустить" его через терминал, и он откроется.
Обычно, когда мы запускаем исполняемое приложение, оно запускается с привилегиями пользователя, который его запускает. Допустим, в нашей системе есть 3 пользователя: user1, xss и root. Мы хотим, чтобы user1 перечислил файлы и каталоги пользователя xss и сохранил выходные данные в /root. В этом случае мы можем использовать setuid. Бит Setuid позволяет user1 запустить команду ls от имени пользователя xss, даже если команда запускается от имени user1. И затем пользователь root может добавить бит setuid в команду "mv", чтобы user1 смог сохранить список доступных каталогов и файлов в /tmp, а затем переместить его в /root. Опытные люди сейчас думают: "ЧТО он делает?". Я привожу пример ситуации, в которой ваша система может быть легко скомпрометирована (compromised) .
Давайте протестируем это:
Bash:
sudo adduser xss
ls /home/xss #по желанию
ls -l /usr/bin/ls #по желанию
sudo chown xss /usr/bin/ls
su xss
cd
chmod u+s /usr/bin/ls
touch xss.pro
ls /home/xss
Изображение [1] : Создание пользователя xss
Изображение [2] : Добавление бита setuid
Изображение [3] : Проверка каталога пользователя xss
Изображение [4] : Разрешении файла /usr/bin/ls
В этом случае мы выполнили первую часть для перечисления каталога пользователя "xss", мы использовали
chmod u+s <файл>, чтобы добавить бит setuid, мы можем сделать то же самое с setgid.Что такое cron и crontab?
Cron - это основанный на времени планировщик заданий, который работает в фоновом режиме и запускает команды. Допустим, мы хотим отправлять статистику о свободном пространстве в нашем linux в telegram каждый час, мы можем сделать это с помощью cron.Crontab - это файл для управления запланированными задачами в cron. У пользователей Linux есть свои собственные кронтабы.
Код:
* * * * * Команда
| | | | |
| | | | +-- День недели
| | | +---- Месяц
| | +------ День месяца
| +-------- Час
+---------- Минута
Прежде чем продолжить, удалите бит setuid, который мы установили ранее.
Bash:
chmod u-s /usr/bin/ls
Изображение [5] : Создание задания cron
Изображение [6] : Проверяем наш cron
Мы добавили строку в crontab, чтобы она запускала нашу команду. */2 означает запуск команды каждые 2 минуты. Если бы я написал 2 вместо */2, он запускал бы команду каждую 2-ю минуту каждого часа.
Код:
*/2 * * * * date > /home/kali/datatuta
Что за возможности sudo?
Возможности sudo используются для управления доступом к привилегированным командам. Как и в предыдущем случае, мы запустили команду ls в каталоге /home/xss от имени пользователя kali. Мы расширили наши привилегии. То же самое можно сделать здесь, для пользователя root или любого другого конкретного пользователя. Мы можем отредактировать файл /etc/sudoers и указать, какие пользователи могут запускать какие команды с особыми привилегиями. Когда мы разрешаем пользователю запускат команду sudo с особыми привилегиями, мы также можем сделать так чтобы этот пользователь мог запустить команду без необходимости ввода пароля. Все это звучит неплохо, когда мы хотим автоматизировать некоторые задачи, где нам приходится использовать sudo.Имя хоста (Hostname) - это имя конкретного компьютера. Чтобы просмотреть информацию о нашем имени хоста, мы можем использовать команду "hostnamectl".
Добавление данных в /etc/sudoers:
Код:
пользователь хост=(от имени) команда
xss ALL=(ALL:ALL) /usr/bin/find
Изображение [7] : Добавление и проверка привилегий
Изображение [8] : Добавление привилегий пользователю xss
Изображение [9] : Хацк
Итак, я добавил пользователю xss возможность запускать команду "find" от имени пользователя root, сама команда "find" имеет опцию "-exec", которая позволяет запускать другую команду. Я запустил команду "ls -la /root", чтобы она отображала содержимое каталога /root. Мы также можем использовать "cat" и читать любые данные, которые захотим. Разрешение команде "find" запускаться от имени sudo позволит хакерам стать root как 2x2.
Что такое PATH?
PATH - используется для указания списка каталогов, в которых операционная система будет искать исполняемые файлы при запуске команды.Когда мы вводим команду в терминале, наш Linux выполняет поиск по каталогам, указанным в пути, чтобы найти исполняемый файл для этой команды. Допустим, мы хотим запустить команду "ls", и наш PATH таков:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinВ этом случае система сначала проверит /usr/local/bin, чтобы найти команду ls, если ее там нет, она проверит /usr/bin и так далее.
Что такое файл .exrc?
Файл .exrc используется для хранения параметров конфигурации для Vim. Существует статья о конфигурации vim, которую вы можете найти здесь:https://www.freecodecamp.org/news/vimrc-configuration-guide-customize-your-vim-editor/Лаборатории и методы
Все лаборатории из:https://attackdefense.pentesteracademy.com/listing?labtype=linux-security-priv-esc&subtype=linux-security-priv-esc-basicЯ использую этот ресурс для лабораторий, потому что вместо того, чтобы предоставлять 20 лабораторий для одного и того же метода, они предоставляют 1 лабораторию для 1 метода. Приведенные здесь методы активно используются в CTF и, возможно, в реальной жизни, откуда белой шляпе знать?
Лаборатория №1
Ссылка:https://attackdefense.pentesteracademy.com/challengedetails?cid=73В этой лабораторной работе мы должны использовать уязвимость, связанную с setuid, и получить флаг.
Когда мы перечисляем файлы в домашнем каталоге, мы видим 2 файла: "greetings" и "welcome". Файл "welcome" имеет бит setuid который поставил root. Все, что мы можем, - это прочитать или запустить файл. Мы ничего не можем сделать с файлом "greetings".
Команда strings используется для извлечения строк, пригодных для печати, из двоичных файлов. Таким образом, в основном эта команда показывает только часть файла, которую пользователь может прочитать.
Когда мы читаем файл "welcome", мы видим, что там есть "greetings", поэтому, вероятно, "welcome" запускает "greetings", и поскольку мы можем запустить "welcome" с битом setuid, это означает, что "greetings" также запускается от имени пользователя root, поскольку root является владельцем файла "welcome".
Я знаю, это звучит немного сложно, подумайте об этом так. Root -> +setuid "welcome" -> ./welcome (как root) -> ./greetings (также как root, потому что оно запускается из "welcome")
Единственное, что приходит мне здесь на ум, - это удалить файл "greetings" и создать новый файл с тем же именем, но с другим содержимым, которое мы хотим запустить. Вы можете спросить, как получилось, что мы можем удалить файл, созданный другим пользователем? Мы можем удалить любой файл, который захотим, из КАТАЛОГА, в котором у нас есть разрешение "write".
Изображение [10] : Проверка файла
Изображение [11] : Проверка папки
Итак, я удалил файл "greetings" и создал новый файл с тем же именем с содержимым "/bin/bash", когда я запущу "welcome", он запустит "greetings", который запустит "/bin/bash" и предоставит мне доступ к оболочке root. Все это произошло потому, что бит setuid был добавлен в файл "welcome", который запускает все остальное.
Изображение [12] : Хаацк
Лаборатория №2
Ссылка:https://attackdefense.pentesteracademy.com/challengedetails?cid=87Эхх .. Мое первое повышение привилегий было выполнено таким образом, это было задание от моего руководителя, и тогда я понятия не имел, что такое повышение привилегий.
Иногда все, что нам нужно сделать, это проверить файлы, чтобы найти данные. В этой лабораторной работе мы должны использовать команду "find", чтобы найти пароль пользователя "root".
Как я писал выше, команда "find" имеет опцию "-exec", которая позволяет запускать другие команды. Я запустил команду "grep", чтобы она проверила содержимое всех файлов и выполнила поиск "root", параметры "-A" и "-B" означают "после" и "до". Он будет искать слово "root" и покажет 3 строки после этого слова и 3 строки перед этим словом. Я сделал это, потому что возможно, что пароль написан в верхних или нижних строках. После этого я использовал оператор канала (pipe) - "|". Оператор канала (pipe) передает выходные данные одной команды в качестве входных данных другой. Итак, после того, как первая команда получит то, что мы просили, вторая возьмёт этот результат и начнёт там искать слово "pass". Это уменьшит количество результатов.
Код:
find . -exec grep -A 3 -B 3 "root" {} \; 2>/dev/null | grep "pass" -A 3 -B 3
Изображение [13] : Нахождение данных
Изображение [14] : Хааацк
Мы просто вошли в систему с указанными учетными данными. Стоит отметить, что это также могли быть входнЫе данные базы данных, с помощью которых мы могли бы расширить наши привилегии. Очевидно, что все это зависит от ситуации.
Лаборатория №3
Ссылка:https://attackdefense.pentesteracademy.com/challengedetails?cid=74В этой лабораторной работе мы должны выполнить повышение привилегий с помощью cron. Когда мы проверяем crontab, мы видим, что у нашего пользователя нет заданий cron. После проверки всех процессов в системе мы видим, что пользователь "root" запускает команду "cron".
Обычно, когда выполняются cronjobs, данные сохраняются в /tmp. Вы увидите подобные случаи в большинстве CTF. Итак, когда мы проверяем папку /tmp, мы видим файл, владельцем этого файла является "root", и он обновляется каждую минуту, как вы можете видеть на скриншоте. Мы можем увидеть 5 новых файлов после извлечения их из файла "monitor.tar.gz ". Все эти файлы относятся к 2018 году, что на самом деле означает, что они, вероятно, находятся где-то на нашем компьютере, а затем вставляются в файл "monitor.tar.gz ".
Изображение [15] : Извлечение данных
Изображение [16] : Поиск файла
Имя нашего файла - "monitor", поэтому, вероятно, файлы, которые мы ищем, будут находиться в каталоге, показанном выше.
Изображение [17] : Хаааацк
Чтобы вставить все эти файлы в "monitor.tar.gz " вероятно, была использована команда "tar". Чтобы найти способ злоупотреблять этой командой, мы можем проверить GTFOBins. GTFOBins - это список двоичных файлов, которые могут быть использованы для злоупотребления неправильной конфигурацией системы. Когда мы проверяем наличие "tar", мы видим, что через него можно злоупотребить командой.
Код:
https://gtfobins.github.io/gtfobins/tar/
Но мы хотим выполнить команду, которая выдаст даст нам оболочку root, для этого мы можем просто создать файл с именем shell.sh и в этом файле мы можем написать команду
chmod u+s /usr/bin/find, которая добавит бит suid к команде "find".После выполнения этого, это будет похоже на "tar 1 2 3 4 5 shell.sh --checkpoint=1 --checkpoint-action=exec=sh shell.sh "Мы должны подождать минуту и после этого проверить /usr/bin/find, чтобы увидеть, был ли добавлен бит suid или нет. Теперь мы можем стать "root" с помощью команды "find". GTFOBins:
https://gtfobins.github.io/gtfobins/find/Мы можем просто использовать вторую команду (под SUID) и получить root shell:
Bash:
find . -exec /bin/sh -p \; -quit
Лаборатория №4
Ссылка:https://attackdefense.pentesteracademy.com/challengedetails?cid=699В этой лабораторной работе мы должны проверить процессы и найти те, которые запускает root. После этого мы проверяем команду, которая выполняется в этом процессе. Когда я попытался прочитать содержимое команды с "strings", это показало мне, что она запустила другую команду "chkrootkit". Chkrootkit - это инструмент, используемый для проверки системы на наличие признаков руткитов. Руткит - это разновидность вредоносного ПО, предназначенного для получения доступа к системе, его цель - скрыть свое присутствие, что затрудняет его обнаружение.
Если мы загуглим "chkrootkit priv esc", то увидим, что существует эксплойт повышения привилегий. Чтобы воспользоваться уязвимостью, мы должны создать файл с именем "update" в каталоге /tmp, добавить в файл то, что мы хотим выполнить от имени root, и подождать. Я снова решил добавить бит suid к команде "find" и выполнил privesc таким образом. Ссылка на эксплойт:
https://www.exploit-db.com/exploits/33899
Изображение [18] : Google
Изображение [19] : Хааааацк
Лаборатория №5
Ссылка:https://attackdefense.pentesteracademy.com/challengedetails?cid=75В этой лаборатории мы должны найти файлы, доступные для записи. Мы - наш пользователь - рассматриваемся как "другие". Поэтому мы должны найти файлы, доступные для записи другими пользователями. После этого мы должны проверить файлы, которыми можно злоупотреблять. Это может быть /etc/shadow, /etc/sudoers, /etc/group и другие. В нашем случае это файл /etc/shadow, этот файл содержит пароли пользователей, поэтому мы можем просто сгенерировать пароль и поместить его туда, поскольку у нас есть разрешение "write". Для этого мы можем использовать команду "openssl". Мы можем добавить опцию "-1" для генерации пароля md5, "-5" для sha256 и "-6" для sha512. После генерации пароля мы можем отредактировать файл /etc/shadow, для этого мы использовали "vim". Теперь пароль пользователя root - "xss"
Bash:
find / -not -type l -perm -o+w 2>/dev/null
openssl passwd -1 -salt xyz xss
vim /etc/shadow
I
CTRL+C
:wq!
Enter
Изображение [20] : Поиск файлов, доступных для записи
Изображение [21] : Редактирование пароля пользователя "root"
Изображение [22] : Хаааааацк
Продолжение в комменте.
Автор grozdniyandy
Источник https://xss.pro/
Последнее редактирование модератором: