Kali Pentest Report Template: Markdown and PDF Workflow

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

  1. Separate observations from assumptions. An open port or a version banner is evidence to investigate, not proof of impact.
  2. Keep raw output alongside annotated screenshots. Label the target and collection time so the evidence can be traced.
  3. Check every image path after moving the folder. Open the exported PDF and inspect tables, screenshots, page breaks, and readable text.
  4. 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.


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.

Takeaway: Treat evidence like source code: predictable paths, clean naming, and one canonical folder.
  • 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.

Kali Pentest Report Template

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 pandoc command 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.

Takeaway: If your work involves screenshots + steps + fixes, a build pipeline pays off immediately.
  • 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.


Kali Pentest Report Template

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.png
  • YYYY-MM-DD_HHMM_F-01_repro-step2.png
  • YYYY-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.

Takeaway: Pick the reporting approach that minimizes friction for your actual workflow.
  • 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.)

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:

![F-01 Proof: exposed admin panel](evidence/F-01/2025-12-26_1412_F-01_proof.png)

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.

Infographic: The Repeatable Pentest Reporting Pipeline
1) Capture
Flameshot saves annotated screenshots into /evidence/.
Goal zero friction
2) Explain
Markdown โ€œfinding cardsโ€ turn proof into a reproducible story.
Goal clear claims
3) Build
Pandoc converts report.md into a client-ready PDF.
Goal consistent output
4) QA
A 30-second checklist catches broken images and missing proof.
Goal fewer regrets
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.

Takeaway: Automation is how you get time back without lowering quality.
  • 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.

Takeaway: A report that leads to action is one that makes the next step obvious.
  • 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.


Kali Pentest Report Template

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/ with report.md and evidence/
  • 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.

Stay Updated with Kioptrix

Get practical guides, useful resources, and new articles delivered to your inbox.

No spam. Unsubscribe anytime. Read our Privacy Policy.