license: cc-by-nc-4.0
language:
- en
tags: - security
- bug-bounty
- offensive-security
- red-team
- pentest
- sft
- dpo
size_categories: - 10K<n<100K
hunter-llm-sft-v3 — task-shaped offensive-security dataset
Prescriptive SFT + DPO dataset for HunterLLM v3. Targets Qwen-2.5-72B-Instruct
(also works for Llama-3-8B / Qwen-32B with no schema changes — chat template is
applied via the tokenizer).
What changed vs v1 / v2
- v1: outputs were a generic 7-line template. Model learned platitudes.
- v2: outputs became the real article body / CVE description / KEV / ATT&CK /
OWASP text. Better, but still descriptive — the model writes about bug hunting. - v3: adds prescriptive buckets so the model learns to do bug hunting:
given a request / task / asset, return payloads, curl commands, nuclei probes,
ffuf invocations, or a ready-to-send report skeleton.
Composition (after MinHash dedup @ 0.94)
| Bucket | Count | What the output looks like |
|---|---|---|
v2.writeup_v2 |
2,340 | Full real bug-bounty write-up bodies |
v2.nvd_v2 |
6,854 | Verbatim CVE description + CVSS + CWE |
v2.kev_v2 |
1,581 | CISA KEV description + KEV badge + vendor/product context |
v2.metasploit_v2 |
2,020 | Metasploit module documentation prose |
v2.attack_v2 |
697 | MITRE ATT&CK technique descriptions + kill-chain phases |
v2.owasp_v2 |
243 | OWASP cheatsheets / WSTG verbatim |
v3.payload_v3 |
521 | Real payload blocks from PayloadsAllTheThings (code fences) |
v3.nuclei_v3 |
1,291 | Real nuclei YAML probes for CVEs and bug classes |
v3.wordlist_v3 |
25 | Real payload wordlists from PAtT Intruder/ directories |
v3.tool_invocation |
294 | Curated tool/command pairs (data/curated/tool_invocations.jsonl) |
v3.personal_* |
122 | Local markdown + Bugreader circle (collect-bugreader-circle) |
| Total (dedup) | ~18.0k |
dpo_pairs.jsonl is derived from sft_train.jsonl via the project's
preference-generation heuristic.
Style of v3 outputs (the point)
Every v3 output reads like a senior pentester's Slack message:
- Payloads in
code fences(not paraphrased). curl -X POST ...examples ready to paste.- Nuclei YAML with proper
id/info/http/matchersstructure. - Numbered, idempotent reproduction steps.
- Burp Collaborator / OAST domains (
oast.fun,oast.me,interact.sh) for
callback PoCs. - Report skeletons matching HackerOne triage expectations.
Combined with the updated SYSTEM_BUG_HUNTER prompt, this trains the model
out of "lecture mode" and into "give me the artefact" mode.
Recommended training
# On a RunPod A100-80GB or H100-80GB:
export HF_TOKEN=hf_xxx
export HF_MODEL_REPO=<your-namespace>/HunterLLM-72B-v3
export HF_DATASET_REPO=jabir-khan/hunter-llm-sft-v3-private
export HUNTER_BASE_MODEL=Qwen/Qwen2.5-72B-Instruct
export SKIP_DPO=1 # SFT is already prescriptive; DPO adds little
export SKIP_MERGE=1 # push adapter only -- merge happens on inference host
bash scripts/runpod_bootstrap.sh
Files
sft_train.jsonl— instruction / input / output rows.dpo_pairs.jsonl— preference pairs derived fromsft_train.jsonl.
Authorization
All training inputs are framed as guidance for authorized engagements
(bug bounty in scope, pentest with written permission, lab). Every
instruction includes a scope reminder.
License
CC-BY-NC-4.0. Underlying write-ups remain owned by their authors.