Как я сдавал OSCP



    Мы с коллегами прошли курс 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, чтобы посмотреть возможный размер полезной нагрузки без прыжков внутрь нашего буфера
    4. проверяем плохие символы (я сразу отрезаю \x00, так как он будет плохим в 99% случаев)
    5. ищем “jmp esp” (самый сложный шаг, и техники могут быть разными)
    6. проверяем валидность найденного адреса, через брекпоинт в отладчике
    7. генерим пейлоад с реверс шелом (в начало добавляем 20 нопов — \x90)
    8. профит

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


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



    На этой картинке показаны какие машины на 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 минут.

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

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

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


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

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

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

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

    Итог


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



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

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


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

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

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

    Похожие публикации

    Комментарии 5

      0
      Дальше в планах сдать OSWE (Offensive Security Web Exper). Как по мне, он интереснее, чем OSCE (Offensive Security Certified Expert)

      Нет, вообще ни разу. Можно оценить по pdf, которая ищется в интернете.
        0
        На вкус и цвет…
        OSCE — уходит в бинарщину, я не самый большой фанат этого. OSWE — различный взлом Веба, что мне ближе. Пдфку по OSWE за 5 минут не нашёл, точно ищется?))
        0
        Вот вроде интересный курс и экзамен, но стоимость отпугивает, а в экзамене пугает необходимость писать отчеты…
          0

          При работе по направлению этого сертификата отчёты тоже придётся писать.
          Рекомедную не воспринимать как обузу или не заморачиваться с сертификатом.

          0
          И тут нас ждёт вторая подстава: ссылки на скачивание действительны 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.»

          Я не успел скачать. Оформил курсы до чтения этой статьи, прочитал этот момент и подумал :" Мгмгм, забавно лол. Хорошо, что мне еще этот пак не пришел.". Затем полез в почту и оказалось, что он пришел мне неделю назад и ссылки на скачивание уже просрочились. Написал им в поддержку и они прислали новую ссылку


          А так, большое спасибо за статью! Пополнил свои заметки. Скоро начинаю проходить курс. Уверен, что они будут полезны :)

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

          Самое читаемое