screenshot
Capture web-page / PoC screenshots into the engagement evidence (targets/<eng>/poc/) and embed them in walkthrough.md.
Skill by Encod3d-Sec
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/encod3d-sec-screenshot
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, data, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/screenshot
What's inside
- Skill name
screenshot- Description
- Capture web-page / PoC screenshots into the engagement evidence (targets/<eng>/poc/) and embed them in walkthrough.md. Live pages + authenticated/exploited states (post-login dashboard, the flag page, an SSTI/cmdi render). Runs chromium on the Kali tooling host (VPN path to targets); hands off to the evidence skill for redaction before a real report. Use when building PoC evidence or asked to "take a screenshot / capture the PoC".
- License
- MIT
- Instructions
- 204 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- files: referenced but missing: scripts/shot.py, scripts/capture.sh
Files (1)
- SKILL.md
SKILL.md (first lines)
# Screenshot: visual PoC capture Turn the text walkthrough into evidence. Capture runs on the **Kali tooling host** (it has the VPN route to in-scope targets); the PNG is then pulled into the vault under `targets/<eng>/poc/`. Driver: `scripts/shot.py` (chromium headless). For redaction-before-report use `Skill(evidence)`. **One evidence dir, captured by hand.** `poc/` = the curated story you choose to show (login, the exploited state, the flag). ALL PoC evidence is now captured MANUALLY and LIVE via `capture.sh` straight into `poc/` the moment a step lands - there is no auto-capture net. ## Scope check Only screenshot **in-scope** hosts (read `targets/<eng>/scope.md`). On `passive_only` RoE a screenshot is fine (it's a GET you already make). Never screenshot a host you would not curl. ## What to capture: EVERY breakthrough, as it happens (with retries) Screenshot the moment each step LANDS, not at the end - the box may expire. A breakthrough = anything you'd put in the report: the **entry page**, a **leaked secret / useful source** (deobfuscated JS, a config, an `app.log`), the **cipher / decrypt response**, the **vuln firing**, the **authed/exploited state**, the **flag**. Tell the arc (Entry -> Trigger -> Impact) AND capture the intermediate proofs (the leak, the crypto response) - those are exactly what a reviewer disbelieves without a picture. - **Always show the URL.** Every web/source capture must carry its address bar so the image is self-identifying - which page/path it is (`https://T/folder/folder/log.md`), not an anonymous blob. Live `<url>` mode adds it automatically; for `--html`/`--term` of a fetched resource pass `--url-bar "<full URL>"`. - **Retry (box is up).** Renders fail transiently (nav timeout, cold chromium). Retry 2-3x and confirm the PNG is non-empty (`[ -s out.png ]`) before moving on; while the box is up, go back and re-capture anything you missed rather than shipping evidence with gaps. Name `NN-slug.png` (NN = step order) so the evidence reads top-to-bottom. ## Fastest path: `capture.sh ev` (one call, live - USE THIS by default) Batching captures at the end of a box is the failure mode: you lose transient state AND the live situational awareness that helps pick the next move when stuck. The `ev` mode of `scripts/capture.sh` collapses the whole capture (render a card showing **command + request URL**, pull the PNG into `poc/`, print the md ref) into ONE call, so live capture has no friction. `cmd` and `url` are REQUIRED args - no anonymous card. ```bash # 1) tee the step's output on the VM as you run it (safe for stateful exploits - no re-run needed): bash /root/vm.sh 'python3 /tmp/exploit.py 2>&1 | tee /tmp/poc/flag3.log' # 2) card it the MOMENT it lands: scripts/capture.sh ev <eng> flag3-contract "POST http://T:8545 eth_sendTransaction" "reset()+transferDeposit()" # args: <eng> <slug> <request-url> <cmd-label> [logfile=/tmp/poc/<slug>.log] # -> saves targets/<eng>/poc/NN-flag3-contract.png (NN auto-numbered), prints the ![]() ref ``` The card shows `$ <cmd-label>` in the title bar AND `<request-url>` in a browser address bar (both required) so every image says what was run and where. Use the manual `shot.py` calls below only for the modes `capture.sh` does not wrap (a GUI `--window`/`--screen`, an authed `--html` render). ## Rendered web page: `capture.sh web` The most operator-legible shot is the target **as a browser renders it** - the actual page, not a curl card. `capture.sh web <eng> <slug> <url>` renders the live URL through chromium on the VM (browser-chrome frame + address bar) and pulls the PNG into `poc/`. This is the FIRST evidence to grab on any web target (capture-as-is before poking), and again at each rendered exploit state (an SSTI/cmdi output page, the flag page): ```bash scripts/capture.sh web <eng> home http://T:PORT/ # the landing page, as seen in a browser scripts/capture.sh web <eng> flag http://T:PORT/admin # a rendered exploited/authed state # opts: --no-bar (drop the address-bar frame), trailing `W H` to resize (default 1440 900) ``` A dead target makes it fail loud (chromium `net::ERR` -> non-zero exit, no error-page PNG pulled). For an **authed** page (needs a session cookie), curl-save the HTML and render it with the manual `shot.py --html --url-bar` call below; `web` is for GET-able live pages. ## Request/response leads: `capture.sh req` The highest-value CTF/pentest evidence is the **real curl request and response** for a lead (creds, a flag, a leaked source) - presentable as full-file PoC. Capture it deliberately, the moment the lead lands: **Full fidelity (`capture.sh req`):** for a request you want as a clean PoC (request line + headers + body, response status + headers + body), run it through the `req` mode - it runs `curl -sS -iv`, colors the request(`>`)/response(`<`) Burp-style, and pulls the PNG into `poc/`: ```bash scripts/capture.sh req <eng> <slug> -- -sk -X POST https://T:5000/login --data @/tmp/body.txt ``` For a **crypto-forged** request (envelope/signature), give the exploit script a `--curl` mode: it writes the forged body to a file and prints the `capture.sh req` args, so the PoC is a reproducible curl, not "run my python". Never settle for a script-summary card (`POST https://T/login` + python output) when the real curl request/response is the artifact a client / writeup needs. ## Real tmux-session cards: `capture.sh tmux` When the evidence should look like an ACTUAL Kali terminal session (real commands + real output, the way recon scans are captured), run the proof in a real tmux pane and screenshot the pane: `scripts/capture.sh tmux <eng> <slug> <script.sh>` runs the script in a wide tmux pane, waits for its `echo POC-DONE`, `--tmux`-captures the pane (FULL scrollback), colors it, and pulls the PNG into `poc/`. Write the script to `echo "# comment"` and `echo "$ <command>"` then run the real `curl -i`/exploit command. The card colors **comment (green) / command (cyan) / response (default)** so the three are visually distinct (`shot.py --reqresp`, works on `--term` and `--tmux`). **NEVER truncate or abbreviate evidence.** Show the FULL command, FULL request, FULL response - no `...`, no `<result=...>` placeholder, no eliding a base64 blob or a long body. A reviewer must verify/reproduce from the image ALONE. The tooling enforces this (`capture.sh tmux` captures full pane scrollback via `--history` and never caps rendered lines); keep the same discipline in the script content - paste the real value, never summarize it. ## Capture (run on Kali via vm.sh) Push the script once, then shoot. `T` = target host, `PORT` = web port, `<eng>` = engagement dir. ```bash # 0) push shot.py to Kali (once per session). vm.sh does NOT forward local stdin, so base64 the # file INTO the command (a `... | vm.sh 'cat > file'` pipe silently writes an EMPTY file): B64=$(base64 -w0 scripts/shot.py); bash /root/vm.sh "mkdir -p /tmp/poc; echo $B64 | base64 -d > /tmp/shot.py" # 1) LIVE page (unauth / GET-able): the URL address bar is added AUTOMATICALLY bash /root/vm.sh 'python3 /tmp/shot.py http://T:PORT/internal --step 1 --slug login --dir /tmp/poc --caption "NOC login"' # 2) AUTHED / exploited state: curl WITH the session, save HTML, render it. Pass --url-bar so the # image shows WHICH URL produced it (the authed path, or the exact exploit request); --base loads # /static from the target; the cookie stays in curl, never in the browser. bash /root/vm.sh 'curl -s -b "session=VAL" http://T:PORT/internal/dashboard > /tmp/d.html; python3 /tmp/shot.py --html /tmp/d.html --base http://T:PORT --url-bar "http://T:PORT/internal/dashboard" --step 3 --slug dashboard --dir /tmp/poc --caption "Dashboard via SQLi"' ``` shot.py prints `saved <path>` + a ready `md: ` line - keep that line. ## Terminal-tool + source/log capture (--term) Render console output OR a fetched source/log/config file as a clean colored card (ANSI converted, never shown raw). The fancy 2-line shell prompt is **auto-stripped** so a tmux grab is not a fused `rootnmap -p-` mess (`--raw` keeps prompts if you need them). For a fetched web resource, add `--url-bar` so the card shows its URL - a leaked source file is evidence only if you can see where it lives. ```bash bash /root/vm.sh 'nmap -sV T | tee /tmp/o.txt; python3 /tmp/shot.py --term /tmp/o.txt --cmd "nmap -sV T" --step 1 --slug nmap --dir /tmp/poc' # a leaked source / log / config, WITH its URL in the address bar:
From Encod3d-Sec/TORCH, MIT.
More from Encod3d-Sec/TORCH
- 0.741score
ingest
Encod3d-Sec
Synthesize raw recon/test output into engagement state.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
metasploit
Encod3d-Sec
Drive msfconsole across the workflow - DB-backed recon (db_nmap, auxiliary scanners), version->exploit search/check/run, multi/handler reverse shells…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
campaign-health
Encod3d-Sec
Health check for the bb/pt/ctf workflow driver subsystem - verifies everything is in place so every machine runs the same.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
fuzz
Encod3d-Sec
Adaptive, targeted web fuzzing - deterministic wordlist selection (wl-pick.sh) plus judgment.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
hunt-idor
Encod3d-Sec
IDOR / BOLA hunting - two-account methodology, identifier discovery and UUID leak chaining, the trusted-identifier test, GraphQL node and nested-object IDOR…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
learn
Encod3d-Sec
Post-engagement knowledge harvest AND harness retrospective - after a box/bugbounty/pentest/CTF is completed, first diff how the engagement was EXECUTED…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
hunt-windows
Encod3d-Sec
Local Windows privilege escalation on a STANDALONE / workgroup host, or a local shell on a domain member - foothold to SYSTEM.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
arsenal
Encod3d-Sec
Wiki-first "what do I use" lookup - pick the automated TOOL (wiki/tools/), then the PAYLOAD/technique (wiki/payloads/ + wiki/cheatsheets/), for a…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
coverage
Encod3d-Sec
Show per-asset vuln-class coverage gaps for the active engagement so nothing in scope is skipped.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
delegate
Encod3d-Sec
Autonomous sub-agent hand-off for a fiddly, fully-specified exploit-compile / escalation RUN - the main agent stays on strategy and the board while a cheap…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
hunt-ics
Encod3d-Sec
ICS/SCADA/OT exploitation - Modbus (502), S7comm (102), EtherNet/IP (44818), DNP3, OpenPLC, Node-RED SCADA, PLC/HMI/coil/holding-register attacks.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
redteamlead
Encod3d-Sec
On-demand senior red-team lead advisor.
SkillBFreshness: B★ 335Claude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 335
- Forks
- 49
- Open issues
- 0
- Last commit (this folder)
- Jul 28, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Encod3d-Sec/TORCH
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Encod3d-Sec
- 0.741score
hunt-windows
Encod3d-Sec
Local Windows privilege escalation on a STANDALONE / workgroup host, or a local shell on a domain member - foothold to SYSTEM.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
campaign-health
Encod3d-Sec
Health check for the bb/pt/ctf workflow driver subsystem - verifies everything is in place so every machine runs the same.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
hunt-ics
Encod3d-Sec
ICS/SCADA/OT exploitation - Modbus (502), S7comm (102), EtherNet/IP (44818), DNP3, OpenPLC, Node-RED SCADA, PLC/HMI/coil/holding-register attacks.
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
hunt-idor
Encod3d-Sec
IDOR / BOLA hunting - two-account methodology, identifier discovery and UUID leak chaining, the trusted-identifier test, GraphQL node and nested-object IDOR…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
arsenal
Encod3d-Sec
Wiki-first "what do I use" lookup - pick the automated TOOL (wiki/tools/), then the PAYLOAD/technique (wiki/payloads/ + wiki/cheatsheets/), for a…
SkillBFreshness: B★ 335Claude Code +9 - 0.741score
coverage
Encod3d-Sec
Show per-asset vuln-class coverage gaps for the active engagement so nothing in scope is skipped.
SkillBFreshness: B★ 335Claude Code +9
Cite this page
screenshot skill. Agent Mart. https://agentmart.dev/skills/encod3d-sec-screenshot (last updated 2026-10-24)