Три месяца назад сдал экзамен 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.