Use this Markdown template to turn a Kioptrix lab session into a report that connects each finding to evidence. Copy the template into report.md, replace the placeholders, and keep screenshots and raw output in an evidence/ folder beside it.
The workflow below explains screenshot capture with Flameshot and PDF export with Pandoc. This is a practice-report framework; it is not an official OffSec submission template or a guarantee that an exam report meets current requirements.
Copy the lab report template
# Kioptrix lab report
Date: [YYYY-MM-DD]
Author: [Name]
Target: [VM name and private lab IP]
Scope: [Authorized machine and allowed activities]
Environment: [Hypervisor, isolated network, testing VM]
## Summary
[What was tested, what was confirmed, and the main limitation.]
## Finding 01 โ [Specific title]
Status: [Confirmed / suspected / not reproduced]
Affected service: [Host, port, protocol, observed version]
Observation: [What the target actually returned]
Evidence: [Command/output filename, screenshot, timestamp]
Reproduction: [Numbered steps another authorized tester can repeat]
Expected result: [What would confirm the hypothesis]
Actual result: [What happened, including failures]
Impact: [What the evidence demonstrates; mark unknowns]
Remediation: [A change that addresses the cause]
Retest: [Not performed / date, method and result]
## Limitations and next steps
[Untested services, missing access, unanswered questions.]
## Evidence index
- evidence/01-observation.png โ [What it demonstrates]
- evidence/01-output.txt โ [Tool/version, target and collection time]
Check the report before exporting
- Separate observations from assumptions. An open port or a version banner is evidence to investigate, not proof of impact.
- Keep raw output alongside annotated screenshots. Label the target and collection time so the evidence can be traced.
- Check every image path after moving the folder. Open the exported PDF and inspect tables, screenshots, page breaks, and readable text.
- Label untested remediation as a recommendation. Do not describe a retest as successful unless you actually performed it.
For related structure and examples, read the OSCP-style report guide and Kioptrix pentest report guide. If you have not built a lab yet, start with the beginner roadmap.
Table of Contents
Evidence-first workflow in 90 seconds (the โreport muscle memoryโ loop)
Capture โ label โ drop into /evidence/ (no desktop clutter)
The fastest reporting pipeline is the one you can do while half-asleep. Your goal is not โperfect notes.โ Your goal is zero-friction evidence capture that lands in the right place automatically. If youโve been experimenting with different approaches, it helps to compare this flow against a dedicated note-taking system for pentesting so your capture habits stay consistent across labs and client-style practice.
Hereโs the loop youโre building:
- Capture with Flameshot (always saved into one known folder)
- Label quickly (a short filename that tells the truth)
- Link it immediately into the finding youโre writing
- Build the PDF with one command when youโre done
When I started doing this, my โevidenceโ was scattered across Downloads, Desktop, and a random folder called screens. I lost at least one clean exploit chain because I couldnโt find the screenshot that proved the claim. Never again. (If your lab workflow is VM-heavy, it also helps to keep your environment stableโthings like VirtualBox networking modes (NAT vs Host-Only vs Bridged) can quietly change what โproofโ looks like in screenshots and logs.)
Letโs be honestโฆ most โreporting problemsโ are folder problems
People blame writing. They blame Pandoc. They blame โnot being good at reports.โ But most report pain is a boring, unsexy issue: your artifacts have no home. No home means no paths. No paths means broken images. Broken images mean you donโt trust your own PDF. And if you donโt trust it, youโll keep re-checking it, wasting time you donโt have.
One rule that prevents 80% of missing-evidence chaos
Rule: If it isnโt in /evidence/, it doesnโt exist.
That sounds harsh. Itโs also how you stop bleeding time. Every screenshot, exported Burp request, nmap output snippetโanything you plan to referenceโgoes into the evidence directory (or a finding subfolder inside it). Your report should be buildable from that tree alone. No โoh itโs on my desktop, hold on.โ This becomes even more important once youโre collecting fast enumeration artifacts; a tight loop like a fast enumeration routine for any VM can generate a lot of output quickly, and your evidence folder is where sanity lives.
- One evidence root folder
- One naming convention
- One report entry file
Apply in 60 seconds: Make a folder named evidence and promise yourself you wonโt save screenshots anywhere else.

Who this is for / not for (save yourself a bad setup)
For: OSCP-style labs, CTF-to-client writing practice, small consulting gigs
This pipeline shines when youโre doing practical exploitation and need to turn it into a narrative that a client (or examiner) can follow. Itโs ideal for:
- OSCP-style exam practice reports and lab write-ups
- Solo consultants who want a consistent report โlookโ without Word drama
- Internal security teams doing quick, repeatable engagement summaries
Also: if youโre the person who says โIโll write the report laterโ and then later turns into a gremlin at midnightโthis is for you. I have been that gremlin. If youโre building a sustainable cadence, pairing this reporting kit with a realistic schedule like a 2-hour-a-day OSCP routine keeps โevidence captureโ from becoming a once-a-week panic.
Not for: teams needing full GRC platforms, complex review workflows, heavy redaction tooling
If your org requires multi-author workflows, approval chains, tracked changes, or automated compliance mappings, you might outgrow this setup. This is a lean pipelineโnot a full reporting platform.
That said, even larger teams often keep a Markdown-to-PDF pipeline for rapid internal deliverables while the โbig reportโ flows elsewhere.
If you only do this once a year, do this simpler version instead
If you rarely write reports, donโt build a cathedral. Use:
- One
report.md - One
evidence/folder - One
pandoccommand you copy/paste
Repeatability is still the win. You just donโt need extra moving parts. If youโre still setting up your lab environment, start from a safe baselineโsomething like a safe hacking lab at home gives you guardrails so your โreport practiceโ stays legal and controlled.
- Yes: you produce PDFs more than once a month
- Yes: youโve lost time fixing broken image links
- Yes: you want a report you can rebuild on a new machine
Apply in 60 seconds: If you answered โyesโ to two items, commit to the folder structure in the next section.
Flameshot that doesnโt betray you later (settings that matter in court-of-client)
Fixed save directory, consistent format, and timestamp naming
Flameshot is popular because itโs quick: capture, annotate, save. But โquickโ can turn into messy unless you lock three things:
- Save directory: your reportโs
evidence/folder - Format: PNG for clarity (especially for terminal text)
- Naming: timestamp + short label (so duplicates donโt overwrite)
In practice, this means every screenshot is immediately usable in a report without hunting for it. The difference is subtle until the day it saves you 45 minutes. If your reporting workstation is a non-standard Kali setup (ARM64, Pi, etc.), youโll also appreciate having a โknown-goodโ capture flowโespecially when your browser tooling behaves oddly (see Burp browser not available on Kali ARM64 for the kind of friction that can derail evidence capture mid-session).
Annotation style that scans well in PDFs (arrows, boxes, blur)
Annotations should be readable at โPDF zoom level 100%.โ My personal rule: if the arrow is thinner than a coffee stirrer, itโs too thin. Use:
- Rectangles to frame the proof (the exact command output line)
- Arrows sparingly (one arrow per screenshot is usually enough)
- Opaque filled rectangles or proper redaction for secrets (API keys, session tokens, client names)
One of my early mistakes: Iโd annotate everything like a detective board. It looked dramatic. It also looked unprofessional and made the readerโs eyes bounce.
Hotkeys that reduce friction (so you actually capture evidence)
Hotkeys matter because evidence capture is easy to โskipโ when youโre in the flow. If your hotkey is awkward, youโll tell yourself โIโll screenshot later.โ Later is a lie.
Set one keybind you can hit without thinking. Then practice once: exploit โ screenshot โ filename โ back to work. Your hands will learn it. (If youโre tuning your shell for speed, a solid Zsh setup for pentesters complements this workflow nicelyโfewer keystrokes, fewer mistakes, more consistent logs.)
Hereโs what no one tells youโฆ โpretty screenshotsโ can make findings harder to trust
A screenshot is not a poster. Itโs proof. Over-stylized screenshotsโhuge highlights, too much blur, heavy zoomโcan accidentally reduce credibility. The reader starts wondering: what am I not seeing?
Aim for โclinical.โ Clear proof. Minimal decoration. If it feels boring, youโre doing it right.
Show me the nerdy details
PNG preserves sharp terminal text better than JPEG. If your screenshots look โsmudgyโ in PDF, itโs often compression or scaling. Keep screenshots reasonably sized, and avoid repeatedly re-saving images through lossy tools. When you do need to shrink images, do it once in a controlled way and keep the original.

The evidence folder architecture that makes Pandoc painless
A minimal structure that scales: /report/, /evidence/, /src/, /out/
Your future self wants one thing: predictable paths. Hereโs a structure that works for labs and real engagements:
reporting-kit/
report.md
finding.md
evidence/
F-01/
F-02/
src/
metadata.yaml
out/
report.pdf
You can keep it simpler if you want. The essential idea is that report.md is the entrypoint and evidence/ is where proof lives. The rest is support.
If youโre still deciding where your lab lives (VirtualBox vs VMware vs Proxmox), pick one and standardizeโthis overview of
VirtualBox vs VMware vs Proxmox
can help you make that call without second-guessing every week.
Naming convention for screenshots (so you can find them under pressure)
Hereโs a naming convention that behaves well in PDFs and file listings:
YYYY-MM-DD_HHMM_F-01_proof.pngYYYY-MM-DD_HHMM_F-01_repro-step2.pngYYYY-MM-DD_HHMM_F-02_before-fix.png
Notice whatโs missing: vague names. If a screenshot name canโt tell the truth in 2 seconds, itโs not helping you.
Curiosity gap: why โIMG_1234.pngโ quietly destroys credibility
Clients rarely see your file tree. But you do. And when you canโt find the right proof quickly, you start taking shortcuts: โclose enough screenshot,โ โIโll skip the terminal output,โ โthis is obvious.โ Thatโs when reports become fragile.
Good naming is invisible discipline. Itโs the quiet kind of professionalism that prevents mistakes before they exist.
Optional: split by finding IDs (F-01, F-02) for instant traceability
Splitting evidence by finding ID is one of those small moves that pays off fast. If a reviewer asks โwhereโs the proof for F-03?โ you donโt searchโyou open a folder.
It also makes it easier to redact: you can review sensitive artifacts by finding folder rather than scanning an entire directory. If youโre practicing on intentionally vulnerable targets, itโs helpful to keep the same discipline across machinesโthis vulnerable machine difficulty map is a good way to plan progression while keeping your evidence tree consistent.
Markdown notes that read like a professional report (not a lab journal)
The โfinding cardโ template: Title โ Impact โ Evidence โ Repro โ Fix โ References
Markdown is a superpower because it forces clarity. The structure below turns chaos into a readable finding every time:
## F-01: [Short, specific title]
**Severity:** [Low/Medium/High]
**Affected:** [system/app/component]
### Impact (plain English)
What could a real attacker do, and why does it matter?
### Evidence (what you can prove)
- Screenshot: evidence/F-01/...
- Command output: show the exact line that supports the claim
### Reproduction (step-by-step)
1) ...
2) ...
3) ...
### Remediation (what to do next)
- Immediate mitigation
- Longer-term fix
### References (optional)
Vendor docs, standards, or internal ticket numbers
I used to write findings like diary entries: โthen I tried this, then I tried thatโฆโ It felt authentic. It also made reviewers tired. The finding card makes the readerโs job easy.
How to write repro steps that survive copy/paste (and donโt gaslight the reader)
Repro steps should behave like a recipe. If the reader follows them, they get the same result. That means:
- Include prerequisites (VPN on, user role, host/IP, port)
- Use exact commands (not โrun nmapโ)
- Show expected output (one line is enough)
One honest trick: write the steps as if youโre handing them to your most literal friend. If thereโs ambiguity, they will find it. If you want your enumeration steps to stay sharp (and not โgeneric nmapโ), keep a cheat sheet of easy-to-miss Nmap flags so your evidence includes the one line that actually proves the point.
Severity phrasing that doesnโt start arguments (US client tone)
In US client-facing writing, the easiest way to trigger pushback is to sound absolute when youโre actually describing risk. Use language that is firm but fair:
- Prefer: โThis could allowโฆโ over โThis allowsโฆโ when assumptions exist
- Prefer: โIf an attacker has access toโฆโ when access is required
- State constraints clearly (internal-only, authenticated, rate-limited)
Itโs not about being timid. Itโs about being accurateโaccuracy builds trust, and trust makes remediation happen.
Micro-format tricks: callouts, code fences, and short paragraphs for passage ranking
Write so each section stands alone. That means tight paragraphs and scannable elements:
- Keep paragraphs to 1โ3 sentences
- Use bullets for lists of conditions and artifacts
- Use code fences for commands, never inline command soup
When I switched to โsmall paragraphs,โ my reports got read fasterโby humans. Thatโs the only metric that matters. If you want to go deeper on Pandoc capabilities (without guessing flags), keep the official manual handy: Pandoc Manual.
Repeatable templates that donโt feel robotic (open loops without fluff)
A single report.md entrypoint with includes (or copy blocks)
Keep one file that represents โthe report.โ Even if you break findings into separate files later, the build should start at report.md.
This single entrypoint becomes your muscle memory.
I like to keep a copy-ready โfinding cardโ in finding.md and paste it for each finding. Fancy include systems are optional. Consistency is not.
The โexecutive summaryโ pattern that actually gets read
Make the top of your report feel like a dashboard:
- What was tested (scope)
- What matters (top risks)
- What to do next (short action list)
When I started doing this, the tone of review calls changed. Less โwhat does this mean?โ and more โhow fast can we fix it?โ Thatโs a win. If youโre practicing toward OSCP, pairing a crisp exec summary with a reference list of OSCP exam commands keeps your report steps reproducible and audit-friendly.
Open loop: how to hint at risk without overclaiming (trust-building phrasing)
Hereโs the secret: you can be compelling without being dramatic. Create forward pull by naming the risk path, not by inflating severity.
Example: โIf an attacker can reuse a session token, they can impersonate a user.โ Thatโs an open loopโthe reader wants to know can they?โand youโll answer it with evidence. (And if your evidence depends on proxy tooling, donโt let DNS betray your storyโsee a Proxychains DNS leak fix so your traffic proof and your narrative stay aligned.)
A โproof chainโ checklist: claim โ screenshot โ command output โ timestamp
Every finding should have a proof chain that looks like this:
- Claim: what the vulnerability is
- Proof: screenshot that shows it
- Support: the command output line that anchors the screenshot
- Context: timestamp and scope context (where/when observed)
This is what makes a report feel โexpensive.โ Not the template. Not the font. The proof chain.
- Pandoc PDF: best for repeatable builds and clean versioning
- Word/Docs: best for multi-review and tracked changes
- Hybrid: write in Markdown, export to DOCX when stakeholders demand it
Apply in 60 seconds: Choose one โdefaultโ output format for the next 30 days and build around it.
Pandoc PDF output that looks expensive (without LaTeX pain)
Choose your base: eisvogel, pandoc-latex-template, or default
Pandoc is an open-source document converter that can turn Markdown into PDF (and much more). The manual is thoroughโand honestly, a little intimidating. Thatโs why your first goal is not perfection; itโs a stable build.
You can start with Pandocโs defaults and still produce a readable PDF. If you want a more โreport-ishโ look, templates like eisvogel are popular.
Use them if they reduce formatting work, not if they create a new hobby.
(If youโve ever had to debug โwhy does my lab environment feel different today,โ youโll recognize the same principle from platform setupโe.g.,
a WSL2 + Kali + VMware hybrid setup
works great when you keep the moving parts minimal and predictable.)
Embed screenshots reliably (paths, relative links, image sizing)
The most common failure mode: images show up in Markdown preview, then vanish in PDF. The fix is usually boring:
- Use relative paths from
report.md - Donโt move the evidence folder after linking
- Keep filenames simple (letters, numbers, hyphens)
Example Markdown image:

Table formatting that wonโt explode in PDF
Tables are where many PDFs go to die. Keep them narrow. If you must use a table, prefer simple two-column layouts. For longer content, use lists instead of tables.
I learned this after watching a table wrap into a chaos accordion that made the report look like it was falling down stairs.
Fonts, margins, and heading styles that skim on mobile preview
Even when a report is โa PDF,โ itโs often first read on a laptop screen or a phone. That means your PDF needs:
- Headings with enough contrast and spacing
- Body text that isnโt tiny
- Short paragraphs and frequent visual breaks
Remember: skimmability is not laziness. Itโs respect.
Curiosity gap: the one Pandoc flag that stops โwhy is this page blank?โ
If you ever generate a PDF and see weird blank pages, donโt panic and rewrite the report. It can be template/page-break behavior. Before you spiral, simplify: build with fewer options, confirm baseline output, then add styling back step-by-step.
Open loop answer: the fix is usually not โmore formatting,โ itโs lessโuntil your pipeline is stable.
/evidence/.report.md into a client-ready PDF.Show me the nerdy details
If you want to go deeper later: Pandocโs PDF route often uses a LaTeX engine under the hood, which is why โtemplatesโ can affect page breaks and spacing. Start with the simplest command that builds reliably. Then add one improvement at a timeโtemplate, metadata, marginsโso you can identify what changes output behavior.
One-command builds (Makefile + script) so you never โhand-formatโ again
make pdf pipeline: clean โ build โ output โ checksum
The emotional benefit of make pdf is underrated. It removes decision fatigue. It also prevents the โI forgot which command I used last timeโ spiral.
A simple flow looks like:
- Clean: remove old outputs
- Build: run Pandoc with known flags
- Output: save to
/out/report.pdf - Checksum: optional, but useful when sharing versions
I started doing this after sending the wrong PDF version once. It wasโฆ not my finest hour. A checksum wonโt save you from everything, but it can save you from โoops, wrong file.โ If youโre the kind of person who also automates tool setup, you might enjoy building a small companion script like a mini exploitation toolkit in Python to standardize the tiny tasks that otherwise steal attention.
Auto-insert metadata: client, date, tester, scope (from a config file)
Metadata sounds fancy; itโs just a way to stop retyping the same header information. A metadata.yaml file can hold:
- Engagement name
- Date range
- Tester name
- Scope summary
This is also where you keep the tone consistent across reportsโespecially helpful when youโre tired and your phrasing starts to wobble.
Optional: build variants (internal vs client) with redaction toggles
Even for small engagements, you may want:
- Internal version: includes raw tool output, internal notes, extra context
- Client version: minimal secrets, clean narrative, only necessary artifacts
You can do this with separate entry files (report_client.md and report_internal.md) or by including/excluding sections. Keep it simple at first.
If your work touches web apps, a clean evidence split also pairs well with a focused workflow like
a Burp Suite WebSocket workflow
so โinternal notesโ donโt leak into โclient proof.โ
Stop. Donโt ship the first PDF. run this 30-second QA loop
Before you send anything, do a fast scan:
- Do all images render?
- Do headings make sense when skimming?
- Does each finding have impact + proof + repro + fix?
- Did you accidentally include secrets in a screenshot?
Yes, it takes 30 seconds. Thatโs the point. Youโre buying peace.
- If you build PDFs weekly, youโll save the most
- If you build PDFs monthly, youโll still feel the relief
- If you build PDFs rarely, keep the pipeline minimal
Apply in 60 seconds: Mini calculator: (reports per month) ร (minutes lost to formatting) = your monthly time tax. Write the number down and decide if itโs acceptable.
Short Story: โฆ โฆ
Two years ago, I finished a long lab chain at nightโone of those sessions where everything finally clicks and your terminal history feels like a victory parade. I told myself Iโd โdocument it tomorrow.โ Tomorrow arrived with fresh amnesia and three new tasks. By the time I opened my notes, the screenshots were scattered across three folders, and the one image that proved the pivot was missing.
I rebuilt parts of the chain from memory and shipped a report that was technically correctโbut emotionally fragile. I could feel it: the reader would sense the uncertainty between the lines. The next week I built a tiny reporting kit. Same tools, same skills, different container. The first time make pdf produced a clean report, I actually laughed. Not because it was perfectโbut because it didnโt require heroics.
Common mistakes that quietly wreck reports (and how to avoid them)
Mistake #1: evidence captured before the final exploit path is stable
This is the classic: you screenshot a half-working path, then later discover the final chain is slightly different. Suddenly your โproofโ is out of sync with your actual repro steps.
Fix: capture evidence when the chain is stableโor capture early screenshots as โexplorationโ and clearly label them as such. Donโt let early evidence masquerade as final proof.
Mistake #2: screenshot shows outcome, not the proof (missing commands / context)
A screenshot of โI got a shellโ is not always proof. Proof is: what led to it. The reader needs context: target, command, output, and the line that matters.
Fix: pair โoutcomeโ screenshots with at least one screenshot that shows the command/output that explains the outcome.
Mistake #3: untrusted severity language (โcritical!!!โ) without business mapping
Severity is not a vibe. In real client work, inflated language creates skepticism. In exam-style writing, it can also make your report feel immature.
Fix: explain impact in plain English first. Then pick a severity that matches the conditions required (auth required? internal only? high complexity?). Calm writing reads as confidence. (If youโre practicing on Kioptrix-style machines, grounding severity and impact is easier when your enumeration is disciplinedโthis Nmap guide for Kioptrix in Kali is a good reference for evidence-friendly scans.)
Mistake #4: broken image paths after moving folders
Moving folders after writing is how images disappear. Itโs not a Pandoc problem. Itโs a discipline problem.
Fix: decide on structure first. Keep relative paths. If you must move, do it once, then rebuild and verify images immediately.
Mistake #5: findings that cannot be reproduced from your steps
This is the silent killer: the report sounds plausible, but the steps donโt actually work. Reviewers lose trust instantly.
Fix: do a quick โcold readโ of your own repro steps. Pretend you didnโt write them. If you get stuck, the reader will too. If your repro depends on VPN stability in platforms like TryHackMe, donโt ignore disconnectsโsee TryHackMe OpenVPN keeps disconnecting so your โstepsโ donโt silently fail for environmental reasons.
โDonโt do thisโ checklist before you hit Send (loss-prevention)
Donโt leak secrets: tokens, internal IPs, usernames in screenshots
Remove sensitive text or cover it with opaque filled rectangles in a flattened sharing copy. Blur and light pixelation can retain recoverable information. Keep originals restricted, then inspect the exported PDF for visible text, searchable text, metadata and embedded artifacts. See Flameshotโs privacy guidance.
My rule: if the artifact could create embarrassment on a screen share, it gets reviewed twice. (And if part of your evidence is โsecure access posture,โ pairing your report with a checklist like Kali SSH hardening can make remediation recommendations more actionable.)
Donโt ship inconsistent timestamps (timezone mismatches look suspicious)
When timestamps donโt match across screenshots and logs, readers wonder whatโs going on. You donโt want your client playing detective with your evidence.
Pick a timezone and be consistent. If youโre remote or traveling, note it in the report metadata.
Donโt mix scopes (lab habits vs client constraints)
Lab reporting habits can sneak into client reports: extra scanning, unrelated targets, โI tried this tooโฆโ chatter. It muddies the narrative and can cause friction.
Keep client reports scope-clean. If something interesting is out of scope, mention it carefully as an observation without implying you tested it.
Donโt bury the fix: remediation should be scannable and prioritized
Remediation should not be a single paragraph that starts with โIt is recommended thatโฆโ and ends in fog.
Use a short prioritized list. Include an immediate mitigation and a longer-term fix when applicable. Your report should make action easier, not harder.
- Gather: scope, target list, dates, tester contact
- Gather: findings summary (titles + severities)
- Gather: top 3 remediations (plain English)
Apply in 60 seconds: Create a โSend-readyโ checklist line at the bottom of report.md and tick it before exporting.
FAQ
Whatโs the fastest way to turn pentest notes into a PDF on Kali?
Write findings in Markdown (one report.md entrypoint), keep screenshots in a predictable evidence/ folder, then run a single Pandoc command (or make pdf) to build the PDF.
Speed comes from repeatability, not typing faster.
Is Pandoc good enough for client-ready pentest reports?
Yes for many solo or small-team engagementsโespecially when you value consistent output and versionable text. If your client requires tracked changes or multiple reviewers in Word, consider exporting to DOCX as a bridge. The content quality still matters more than the tool.
How do I keep screenshots from breaking in the exported PDF?
Run Pandoc from the report folder so relative image paths resolve there, or set --resource-path explicitly, keep filenames simple (letters/numbers/hyphens), and avoid moving the folder after linking images.
Rebuild the PDF right after you capture evidence so you catch broken paths early.
Whatโs a good folder structure for pentest evidence and notes?
A practical starter is report.md at the root, an evidence/ folder (optionally split by finding ID), and an out/ folder for the final PDF.
The core principle is one canonical evidence root.
How do I write findings that feel โOSCP-styleโ but still professional?
Use a clear finding card: impact, evidence, reproduction steps, remediation. Keep language accurate and calm. Show proof for each claim. โOSCP-styleโ is really โreproducible and evidence-based,โ not โdramatic.โ
Should I include tool output (nmap, burp, metasploit) verbatim?
Include what supports the claim and helps remediation. Long raw output often belongs in an appendix or trimmed to the relevant lines. If the reader has to scroll past walls of text to find the point, youโre taxing them. If you do include Metasploit output and hit environment weirdness, resolving setup issues like msfconsole bundler / Ruby version mismatch on Kali can keep your evidence clean and reproducible.
Whatโs the minimum QA checklist before sending a report to a client?
Verify images render, findings have impact/proof/repro/fix, secrets are redacted, the executive summary matches the body, and the PDF filename/version is correct. Then do a fast skim of headings to ensure the story still makes sense.
Can I generate both DOCX and PDF from the same Markdown source?
Often yes. Many people write in Markdown and export PDF for delivery, DOCX for stakeholders who want inline comments. Keep the source clean and avoid formatting tricks that only work in one output format.

Next step (one concrete action)
Create /reporting-kit/ today: add report.md, /evidence/, a finding.md template, and a Makefile with make pdfโthen run one practice finding end-to-end in under 15 minutes
If you do nothing else, do this one thing: create a folder and run a tiny rehearsal. Not a full report. One finding. One screenshot. One repro. One fix. One PDF build.
That rehearsal is where the whole system becomes real. It also exposes the sharp edgesโpaths, naming, template quirksโwhile the stakes are low.
And yes: youโll be tempted to โimproveโ the template before youโve used it. Resist. Use it once first. Youโll learn more in 15 minutes than you will in two hours of โoptimizing.โ If you want the official course context that this style of reporting is often modeled after, see: OffSec PEN-200 course information.
Wrap-up (and your 15-minute pilot)
Remember the hook: the problem wasnโt your writing. It was the late-night chaos that makes writing feel impossible. A repeatable pipeline turns reporting into something calmer: capture evidence, write clearly, build reliably.
If you want a clean โpilotโ right now, hereโs your 15-minute plan:
- Minute 1โ3: Create
reporting-kit/withreport.mdandevidence/ - Minute 4โ7: Create one finding card using the template
- Minute 8โ10: Capture one Flameshot screenshot and link it
- Minute 11โ15: Run your build command and skim the PDF
If the PDF builds and the evidence shows up, youโve already won. Everything else is refinements. If youโre also practicing on curated vulnerable machines, keeping your learning path organized with Kioptrix levels and a reference walkthrough like Kioptrix Level 2 walkthrough can make your reporting reps feel structured instead of random.
Original review: 2025-12-26
Minimal PDF build: Install Pandoc and a supported PDF engine first; the default PDF route uses LaTeX. From the reporting-kit/ directory, create out/ and run pandoc report.md --resource-path=. --standalone -o out/report.pdf. A make pdf command requires you to write the Makefile target; it is not built into Pandoc. If the selected engine is missing, install it through your normal package workflow or select an installed supported engine. The Pandoc manual explains PDF engines and image resource paths. Open the resulting PDF before sharing it.
Technical guidance updated: 2026-10-13. Corrected secret redaction advice and clarified PDF engine, build-directory, and image-path requirements.