Три месяца назад сдал экзамен OSCP, а теперь получив бумажную копию могу раздавать советы как заправский пентестер. Какие инструменты использовать, как организовывать хранение файлов и как не выгореть в процессе обучения. Если же хорошо подумать, то таких статей десятки, а потому лучше расскажу о такой неочевидной теме как заполнение отчета.

Экзаменационный отчет OSCP

Экзамен занимает полные 48 часов, из которых первые 24 дается на взлом 5 серверов, а вторые 24 часа — на написание отчета о том, как был получен доступ к каждому из них. И если с первой частью еще понятно, то что же делать вторые 24 часа надо еще разобраться. Советов по курсу в интернете полно, а вот о том как же этот самый отчет написать никто не пишет.

TL;DR Экзаменационный отчет — это некая симуляция настоящего отчета, который специалист по ИБ отправляет в компанию, по завершению тестирования на проникновение. В случае с OSCP заказчик — это Offensive Security, а система которую тестируют — экзаменационные хосты.

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

Так и поступим взяв вместо скучного стандартного, тот который можно заполнять в Markdown — Offensive Security Exam Report Template. Заполнять его намного проще, он сам позаботится о форматировании и все сделает автоматически (ну или почти все).

Строго говоря, это не один шаблон а набор шаблонов для семейства экзаменов: OSCP, OSWE, OSCE, OSEE и OSWP. И чтобы приготовить его для OSCP нужно клонировать к себе репозиторий и удалить из него все содержимое output, а в src оставить один файл OSCP-exam-report-template_whoisflynn_v3.2.md.

После этого директория src становится местом в которое будем складывать скриншоты, а OSCP-exam-report-template_whoisflynn_v3.2.md заготовкой для отчета. Чтобы получить PDF надо поставить Pandoc и Eisvogel Pandoc LaTeX PDF Template, но об этом итак написано в README, там вообще много полезного написано.

$ pandoc src/OSCP-exam-report-template_whoisflynn_v3.2.md \
    -o output/OSCP-OS-XXX-Exam-Report.pdf \
    --from markdown+yaml_metadata_block+raw_html \
    --template eisvogel \
    --table-of-contents \
    --toc-depth 6 \
    --number-sections \
    --top-level-division=chapter \
    --highlight-style breezedark \
    --resource-path src

В результате запуска в output должен появиться файл OSCP-OS-XXX-Exam-Report.pdf, где OS-XXX это личный номер студента. Только после таких приседаний стоит идти на экзамен. Времени будет не много, а тратить минуты или даже часы на попытки поставить Pandoc и Eisvogel это не лучшая идея.

Шаблон есть, что дальше?

Открываем его и в самом начале, где идет YAML metadata block, заменяем имя автора и OSID. Этот блок используется для титульного листа.

  • Разделы Introduction, Objective и Requirements так и оставляем без изменений.
  • В разделе High-Level Summary обновляем IP адреса экзаменационных машин и название уязвимостей, через которые был получен доступ. Например LFI или SQL Injection.
  • Далее идут Recommendations и Methodologies их также не трогаем, а в Information Gathering вставляем список IP адресов но уже без указания типов атак.
  • В начале раздела Penetration проставляем два числа, сколько машин было взломано и сколько их было всего.

Теперь начинается мясо. Заполнение четырех однотипных разделов посвященных экзаменационным хостам. Buffer overflow описывается отдельно но об этом еще расскажу. Каждый такой раздел состоит из нескольких подразделов.

  • Service Enumeration посвящен сбору информации. Какие инструменты были использованы для первичного сбора информации о хосте и какие результаты они принесли. Алгоритм заполнения такой: команда для запуска, затем скриншот вывода.
  • Далее вставляем скриншоты и краткие пояснения о том как получить непривилегированный доступ в систему. Для SQL инъекций стоит написать куда и какой payload вставить. Для RFI какую ссылку сформировать и т.д все это надо подтверждать скриншотами, что это работает.
  • Еще бывает так, что можно найти публичный эксплойт, тогда добавляем раздел Exploit Code содержащий ссылку на него.
  • Vulnerability Explanation — один из немногих разделов где надо много писать, а не ограничиваться скриншотами. В этом разделе описывается какой тип атаки был использован. Выдумывать не нужно, берем описание из OWASP и готово.
  • Vulnerability Fix — это продолжение прошлого раздела, в нем пишем как эту уязвимость устранить. Например обновить программное обеспечение или разогнать бездельников которые пишут такой код.
  • В Severity указываем насколько уязвимость опасна. Как правило это Critical.
  • Local.txt Proof Screenshot — доказательство получения доступа. Тут важно не ошибиться и приложить скриншот на котором видно: имя пользователя, IP адрес хоста и полный путь до файла local.txt c содержимым:
    $ id
    $ ip a
    $ cat /полный/путь/до/local.txt
    
  • Privilege Escalation — этот раздел аналогичен разделу Service Enumeration, с той лишь разницей, что в итоге будут получены права администратора и содержимое файла proof.txt.
  • За ним идут все подразделы аналогичные тем, что были необходимы для получения непривилегированного доступа.
  • Если Privilege Escalation не требуется этот раздел исключается.

Можно выдохнуть, это было самое сложное. После завершения этих секций, заполняем хост с Buffer overflow. Он тоже есть в шаблоне и идет в самом конце. Там все много проще.

  • Vulnerability Exploited: bof — наполняем заметками о том, как был написан эксплойт. Скриншотов из отладчика и вырезок из Proof of concept, с кратким описанием того, как от одного шага перейти к следующему, будет достаточно.
  • Завершающим этапом прикрепляем скриншоты с запуском готового эксплойта и последующим чтением файла proof.txt.
  • Completed Buffer Overflow Code, тут ничего не трогаем, там написано что полное содержимое готового эксплойта будет в приложении. Именно туда его и поместим.

Мы на финишной прямой. После описания хоста с Buffer overflow идут разделы Maintaining Access и House Cleaning, которые можно оставить как есть. А вот заполнить нужно только два или три приложения идущие следом, в секции Additional Items.

  • Appendix - Proof and Local Contents — в таблицу вставляем IP адреса экзаменационных машин и содержимое файлов local.txt и proof.txt
  • Appendix - Metasploit/Meterpreter Usage — заполняем только если в процессе экзамена пришлось воспользоваться Metasploit или Meterpreter, тогда указываем какой именно хост был взломан с их помощью.
  • Appendix - Completed Buffer Overflow Code — то самое место куда вставляют полный исходный код готового эксплойта на переполнение буфера.

Последний этап

Проверяем, что готовый PDF выглядит хорошо. Если выглядит не очень, то можно сделать две вещи. Во-первых, добавить разделители страниц. Делается это добавлением команды \newpage на той строке .md файла, где нужно сделать разрыв на новую страницу.

Во-вторых, скриншоты могут быть светлыми, а фон у отчета белый и в итоге все сливается. Делаем красивые рамочки у скриншотов однострочником на imagemagick.

$ for name in $(ls *.png); do convert $name -shave 2x2 -bordercolor black -border 2 $name; done

Осталось упаковать в 7z без пароля. Когда-то пароль был нужен, теперь нет.

$ cd output
$ 7z a OSCP-OS-00000-Exam-Report.7z OSCP-OS-00000-Exam-Report.pdf

Вуаля! Отправляем архив на проверку и спать.

О чем еще не написано в правилах?

Правила экзамена написаны таким образом, что сложно понять ограничения. А потому вопрос который возникает у тех кто сдает курс OSCP — какие инструменты, кроме Kali, разрешены и могут понадобится на этом курсе. И такой список есть, а называется он Unofficial OSCP Approved Tools и похоже, что это лучший список из тех, что можно найти. Ссылку на шаблон для отчета я взял как раз из него.

Вместо заключения

В лаборатории 66 машин, а на экзамене 5 и для каждой из них нужно хранить заметки, эксплойты, логи, скриншоты и тд. Подходов к организации хранения этой груды файлов много, кто-то использует структуру которую создает AutoRecon, кто-то не заморачивается и скидывает все в одну директорию.

Мне понравился подход который я подсмотрел у burmat в его oscp-pwk-random-tips-and-tricks, там же можно подсмотреть другие лайфхаки. Это такое оправдание того, что я не стал писать собственный пост на эту тему. На этом заканчиваю и как говорится, try harder.