Как я сдавал OSCP

xuc1b3o751swqrwezdo2zazw_hy.png

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

С чего всё началось


Мой коллега c4n два года назад сказал, что надо бы сдать OSCP и я согласился, но как это часто бывает с хорошими идеями, мы забили отложили эту хорошую идею.

Спустя год в нашей компании появилась возможность бесплатного обучения полезным вещам для сотрудников (увы, моё понимание полезно не совпадает с руководством и курсы сомелье мне все ещё отказываются оплатить). К славной затее сдать OSCP подтянулся @GolovnyaD, сказал, что наши отговорки про занятость так себе и что надо приступать.

И мы приступили.

Что мы знали о OSCP


Мы знали, что OSCP состоит, по сути, из 3 частей: теоретический материал (дальше я буду называть его пдфка), доступ к лаборатории с виртуальными машинами (дальше буду называть лаба) и экзамен.

Начало пути


Как оказалось, доступ к лабе можно приобрести на 30, 60 или 90 дней стоит это 999$, 1199$, 1349$. Так как мы не хотели посвящать всё свободное время только OSCP, а разница между 30 днями и 90 всего 350$), мы выбрали доступ на 90 дней.

9 октября 2019 года, я оплатил курс, ожидая получить веселье на 3 месяца, как же я ошибался, мне досталось веселье на 5 месяцев. И вот почему:

первая подстава: нельзя начать обучение завтра. В моём случае ближайшая дата для старта была 20 октября (как пишут на форумах среднее время до старта после оплаты — 2 недели).

Тогда же 9 октября прислали тестовый пакет (Connectivity Pack) для подключения к VPN. У меня судя по их тестам не было проблем с VPN-подключением (как оказалось потом тест у них так себе, расскажу дальше). Тогда же прислали ссылку на их сборку Kali (на вид ничем не отличается от обычной), которая специально подготовлена для прохождения.

Старт курса


Формально курс начался у меня в 3:00 ночи 20 октября, но письмо с материалами курса мне пришли в 03:09 (заметил эту нестыковку только сейчас, когда писал статью). В письме с материалами курса содержатся ссылки на:

  • пдфку на 380 страниц
  • видеоматериалы к этой пдфке
  • VPN Connectivity Pack


И тут нас ждёт вторая подстава: ссылки на скачивание действительны 72 часа и если не успели скачать, то попросят дополнительные 100$, после чего они заботливо говорят сделайте бэкап и вставляют шуточку:»Remember the wise saying: «There are two types of people. Those who backup and those who have yet to lose everything to a system crash.»
Также на всех форумах рекомендуют начать прохождения курса с выполнения задач из пдфки. Мы все так и поступили.

Задачи из пдфки


Задачи из пдфки надо сделать чтобы узнать новые тулзы и техники, вспомнить как использовать тулзы и, возможно, получить 5 дополнительных балов на экзамене. Из удивительного: в пдфке нет ни слова про Burp Suite и PowerShell Empire (должны были добавить в обновлении от февраля).

Пдфка ведёт свое повествование с азов: нас учат гуглить, пользоваться nc.exe (netcat), tcpdump и wireshark и прочими тулзами, которые скорее относятся к системной инженерии, а не к безопасности. Только на 113 странице из 380 мы знакомимся с nmap!

Также нас учат пользоваться тулзами типа OpenVAS, которыми нельзя пользоваться на экзамене. Так же примеры часто используют meterpreter, который тоже запрещён (можно использовать только на одной машине). Я в целом так и не понял, чем обусловлен этот запрет на meterpreter как шел, понятно, что повышаться с его помощью можно запретить, но держать реверс шел с несколькими консолями было бы удобно.

Интересно становится со страницы 148, где начинается переполнение буфера, и тут я словил проблему с VPN-соединением. Как оказалось мой интернет — провайдер зарезает размер пакетов, а VPN в лабе строится по UDP и мои пакеты с переполнением буфера просто не пролезали и пропадали. Решение простое — поправить конфиг добавив строки:

tun-mtu 1492
mssfix 1370


Но очень жалко, что такие проверки не делаются организаторами OSCP, т.к. на их форуме многие жалуются. Я потерял на этом часов 5 и очень много нервов (дойдя до решения самостоятельно, потом я нашёл кучу веток на форуме про это).

Для того чтобы писать переполнения буфера и делать всякие эксперименты с windows, нам дают виртуальную машину внутри лабы, это довольно удобно. За весь курс я не поставил ни одной собственной виртуальной машины (один раз порывался поставить Windows XP SP2, но не нашёл рабочий торрент).

В целом задания на переполнения буфера очень хорошо прописаны (как для Windows, так и для Linux), было бы круто, чтобы именно так, по шагам, это преподавали в вузах. Курс OSCP заведомо говорит, что обход DEP и ASLR не входит в курс.

Дальше нам рассказывают, как готовить эксплойты, передавать файлы, рассказывают про повышение привилегий, но с этим ещё наиграемся в лабе, так что ничего страшного.

Дальше идёт блок, посвящённый атакам на пользователей (Client Side Attacks), где я словил проблему со «специально подготовленной» Kali машиной, на ней стояла более новая версия Java и мой Java Appet не работал на тестовой машине. Ещё часов 5 гугления и решение проблемы самостоятельно и, разумеется, на форуме есть тред и про это)

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

Дальше идут атаки на web — XSS, LFI, RFI, SQL-инъекции и другое. Написано понятно и хорошо, дают примеры потыкать. Рассказывают про sqlmap, который тоже нельзя использовать на экзамене, но, разумеется, полезно знать.

Дальше атаки на пароли (брут и получение хэшей для Windows и Linux), по мне очень растянуто, часть заданий я оставил на потом (и сделал их уже внутри лабы). В конце идёт рассказ про метасплойт и как его юзать, весьма подробно, с написанием собственного модуля. Также приводится пример взлома вымышленной компании, в котором используются многие описанные техники (занимает 34 страницы).

В целом из всей пдфки по делу страниц 100 (и там огромное количество скриншотов). На её прочтение и выполнение задач у меня ушло 2 недели (но я никуда не спешил).

Если у вас что-то не получается из курса пдфки, то на всё есть видеоматериалы, где все шаги показаны, это удобно.

Лаба


Решая лабу, было принято решение не использовать Metasploit и Meterpreter, т.к. их нельзя (можно только один раз) использовать на экзамене.

Лаба состоит примерно из 60 виртуальных машин, все машины разбиты на 4 подсети (публичная сеть, сеть девелоперов, сеть айти департамента, сеть администраторов). Изначально доступ есть только в публичную сеть (на самом деле доступ есть во все сети, просто мы не можем ревертить машины из не публичной сети). В лабе (пишу про события до февральского обновления) все машины довольно старые, самая свежая Windows — Windows server 2012R2 (довольно много Windows XP), Linux машины это Ubuntu 14 (в лабе встречались и Ubuntu 8), Centos 7 (встречался и Centos 5).

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

Лаба (не привилегированный шел доступ)


В целом лаба хорошо соответствует тому, что было изложено в пдфке. В плане получения непривилегированного доступа, надо использовать различные техники (включая атаки на клиентов), собирать пароли со сломанных машин и их использовать повторно, запускать бруты и так далее. Наверное, хуже всего раскрыта тема SQL-инъекций и blind-инъекций — они не встречались ни разу.

Алгоритм получения доступа инициализирующего шела везде как в жизни:

  1. енумерация (Enumeration) портов и сервисов
  2. брут директорий для веба
  3. определение продуктов и версий
  4. поиск и модификация эксплойта


Пара машин требует написание собственных эксплойтов blackbox-ом, но ничего сложного — LFI/RFI. Больше всего меня радовало, что почти отсутствуют машины из разряда CTF, где есть картинка, внутри которой спрятана ещё картинка, внутри которой спрятан zip-архив и так далее.

Лаба (повышение привилегий)


Для меня это была самая интересная часть и она отнимала у меня большую часть времени (по началу).

Windows


Для windows машин я пользовался вот этим наборам сплойтов

Но на некоторых Windows машинах специально пропатчены все уязвимости «ядра» и приходилось придумывать, как подняться. Тут есть машины на любой вкус, сервисы, автозагрузки, шедулед таски, установленное ПО. Установленное ПО — это конечно большой провал, т.к. очевидно, что тачки подготовлены и если на системе установлено всего одно приложение, то через него можно подняться.

Linux


Для Linux тут, конечно, можно всегда использовать уязвимости ядра, любимый всеми dirty cow работает на половине машин, я использовал вот эту версию, оно хоть и зависает почти на всех машинах в лабе, но пользователя с доступом по ssh успешно создаёт.

Но почти везде можно подняться через уязвимости в конфигурации, тут помогает LinEnum, а для ленивых linux-smart-enumeration

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

Постэксплотация в лабе


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

Многие машины ломаются по цепочке, это важно понимать, особенно для атак на клиентов, если тачка называется mail, то возможно к ней кто-то будет цепляться почтовым клиентом), а если HELPDESK, то заходить на открытые тикеты.

Большая четвёрка


В лабе есть 4 машины, которые считаются самыми сложными и некоторые рекомендуют оставить их на конец, это: Pain, Sufferance, Gh0st and Humble. Я знал про их наличие с самого начала, но специально от них не сбегал или их не искал. К моменту, когда я решил вернуться к ним две из четырёх мной уже было сломано.

Моё впечатление от них:

  • Pain — крутая тачка, сложная как и в получении инициализирующего шела, так и в повышении.
  • Sufferance — сложный инициализирующий шел, в несколько этапов, что-то похожее мне досталось на экзамене. Простое повышение.
  • Gh0st — начало и инициализирующий шел как на CTF машинах, но одно из самых красивых повышений во всей лабе.
  • Humble — возможно самый сложный инициализирующий шел в лабе, но простое повышение.


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

В мой топ ещё бы вошли:

  • Sherlock — пруф получается за пару минут, а над получением реверса можно долго посидеть.
  • beta — очень жизненная машина как и в получении первичного доступа, так и повышения (ограниченный bash).


Итоги лабы


В целом лаба произвела хорошее впечатление, я сломал все машины, за которые брался (около 45 машин).

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

Подготовка к экзамену


За несколько дней до окончания доступа к лабе, я решил, что пора записаться на экзамен. Тут я был не прав, лучше это сделать заранее. Ближайшая дата в выходной день была только через месяц на 23 февраля (и то на 9 утра).

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

Так же я начал писать отчёт по лабе (надо описать 10 машин, если хотите получить 5 дополнительных балов), стандартный пример отчёта слишком заумен, поэтому я стал использовать вот этот. Для подробного описания я выбирал или интересные машины или случаи, где сразу получаешь рута.

Мне понадобилось сделать 10–15 дополнительных скриншотов, поэтому я рекомендую иметь доступ к лабе во время написания этого отчёта.

Подготовка к экзамену. Тренировка. Бинарщина


В экзамене одна из составных частей — это написание эксплойта на переполнение буфера, она даёт 25 балов, и, не умея это делать быстро и хорошо, идти на экзамен особо не имеет смысла, стоит набить руку.

Добрые люди уже собрали набор ПО, на которых можно потренироваться.

Я решил штук 7, и если на первую я потратил 2 часа времени, то седьмую я решил за 20 минут, по сути, со скоростью написания кода и ввода команд. Алгоритм, который меня не подводил:

  1. фазим на падение буквами A (на экзамене этот шаг уже будет сделан за нас)
  2. ищем офсет, стандартно через pattern_create.rb и pattern_offset.rb
  3. проверяем длину, стандартно меняем A на B в нужном месте, а после B вставляем много C, чтобы посмотреть возможный размер полезной нагрузки без прыжков внутрь наш0его буфера
  4. проверяем плохие символы (я сразу отрезаю \x00, так как он будет плохим в 99% случаев)
  5. ищем «jmp esp» (самый сложный шаг, и техники могут быть разными)
  6. проверяем валидность найденного адреса, через брекпоинт в отладчике
  7. генерим пейлоад с реверс шелом (в начало добавляем 20 нопов — \x90)
  8. профит


Подготовка к экзамену. Тренировка. Сервисы


В одном из врайтапов по процедуре экзамена я нашёл вот такую картинку:

ynbypdxr9-sk8bgkqybmghrs26i.png

На этой картинке показаны какие машины на hackthebox.eu похоже на тачки с экзамена (тачка brainfuck вообще не похожа, на ней рекомендую не тренить). Для активации тачек требуется платная подписка (10 баксов за месяц, сразу не забудьте её отменить).

Я потратил 8 часов и решил 10 машин, чередуя Windows и Linux. И решил, что с меня хватит, но, наверное, тут, как и с переполнением буфера надо доводить до автоматизма. Эти машины проще чем машины на экзамене, по крайне мере в плане повышения привилегий (некоторые копии машин из лабы, не знаю, кто у кого позаимствовал).

Подготовка к экзамену. Тренировка. Повышение привилегий


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

Подготовка к экзамену. Организационная часть


Для сдачи экзамена потребуется:

  1. заграничный паспорт (ваше имя и фамилия должны быть написаны на английском)
  2. веб-камера
  3. стабильный интернет


Хорошо иметь дополнительно:

  1. запасной интернет (я использовал мобильный)
  2. запасной компьютер (у меня рядом лежал запасной ноут полностью настроенный на сдачу экзамена)
  3. снепшот ВМ с Kali
  4. копия ВМ с Kali (я положил одну копию на жесткий диск, вторую — на внешний жесткий диск)


Экзамен!


Экзамен считается очным (Proctored Exam) поэтому он начинается за 15 минут до выбранного времени. Вы подключаетесь к специальной веб-платформе, шарите свои экраны, в текстовом чате вам начинают задавать задачи и вопросы:

  1. показать паспорт по веб-камере
  2. показать, что в комнате никого нет
  3. выдать результаты тестового скрипта для подключения


Тут у меня случился фейл и при попытке скопировать новый конекшен пак на виртуалку с Kali, она упала. Я был готов к этому, откатил виртуалку, скопировал пак, запустил и начал ждать 9 утра.

Доступ я получил в 9:01.

У меня был простой план действий:

  1. запустить инумерацию сервисов
  2. сделать тачку на переполнение буфера за 1 час
  3. сделать тачку на 10 баллов за 1 час
  4. сделать первую тачку на 20 баллов за 2 часа
  5. сделать вторую тачку на 20 баллов за 2 часа
  6. сделать тачку на 25 баллов за 3 часа


Как видно по моему плану мне требовалось 9 часов на прохождения экзамена, но всё пошло не по плану с самого начала :) я забыл учесть важный тормозящий фактор — записывать по шагам всё что сделано со всеми скриншотами для отчета.

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

  1. переполнение буфера — 2.5 часа. Час потерял, т.к. не заметил пару плохих символов, ещё 30 минут на отчёты
  2. тачка за 10 — 30 минут: 10 минут взлом, 20 минут скрины
  3. первая тачка за 20 — 2.5 часа: 1.5 часа взлом, 40 минут скрины и отчёт, 20 минут перерыв
  4. вторая тачка за 20 — 2 часа: 1.5 часа взлом, 30 минут скрины и отчёт.
  5. тачка за 25 — 3.5 часа: 3 часа взлом (с двумя перерывами), 30 минут скрины и отчёт


В целом экзамен куда интереснее лабы, уязвимости все достаточно свежие — 2018–2019 год. Повышения везде не через уязвимости ядра.

Дольше всего я сидел, ожидая повышения привилегий, все непривилегированные шелы были получены за 10–30 минут.

В экзамене сделано множество ложных путей, которые не приведут к успеху. Если для инициализирующего шела всё легко отбрасывается (например, эксплойт для переполнения буфера на Winodws XP SP2, хотя сам сервис запущен на Windows 10), то в повышении я пару раз погряз в этих ложных путях. Тут главное вовремя сказать себе, что этот вектор стоит изменить и выбрать новый.

Спустя 11 часов я закончил экзамен, сломав всё и отправился выпить пару пинт пива (всего пару, так как на следующий день надо ещё написать формальный красивый отчёт).

Написание и отправка отчёта


Взял шаблон с того же репозитория где и шаблон по лабам и заполнил его часа за 4.

Дальше началось веселье с тем куда это отправлять и как. Сначала это надо зашифровать, используя 7z с паролем, пароль не случайный, а ваш айдишник в системе (5 цифр, брутится за 0.3 секунды на CPU). Дальше я долго искал информацию куда вкладывать отчёт по лабе в тот же архив или в другой (Ответ: надо вкладывать в тот же архив). Дальше я напоролся на то, что формат задания пароля в архиве 7z, флаг -p, после которого пароль надо писать слитно, т.е. примерно так -pPassword. На самом деле все шаги описаны в гайде, просто их надо уметь искать.

Полученный архив надо загрузить на сайт, получить ссылку и эту ссылку отправить на специальную почту! Зачем такие сложности в 2020 году, для меня загадка.

Спустя пару часов, вы получите ответное письмо, что: «Мы получили вашу ссылку, но не проверили, что там нормальный архив, что он расшифровывается и что в нём нужные данные. И о том, что результаты экзамена мы сообщим в течении 10 рабочих дней».

Итог


Спустя ровно неделю после экзамена, в воскресенье 1 марта я получил радостное письмо, что я составил архив правильно:

1sks2t-sibr4csu0vrrgb-ygnry.png

После этого я заполнил данные для отправки мне физического сертификата и карточки OSCP-сертификации.

Кому нужна это сертификация


У меня получился вот такой список (отсортированный по осмысленности получения и требования этого сертификата):

  1. студенты 4–5 курса. Для них это прям очень крутая практика.
  2. тем, кто решил перейти в безопасность из смежных отраслей. Все описывается на хорошем уровне, куча примеров, есть чему научиться.
  3. работодатель. Сертификат показывает, что человек что-то знает и что-то умеет делать руками (в наших вакансиях мы указываем это как плюс).
  4. людям в отрасли, которым хочется освежить/протестировать свои знания
  5. опытные пентестеры. Возможно, красивая корочка позволит им стать более интересными для работодателей.


Дальше в планах сдать OSWE (Offensive Security Web Expert). Как по мне, он интереснее, чем OSCE (Offensive Security Certified Expert). А для тех, кому интересно почитать про различные виды сертификации в области ИБ, мы написали отдельную статью.

© Habrahabr.ru