15 — Notes & Reporting¶
What you'll learn: why note-taking is the skill that separates hobbyists from professionals, how to lay out a clean engagement folder, how to log everything you type, and how to turn raw scan output into a professional finding and a full pentest report. Prerequisites: 14 — Post-exploitation & pivoting. ⬅️ Course index
Beginners skip this chapter. Professionals obsess over it. A pentest isn't judged by how many machines you popped — it's judged by the report you hand over. The client never watches you work; they only read what you wrote. This chapter is the bridge from "I hacked something" to "I can prove it, explain it, and tell you how to fix it."
Why notes matter¶
You cannot report what you didn't record. Three days into an engagement, you will not remember which command dumped that password, what the exact URL was, or which host had port 8080 open. If it isn't written down, it didn't happen — and an unproven finding is worthless.
Good notes also protect you. If a client says "your test crashed our database," your timestamped log showing exactly what you ran (and when) is your defence. Notes are evidence, memory, and legal cover all at once.
The rule: write it down as you go, not at the end. Reconstructing a day of work from memory is where findings get lost.
A clean engagement folder¶
Start every engagement with the same folder skeleton so you never wonder "where did I put that?" Create it before you run a single tool:
mkdir -p ~/engagements/acme-2026/{scans,loot,notes,screenshots,exploits,report}
cd ~/engagements/acme-2026
| Folder | What goes in it |
|---|---|
scans/ |
Raw tool output — nmap, nikto, gobuster, everything (never edit these) |
loot/ |
Stuff you pulled off targets: password hashes, config files, dumped databases |
notes/ |
Your running Markdown log — the story of the engagement |
screenshots/ |
Proof images (a shell prompt, an admin panel, a decrypted secret) |
exploits/ |
Scripts and payloads you wrote or downloaded for this job |
report/ |
The deliverable(s) you'll actually send |
Keep loot/ out of git. Password hashes and captured traffic must never land in a public (or even private) repo by accident. This course's .gitignore already ignores the dangerous folders — mirror that habit in your own engagement repos:
# never commit stolen data or secrets
loot/
captures/
*.pcap
*.pcapng
hashes.txt
cracked.txt
*.key
*.pem
If it contains a target's data or a credential, it is loot and it stays git-ignored. When in doubt, ignore it.
tmux as a workflow, not just a terminal¶
tmux ("terminal multiplexer", introduced in 02 — Terminal power) lets one terminal window hold many sessions that keep running even if you disconnect. For reporting, its killer feature is structure: give each phase of the engagement its own window.
tmux new -s acme # start a named session for this engagement
# Ctrl+b c -> create a new window
# Ctrl+b , -> rename the current window (recon / scan / exploit / loot)
# Ctrl+b n -> next window, Ctrl+b p -> previous
# Ctrl+b d -> detach (leave everything running); reattach later:
tmux attach -t acme
A tidy layout: window 0 = recon, 1 = scanning, 2 = exploitation, 3 = notes (an open editor). You can glance back at any phase instead of scrolling one giant history.
Log every keystroke¶
Two ways to capture a full transcript of a pane so you never lose output:
# Option A — tmux's built-in pipe (saves the current pane live):
# Ctrl+b : then type: pipe-pane -o "cat >> ~/engagements/acme-2026/notes/tmux-$(date +%F).log"
# Option B — script(1): records EVERYTHING in the shell to a file (works anywhere):
script -a ~/engagements/acme-2026/notes/session-$(date +%F).log
# ...do your work...
exit # stops recording
script writes both what you typed and what the tools printed. Start it at the beginning of a work session and you have a complete, timestamped record for free.
Always nmap -oA¶
Your scans are the backbone of the report, so save them in a format you can re-read later. Nmap's -oA ("output all") writes three files at once from a single scan — no re-scanning, no lost data:
nmap -sV -sC -oA scans/tcp-192.168.56.20 192.168.56.20
# ^^^ base name; produces:
# scans/tcp-192.168.56.20.nmap -> human-readable (paste into notes)
# scans/tcp-192.168.56.20.gnmap -> "grepable" (grep for open ports fast)
# scans/tcp-192.168.56.20.xml -> machine-readable (imports into Faraday/Dradis/Metasploit)
Make -oA a reflex on every nmap run. The .xml especially is what team tools ingest to build the report for you. The same idea applies to other tools — always redirect output into scans/ (nikto -h http://target | tee scans/nikto-target.txt); tee prints to screen and saves to a file.
Note-taking tools¶
There's no single right tool — the right one is the one you'll actually use. Pick from:
| Tool | What it is | Best for |
|---|---|---|
| Plain Markdown | .md text files (like this course) in your notes/ folder |
Simplicity, git-friendly, works everywhere — start here |
| Obsidian | Markdown editor with backlinks and a graph view | Linking hosts ↔ creds ↔ findings across a big engagement |
| CherryTree | Hierarchical notebook (a tree of rich-text nodes), pre-installed on Kali | Per-host node trees, embedding screenshots inline |
Plain Markdown is the honest recommendation for a beginner: it's future-proof, diffs cleanly in git, and forces you to write structured text. A minimal notes/log.md might just be a running table (mirror the lab-log tables at the bottom of every course module — that habit scales straight into real engagements):
| Time | Host | Command | Result |
|-------|----------------|--------------------------------|---------------------------------|
| 10:14 | 192.168.56.20 | nmap -sV -oA scans/msf2 ... | 21/ftp vsftpd 2.3.4, 445/smb |
| 10:31 | 192.168.56.20 | searchsploit vsftpd 2.3.4 | CVE-2011-2523 backdoor -> shell |
Screenshots — Flameshot¶
A screenshot of a root shell or an admin panel is your strongest evidence. Flameshot is the go-to on Kali because it lets you annotate (arrows, boxes, blur) before saving:
sudo apt install flameshot # if not already present
flameshot gui # select a region, annotate, save to screenshots/
Name shots so they explain themselves: screenshots/56.20-root-shell.png, not Screenshot_2026-07-13.png. Blur any real secret you don't need to show. Capture proof the moment you get it — that shell may not survive a reboot.
How to write a finding¶
A finding is one vulnerability, written up so anyone — a sysadmin or a CFO — can understand what's wrong and what to do. Every good finding answers six things in the same order:
| Section | Answers | Example |
|---|---|---|
| Title | What is it, in one line? | "Anonymous FTP with backdoor command execution (vsftpd 2.3.4)" |
| Severity (CVSS) | How bad, on a standard scale? | Critical — CVSS 9.8 (see Module 05) |
| Affected asset | Where exactly? | 192.168.56.20:21 (Metasploitable2) |
| Evidence | Prove it: command + output | The exact command you ran and what came back |
| Impact | So what? Why should they care? | Full remote root shell → total system compromise |
| Remediation | How do they fix it? | Upgrade vsftpd; block FTP at the perimeter |
Severity uses CVSS (Common Vulnerability Scoring System, a 0.0–10.0 score maintained by FIRST — the full metric groups and severity bands are covered in Module 05). Don't invent numbers: look the CVE up on the NVD and cite its score and vector.
A copy-paste template for notes/findings.md:
### Finding: Anonymous FTP backdoor command execution (vsftpd 2.3.4)
- **Severity:** Critical — CVSS 9.8 (CVE-2011-2523)
- **Affected asset:** 192.168.56.20, TCP/21 (vsftpd 2.3.4)
- **Evidence:**
$ nmap -p21 -sV 192.168.56.20
21/tcp open ftp vsftpd 2.3.4
$ use exploit/unix/ftp/vsftpd_234_backdoor # metasploit -> root shell
uid=0(root) gid=0(root)
(see screenshots/56.20-root-shell.png)
- **Impact:** Any remote attacker gains an unauthenticated ROOT shell, giving
full control of the host and any data or credentials it holds.
- **Remediation:** Remove/upgrade the backdoored vsftpd build to a current
patched version; restrict FTP exposure; monitor for the `:)` trigger.
The evidence is what makes it a finding and not an opinion — the command and its output let the client reproduce it. This is exactly the standardisation flow (CVE → CVSS → CWE → CPE) that Module 05 drills.
The structure of a pentest report¶
Individual findings are the ingredients; the report is the meal. A standard professional report has five parts:
| Section | Audience | Contents |
|---|---|---|
| Executive summary | Managers, non-technical | Plain-English risk picture, a few sentences, a severity count — no jargon |
| Scope | Everyone (legal record) | What you were allowed to test (IPs, URLs, dates, rules of engagement) |
| Methodology | Technical reviewers | How you tested — the phases (recon → scan → exploit) and standards followed |
| Findings | Sysadmins, engineers | Every finding in the six-part format above, ordered by severity |
| Appendix | Technical / auditors | Full tool output, raw scan files, extra evidence, references |
The executive summary is written last but read first — and it's the only page many decision-makers open. Lead with risk and business impact, not tools. The scope section is your contract: testing anything outside it is illegal, so it's stated in writing. Order findings highest severity first — nobody reads to the bottom.
Team tools¶
On a real team, several testers hit the same target and their findings must merge into one report. Two open tools handle this:
| Tool | What it does |
|---|---|
| Faraday | Multi-user collaboration platform; imports nmap/nikto/etc. output (that .xml!) and de-duplicates findings across a team |
| Dradis | Collaboration + reporting framework; templated findings and one-click export to a formatted report |
Both ingest the machine-readable output you already saved (this is why -oA matters). You stay in the tool for a solo lab, but knowing they exist — and feeding them clean, structured output — is what makes you employable on a team.
Common beginner mistakes¶
- Taking notes "later." Later never comes; you forget the command. Log as you go with
scriptortee. - No proof. A finding without command output or a screenshot is just a claim — and claims don't make it into reports.
- Committing loot to git. Hashes, pcaps, and dumped data must live in git-ignored folders. One careless
git add .can leak a client's data. - Only saving the pretty nmap output. Use
-oAso you also keep the.xmlthat tools import — re-scanning later wastes time and changes results. - Writing the report like a hacker, not for the reader. The exec summary is for managers; drop the jargon and lead with business risk.
- Inventing severity. Cite the real CVSS from the NVD; don't guess a number.
✅ Practice task¶
- Create an engagement folder:
mkdir -p ~/engagements/lab-2026/{scans,loot,notes,screenshots,report}. - Start a
tmuxsession namedlab, and inside it startscript ~/engagements/lab-2026/notes/session.log. - Run
nmap -sV -sC -oA ~/engagements/lab-2026/scans/msf2 192.168.56.20and confirm all three output files exist (ls scans/). - Take a screenshot of the nmap results with
flameshot gui, annotate one open port, and save it toscreenshots/. - In
notes/findings.md, write up one vulnerability using the six-part template (Title → Severity → Asset → Evidence → Impact → Remediation). Look up its real CVSS on the NVD. - Fill in a lab-log row like the tables at the bottom of every module — make it a habit that carries into real work.
Next¶
➡️ Appendix — Troubleshooting: the common beginner errors across every chapter and how to fix them fast.
Sources¶
- tmux — GitHub wiki & manual: https://github.com/tmux/tmux/wiki
script(1)manual (session logging): https://man7.org/linux/man-pages/man1/script.1.html- Nmap — Output formats (
-oA): https://nmap.org/book/output.html - Obsidian: https://obsidian.md/ · CherryTree: https://www.giuspen.net/cherrytree/ · Flameshot: https://flameshot.org/
- Faraday: https://faradaysec.com/ · Dradis: https://dradisframework.com/
- FIRST — CVSS specification: https://www.first.org/cvss/
- NIST — National Vulnerability Database (NVD): https://nvd.nist.gov/
- PTES — Penetration Testing Execution Standard (reporting): http://www.pentest-standard.org/
- Related: Module 05 — Vulnerability Analysis