pwn 0.5.736 → 0.5.738
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +0 -1
- data/documentation/Agent-Tool-Registry.md +3 -3
- data/documentation/Diagrams.md +1 -1
- data/documentation/How-PWN-Works.md +1 -1
- data/documentation/Plugin-Degradation.md +74 -0
- data/documentation/Swarm.md +2 -3
- data/documentation/What-is-PWN.md +1 -1
- data/documentation/pwn-REPL.md +27 -1
- data/documentation/pwn-ai-Agent.md +1 -1
- data/etc/default_skills/browser-exploitation/SKILL.md +10 -0
- data/etc/default_skills/firmware-unpack-emulate/SKILL.md +10 -0
- data/etc/default_skills/heap-exploitation/SKILL.md +11 -0
- data/etc/default_skills/kernel-pwn-triage/SKILL.md +11 -0
- data/etc/default_skills/pwn/ai/agent/swarm/SKILL.md +1 -1
- data/etc/default_skills/pwn/ai/agent/tools/sbom_scan/SKILL.md +45 -0
- data/etc/default_skills/pwn/corpus/SKILL.md +52 -0
- data/etc/default_skills/pwn/corpus/references/urls.md +3 -0
- data/etc/default_skills/pwn/engagement/SKILL.md +55 -0
- data/etc/default_skills/pwn/plugins/debugger/SKILL.md +62 -0
- data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/handler/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/mitm_proxy/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/nmap_it/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/packet/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/redb/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/sbom/SKILL.md +48 -0
- data/etc/default_skills/pwn/redaction/SKILL.md +1 -0
- data/etc/default_skills/rop-jop-chain-construction/SKILL.md +10 -0
- data/etc/default_skills/windows-internals-triage/SKILL.md +10 -0
- data/lib/pwn/ai/agent/loop.rb +76 -8
- data/lib/pwn/ai/agent/prompt_builder.rb +19 -1
- data/lib/pwn/ai/agent/swarm.rb +4 -5
- data/lib/pwn/ai/agent/tool_guard.rb +11 -4
- data/lib/pwn/ai/agent/tools/fuzz_campaign.rb +2 -1
- data/lib/pwn/ai/agent/tools/job_run.rb +9 -3
- data/lib/pwn/ai/agent/tools/pty_session.rb +7 -1
- data/lib/pwn/ai/agent/tools/sbom_scan.rb +25 -0
- data/lib/pwn/ai/agent/tools/shell.rb +3 -2
- data/lib/pwn/ai/agent/tools/swarm.rb +3 -6
- data/lib/pwn/ai/agent/turn_finalizer.rb +2 -2
- data/lib/pwn/corpus.rb +107 -0
- data/lib/pwn/engagement.rb +158 -0
- data/lib/pwn/plugins/debugger.rb +284 -0
- data/lib/pwn/plugins/findings.rb +14 -3
- data/lib/pwn/plugins/fuzz.rb +62 -0
- data/lib/pwn/plugins/handler.rb +171 -0
- data/lib/pwn/plugins/jobs.rb +55 -0
- data/lib/pwn/plugins/mitm_proxy.rb +37 -2
- data/lib/pwn/plugins/nmap_it.rb +32 -0
- data/lib/pwn/plugins/packet.rb +18 -0
- data/lib/pwn/plugins/preflight_checker.rb +6 -2
- data/lib/pwn/plugins/process_tube.rb +99 -8
- data/lib/pwn/plugins/redb.rb +210 -0
- data/lib/pwn/plugins/repl/mesh.rb +181 -36
- data/lib/pwn/plugins/repl.rb +0 -3
- data/lib/pwn/plugins/sbom.rb +145 -0
- data/lib/pwn/plugins.rb +4 -0
- data/lib/pwn/redaction.rb +53 -0
- data/lib/pwn/reports/engagement.rb +2 -1
- data/lib/pwn/sessions.rb +3 -1
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn.rb +2 -0
- data/packer/provisioners/irc.sh +1 -1
- data/spec/lib/pwn/ai/agent/harness_2026_09_15_spec.rb +144 -0
- data/spec/lib/pwn/ai/agent/tools/sbom_scan_spec.rb +10 -0
- data/spec/lib/pwn/corpus_spec.rb +23 -0
- data/spec/lib/pwn/engagement_spec.rb +27 -0
- data/spec/lib/pwn/plugins/debugger_spec.rb +27 -0
- data/spec/lib/pwn/plugins/handler_spec.rb +25 -0
- data/spec/lib/pwn/plugins/redb_spec.rb +33 -0
- data/spec/lib/pwn/plugins/repl_mesh_channel_route_spec.rb +13 -0
- data/spec/lib/pwn/plugins/repl_mesh_dm_spec.rb +17 -0
- data/spec/lib/pwn/plugins/repl_mesh_dm_transport_spec.rb +50 -0
- data/spec/lib/pwn/plugins/repl_mesh_history_spec.rb +47 -0
- data/spec/lib/pwn/plugins/repl_mesh_key_exchange_spec.rb +85 -0
- data/spec/lib/pwn/plugins/repl_mesh_node_id_spec.rb +36 -0
- data/spec/lib/pwn/plugins/repl_mesh_rx_paint_spec.rb +23 -0
- data/spec/lib/pwn/plugins/repl_mesh_security_paint_spec.rb +36 -0
- data/spec/lib/pwn/plugins/repl_spec.rb +10 -4
- data/spec/lib/pwn/plugins/sbom_spec.rb +22 -0
- data/third_party/pwn_rdoc.jsonl +96 -4
- metadata +36 -4
- data/etc/default_skills/pwn/plugins/repl/irc/SKILL.md +0 -47
- data/lib/pwn/plugins/repl/irc.rb +0 -153
- data/spec/lib/pwn/plugins/repl/irc_spec.rb +0 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1ca56931addf19f59b18ee2776ee84b0af0a75496bcf9bd9d8453b96b9b9eef2
|
|
4
|
+
data.tar.gz: b9310696c7ae7098d37dc3c8e46b1cd2214ab652a49ef75df281b34c472a738c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6ec57ded9a7213562cdaf4b4486d680387f8dea1ec1fbf6bfc47a2b4ed40e7c7782c40e3ab80a5164c308c5dae220442956b83cf2c0ccbddbbc2e398b1e6acf
|
|
7
|
+
data.tar.gz: 7c447c3b9e42779e4ca86038836719dad5b051a872f4bbad2bc704b54596a69644c56a92a6d877681045f3c7000cddb0a51aaa49e79be9ab1afc5de40b7fa8a2
|
data/.rubocop_todo.yml
CHANGED
|
@@ -6,13 +6,13 @@ toolsets; the JSON-Schema for each tool is what the model actually sees.
|
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
9
|
-
## Toolsets to tools (13 toolsets ·
|
|
9
|
+
## Toolsets to tools (13 toolsets · 88 tools)
|
|
10
10
|
|
|
11
11
|
| Toolset | Tools | Backed by |
|
|
12
12
|
|---|---|---|
|
|
13
13
|
| `http` | `http_proxy_start` · `http_proxy_stop` · `http_proxy_entries` · `http_proxy_rules` · `http_replay` | `PWN::Plugins::MitmProxy`: native HTTP HAR capture/replay; opaque CONNECT tunnels |
|
|
14
14
|
| `terminal` | `shell` | `Open3.capture3` on the host, after `PWN::AI::Agent::ToolGuard` |
|
|
15
|
-
| `pwn` | `pwn_eval` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard` |
|
|
15
|
+
| `pwn` | `pwn_eval` · `sbom_scan` | `TOPLEVEL_BINDING.eval` in the live REPL process, after `ToolGuard`; SBOM engines via `PWN::Plugins::SBOM` |
|
|
16
16
|
| `mcp` | `mcp` | `PWN::AI::MCP` session broker → any `PWN::AI::MCP::*` stdio client |
|
|
17
17
|
| `memory` | `memory_remember` · `memory_recall` · `memory_forget` · `memory_clear` · **`memory_lean`** | `PWN::Memory` → `~/.pwn/memory.json` |
|
|
18
18
|
| `skills` | `skills_consolidate` · **`skills_recall`** · `skill_list` · `skill_view` · `skill_create` · `skill_add_reference` · `skill_delete` · `skill_migrate_legacy` | `~/.pwn/skills/<name>/SKILL.md` (**[agentskills.io](https://agentskills.io) spec**; legacy flat `*.md` auto-migrated) |
|
|
@@ -70,7 +70,7 @@ PWN::AI::Agent::Registry.definitions(relevance: 'nmap sweep 10.0.0.0/8', top_k:
|
|
|
70
70
|
PWN::AI::Agent::Registry.rank(query: 'run a shell command') # inspect ranking
|
|
71
71
|
PWN::AI::Agent::Registry.preference_order # Env / DEFAULT_PREFERENCE
|
|
72
72
|
PWN::AI::Agent::Registry.toolsets # -> the 13 names above
|
|
73
|
-
PWN::AI::Agent::Registry.all.count # ->
|
|
73
|
+
PWN::AI::Agent::Registry.all.count # -> 88
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
Frontier engines leave `tool_router` off (unless you set it) and receive the
|
data/documentation/Diagrams.md
CHANGED
|
@@ -68,7 +68,7 @@ groups) so lines never criss-cross.
|
|
|
68
68
|
[source](diagrams/dot/ai-integration-tool-calling.dot) · doc: [AI Integration](AI-Integration.md)
|
|
69
69
|

|
|
70
70
|
|
|
71
|
-
### Agent Tool Registry (13 toolsets ·
|
|
71
|
+
### Agent Tool Registry (13 toolsets · 88 tools)
|
|
72
72
|
[source](diagrams/dot/agent-tool-registry.dot) · doc: [Agent Tool Registry](Agent-Tool-Registry.md)
|
|
73
73
|

|
|
74
74
|
|
|
@@ -29,7 +29,7 @@ hardware).
|
|
|
29
29
|
|---|---|
|
|
30
30
|
| `Loop` | plan → **TaskSummarizer** briefs → dispatch tool_calls → observe → repeat until `may_finalize?`. No iteration-budget abort |
|
|
31
31
|
| **`TaskSummarizer`** | Executive UX: every request gets an English task compass (`emit_plan!` · `about_to` as `task k/n`) - no statement/question/goal type |
|
|
32
|
-
| `Registry` | JSON-Schema function definitions grouped into 13 **toolsets** · **
|
|
32
|
+
| `Registry` | JSON-Schema function definitions grouped into 13 **toolsets** · **88 tools** · `CORE_TOOLS` = `DEFAULT_PREFERENCE` (`memory_recall` · `session_recall` · `skills_recall` · `pwn_eval` · `shell` · `mistakes_record` · `mistakes_resolve` · `learning_note_outcome` · `memory_remember`) |
|
|
33
33
|
| `Dispatch` / `Result` | execute a tool, capture stdout/value/error/duration |
|
|
34
34
|
| `PromptBuilder` | inject MEMORY / SKILLS / LEARNING / **KNOWN MISTAKES + FIXES** / METRICS / **POLICY** / EXTROSPECTION / RECENT TURNS |
|
|
35
35
|
| `Metrics` · `Learning` · `Reflect` · **`Policy`** | **introspection** - how well am I doing? (Policy is live Q / REINFORCE, advisory rank only) |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Plugin degradation and fallbacks
|
|
2
|
+
|
|
3
|
+
Each `PreflightChecker` health line links here. CI asserts every plugin in
|
|
4
|
+
`PLUGIN_DEPS` has an anchor and that documented fallbacks still exist.
|
|
5
|
+
|
|
6
|
+
## pwn-plugins-radare2
|
|
7
|
+
|
|
8
|
+
Required: `r2`. Fallback: `objdump` / `PWN::Plugins::REDB` binutils path.
|
|
9
|
+
|
|
10
|
+
## pwn-plugins-gdb
|
|
11
|
+
|
|
12
|
+
Required: `gdb`. Fallback: `PWN::Plugins::Debugger` still exposes `cyclic` helpers.
|
|
13
|
+
|
|
14
|
+
## pwn-plugins-nuclei
|
|
15
|
+
|
|
16
|
+
Required: `nuclei`. Fallback: `TransparentBrowser` + `pwn_eval`.
|
|
17
|
+
|
|
18
|
+
## pwn-plugins-sqlmap
|
|
19
|
+
|
|
20
|
+
Required: `sqlmap`. Fallback: `pwn_eval` HTTP clients.
|
|
21
|
+
|
|
22
|
+
## pwn-plugins-frida
|
|
23
|
+
|
|
24
|
+
Required: `frida`. Fallback: `Debugger` + `REDB`.
|
|
25
|
+
|
|
26
|
+
## pwn-plugins-aflplusplus
|
|
27
|
+
|
|
28
|
+
Required: `afl-fuzz`. Fallback: `PWN::Plugins::Fuzz.triage` on an existing crash dir.
|
|
29
|
+
|
|
30
|
+
## pwn-plugins-volatility
|
|
31
|
+
|
|
32
|
+
Required: `vol`. Fallback: `pwn_eval` + strings/REDB.
|
|
33
|
+
|
|
34
|
+
## pwn-plugins-nmapit
|
|
35
|
+
|
|
36
|
+
Required: `nmap`. Fallback: `Packet.tcp_connect_scan`.
|
|
37
|
+
|
|
38
|
+
## pwn-plugins-metasploit
|
|
39
|
+
|
|
40
|
+
Required: `msfconsole`. Fallback: `exploitdev`, `pwn_eval`, `PWN::Plugins::Handler`.
|
|
41
|
+
|
|
42
|
+
## pwn-plugins-burpsuite
|
|
43
|
+
|
|
44
|
+
Required: `burpsuite`. Fallback: `TransparentBrowser`, `nuclei`, `PWN::Plugins::MitmProxy`.
|
|
45
|
+
|
|
46
|
+
## pwn-plugins-zaproxy
|
|
47
|
+
|
|
48
|
+
Required: `zaproxy`. Fallback: `nuclei`, `TransparentBrowser`, `PWN::Plugins::MitmProxy`.
|
|
49
|
+
|
|
50
|
+
## pwn-plugins-packet
|
|
51
|
+
|
|
52
|
+
Required: `CAP_NET_RAW` **or** the capability broker helper. Install the helper
|
|
53
|
+
from `documentation/Capability-Broker-Sandbox.md` (setcap the helper binary, not
|
|
54
|
+
the Ruby interpreter). Fallback: `Packet.tcp_connect_scan` / `PWN::Plugins::Sock`.
|
|
55
|
+
|
|
56
|
+
## pwn-plugins-k8s
|
|
57
|
+
|
|
58
|
+
Required: `trivy` and docker.sock. Fallback: `sbom_scan` / `pwn_eval`.
|
|
59
|
+
|
|
60
|
+
## pwn-plugins-semgrep
|
|
61
|
+
|
|
62
|
+
Required: `semgrep`. Fallback: `sast` tools / `pwn_eval`.
|
|
63
|
+
|
|
64
|
+
## pwn-plugins-exploitdb
|
|
65
|
+
|
|
66
|
+
Required: `searchsploit`. Fallback: `intel_lookup`.
|
|
67
|
+
|
|
68
|
+
## pwn-plugins-recon
|
|
69
|
+
|
|
70
|
+
Required: `subfinder`, `httpx`. Fallback: `NmapIt.scan` + `Corpus.get`.
|
|
71
|
+
|
|
72
|
+
## pwn-plugins-credentialattack
|
|
73
|
+
|
|
74
|
+
Required: `hydra`, `john`, `hashcat`. Fallback: `pwn_eval` + `Corpus`.
|
data/documentation/Swarm.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Swarm - Native Multi-Agent Orchestration
|
|
2
2
|
|
|
3
|
-
`PWN::AI::Agent::Swarm`
|
|
4
|
-
|
|
5
|
-
`PWN::AI::Agent::Loop`. Each persona is a *full* tool-calling agent - Memory,
|
|
3
|
+
`PWN::AI::Agent::Swarm` is first-class multi-agent orchestration built
|
|
4
|
+
directly on `PWN::AI::Agent::Loop`. Each persona is a *full* tool-calling agent - Memory,
|
|
6
5
|
Skills, Learning, Metrics and Extrospection all apply - so the
|
|
7
6
|
self-improvement loop covers the whole swarm.
|
|
8
7
|
|
|
@@ -20,7 +20,7 @@ with a **tool-calling AI agent** on top that can run the same methods.
|
|
|
20
20
|
| `PWN::FFI::*` | **8** | Native DSP/RF backends: Volk · Liquid · FFTW · RTLSdr · HackRF · AdalmPluto · SoapySDR · Stdio |
|
|
21
21
|
| `PWN::AI::*` | **6** engines | OpenAI, Anthropic, Grok (OAuth device-flow), Gemini, Ollama, Open WebUI |
|
|
22
22
|
| `bin/pwn_*` + `pwn` | **54** | Headless CLI executables for CI/CD |
|
|
23
|
-
| Agent toolsets | **13** · **
|
|
23
|
+
| Agent toolsets | **13** · **88 tools** | terminal · pwn · memory · skills · sessions · learning · metrics · policy · extrospection · cron · swarm · reward · curriculum |
|
|
24
24
|
|
|
25
25
|
## Three ways to use it
|
|
26
26
|
|
data/documentation/pwn-REPL.md
CHANGED
|
@@ -26,7 +26,6 @@ commands.
|
|
|
26
26
|
| `pwn-ai-sessions` | `PWN::Sessions` | List/view/delete transcripts |
|
|
27
27
|
| `pwn-ai-cron` | `PWN::Cron` | List/run/toggle scheduled jobs |
|
|
28
28
|
| `pwn-ai-delegate` | `Agent::Swarm` | Send one request to a persona |
|
|
29
|
-
| `pwn-irc` | *(deprecated)* | Prints a pointer to `Agent::Swarm` - the IRC daemon transport is gone |
|
|
30
29
|
| `toggle-debug` | `Agent::Loop` / `Plugins::Log` | Stage log per operator request to `/tmp/pwn-ai-DEBUG-<SESSION_ID>-RN.log` |
|
|
31
30
|
| `toggle-trace` | `Agent::Loop` / `Plugins::Log` | Turns `toggle-debug` on with TracePoint; ENTER after each engine/tool step. Pry.config, not Env. Off turns both off. |
|
|
32
31
|
| `toggle-pwn-ai-speaks` | `Plugins::Voice` | TTS every final answer on/off |
|
|
@@ -54,6 +53,33 @@ Typed at the mesh TX prompt (leading `/`). `/` or `/menu` opens a boxed curses m
|
|
|
54
53
|
|
|
55
54
|
Typing `/` shows matching commands in the TX pane (ncurses hides Reline's dropdown). TAB still completes `/…` commands, channel names, transports, and device ids.
|
|
56
55
|
|
|
56
|
+
In COMPOSE, Up recalls older submitted lines and Down recalls newer ones.
|
|
57
|
+
Moving past the newest entry restores the draft and cursor position from before
|
|
58
|
+
history browsing. Recalled lines can be edited without changing saved entries.
|
|
59
|
+
History includes messages and slash commands, skips blank lines and consecutive
|
|
60
|
+
duplicates, and keeps the latest 100 entries in memory for the current pwn-mesh
|
|
61
|
+
session only; it is not written to disk.
|
|
62
|
+
|
|
63
|
+
### Encrypted DMs and key discovery
|
|
64
|
+
|
|
65
|
+
On serial, Bluetooth, or TCP, a DM checks the destination's public key in the
|
|
66
|
+
connected radio's NodeInfo records. If missing, pwn-mesh sends its own public
|
|
67
|
+
NodeInfo to that destination with a response requested and waits up to 15 seconds.
|
|
68
|
+
Only after obtaining the destination key does it submit the text with PKI
|
|
69
|
+
encryption explicitly required. Both radios must be reachable over the selected
|
|
70
|
+
channel; this does not verify a peer's identity outside Meshtastic's key exchange.
|
|
71
|
+
|
|
72
|
+
Discovery failure sends no DM text. The most recent failed attempt is retained
|
|
73
|
+
in session memory; bare `/msg` retries it using the current connection and active
|
|
74
|
+
channel. A new DM replaces that retained attempt, and exiting the process loses
|
|
75
|
+
it. Retention ends after transport submission, not a delivery acknowledgement;
|
|
76
|
+
later radio failures are displayed separately. There is no plaintext or
|
|
77
|
+
channel-PSK downgrade. Missing local public-key metadata requires a reconnect.
|
|
78
|
+
|
|
79
|
+
MQTT channel broadcasts remain supported, but PKI DMs are not implemented for
|
|
80
|
+
the broker transport. MQTT DM attempts remain unsent with an explicit error;
|
|
81
|
+
switch to serial, Bluetooth, or TCP and use `/msg` to retry.
|
|
82
|
+
|
|
57
83
|
## Multi-line input
|
|
58
84
|
|
|
59
85
|
`pwn-ai` and `pwn-asm` use a custom `PWNMultiLineInput` reader. Plain
|
|
@@ -101,7 +101,7 @@ $ pwn --ai "run bin/pwn_sast against ./src and push findings to DefectDojo"
|
|
|
101
101
|
|
|
102
102
|
## What the agent can call
|
|
103
103
|
|
|
104
|
-
13 toolsets · **
|
|
104
|
+
13 toolsets · **88 tools** - full table at
|
|
105
105
|
[Agent Tool Registry](Agent-Tool-Registry.md).
|
|
106
106
|
|
|
107
107
|
The two that matter most:
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser-exploitation
|
|
3
|
+
description: Use when attacking browsers. Proxy plus Debugger.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser exploitation
|
|
7
|
+
|
|
8
|
+
1. `PWN::Plugins::MitmProxy.start` and TransparentBrowser `proxy:`.
|
|
9
|
+
2. `replay` mutated requests; diff HAR entries.
|
|
10
|
+
3. Native crashes go through `PWN::Plugins::Debugger` and `REDB`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: firmware-unpack-emulate
|
|
3
|
+
description: Use when unpacking firmware. REDB on extracted bins.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Firmware unpack and emulate
|
|
7
|
+
|
|
8
|
+
1. Unpack with binwalk/firmware-mod-kit outside the radio path.
|
|
9
|
+
2. `PWN::Plugins::REDB.open` on extracted userland binaries.
|
|
10
|
+
3. Emulate with qemu user; debug via `PWN::Plugins::Debugger.launch`.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: heap-exploitation
|
|
3
|
+
description: Use when exploiting glibc heap. Debugger and REDB steps for tcache.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Heap exploitation (tcache / fastbin)
|
|
7
|
+
|
|
8
|
+
1. `PWN::Plugins::REDB.open(bin: path)` then `xrefs_to(sym: 'malloc')` and `xrefs_to(sym: 'free')`.
|
|
9
|
+
2. `PWN::Plugins::Debugger.launch(bin: path)` then `break(addr_or_sym: 'main')` and `run`.
|
|
10
|
+
3. Use `cyclic` / `cyclic_find` to locate overflow into tcache metadata (`tcache_perthread_struct`).
|
|
11
|
+
4. Confirm with `regs` and `read_mem` after `continue`. Write the proof via `Findings.record`.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kernel-pwn-triage
|
|
3
|
+
description: Use when triaging kernel bugs. Debugger and REDB first.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kernel pwn triage
|
|
7
|
+
|
|
8
|
+
1. `PWN::Plugins::REDB.open(bin: vmlinux)` then `funcs` / `xrefs_to`.
|
|
9
|
+
2. `PWN::Plugins::Debugger.attach(host: '127.0.0.1', port: 1234)` to a QEMU gdbstub (`-s`).
|
|
10
|
+
3. `break(addr_or_sym: 'commit_creds')`, `continue`, `regs`, `backtrace`.
|
|
11
|
+
4. Record findings with evidence paths; do not guess offsets.
|
|
@@ -12,7 +12,7 @@ metadata:
|
|
|
12
12
|
|
|
13
13
|
# PWN::AI::Agent::Swarm
|
|
14
14
|
|
|
15
|
-
Native multi-agent orchestration for pwn-ai.
|
|
15
|
+
Native multi-agent orchestration for pwn-ai. First-class sub-agents built on top of PWN::AI::Agent::Loop.run. Each persona is a full tool-calling agent — Memory, Skills, Learning, Metrics and Extrospection all apply — so the self-improvement loop covers the whole swarm. ~/.pwn/agents.yml # persona registry ~/.pwn/swarm/<swarm_id>/bus.jsonl # append-only message bus ~/.pwn/swarm/<swarm_id>/personas.json# persona -> PWN::Sessions id Cross-session / cross-process communication == another pwn-ai (or a PWN::Cron job) calling Swarm.ask/debate with the same swarm_id and reading the same bus.jsonl. No daemon required.
|
|
16
16
|
|
|
17
17
|
## When to use
|
|
18
18
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-ai-agent-tools-sbomscan
|
|
3
|
+
description: Drive PWN::Ai::Agent::Tools::SbomScan from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Ai::Agent::Tools::SbomScan
|
|
10
|
+
source: pwn/ai/agent/tools/sbom_scan.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Ai::Agent::Tools::SbomScan
|
|
14
|
+
|
|
15
|
+
Public API for PWN::Ai::Agent::Tools::SbomScan.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Ai::Agent::Tools::SbomScan` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/ai/agent/tools/sbom_scan.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Ai::Agent::Tools::SbomScan.help
|
|
31
|
+
PWN::Ai::Agent::Tools::SbomScan.help(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- _(no public class methods parsed)_
|
|
37
|
+
|
|
38
|
+
## Source
|
|
39
|
+
|
|
40
|
+
`pwn/ai/agent/tools/sbom_scan.rb`
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
`PWN::Ai::Agent::Tools::SbomScan.respond_to?(:help)` after the
|
|
45
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-corpus
|
|
3
|
+
description: Drive PWN::Corpus from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Corpus
|
|
10
|
+
source: pwn/corpus.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Corpus
|
|
14
|
+
|
|
15
|
+
Named wordlist and payload corpora under ~/.pwn/corpora.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Corpus` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/corpus.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Corpus.help
|
|
31
|
+
PWN::Corpus.get(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `get`
|
|
37
|
+
- `update`
|
|
38
|
+
- `authors`
|
|
39
|
+
- `help`
|
|
40
|
+
|
|
41
|
+
## References
|
|
42
|
+
|
|
43
|
+
- `references/urls.md` — URLs from source
|
|
44
|
+
|
|
45
|
+
## Source
|
|
46
|
+
|
|
47
|
+
`pwn/corpus.rb`
|
|
48
|
+
|
|
49
|
+
## Verification
|
|
50
|
+
|
|
51
|
+
`PWN::Corpus.respond_to?(:get)` after the
|
|
52
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-engagement
|
|
3
|
+
description: Drive PWN::Engagement from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Engagement
|
|
10
|
+
source: pwn/engagement.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Engagement
|
|
14
|
+
|
|
15
|
+
Engagement scope, host state, and vault refs under ~/.pwn/engagements.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Engagement` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/engagement.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Engagement.help
|
|
31
|
+
PWN::Engagement.open(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `open`
|
|
37
|
+
- `close`
|
|
38
|
+
- `status`
|
|
39
|
+
- `in_scope`
|
|
40
|
+
- `warn_unless_in_scope`
|
|
41
|
+
- `record_host`
|
|
42
|
+
- `hosts`
|
|
43
|
+
- `merge_scan`
|
|
44
|
+
- `authors`
|
|
45
|
+
- `help`
|
|
46
|
+
- `in_scope?`
|
|
47
|
+
|
|
48
|
+
## Source
|
|
49
|
+
|
|
50
|
+
`pwn/engagement.rb`
|
|
51
|
+
|
|
52
|
+
## Verification
|
|
53
|
+
|
|
54
|
+
`PWN::Engagement.respond_to?(:open)` after the
|
|
55
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-plugins-debugger
|
|
3
|
+
description: Drive PWN::Plugins::Debugger from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Plugins::Debugger
|
|
10
|
+
source: pwn/plugins/debugger.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Plugins::Debugger
|
|
14
|
+
|
|
15
|
+
Structured GDB/MI driver with a handle registry that survives pwn_eval.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Plugins::Debugger` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/plugins/debugger.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Plugins::Debugger.help
|
|
31
|
+
PWN::Plugins::Debugger.required_bins(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `required_bins`
|
|
37
|
+
- `launch`
|
|
38
|
+
- `attach`
|
|
39
|
+
- `run`
|
|
40
|
+
- `break`
|
|
41
|
+
- `continue`
|
|
42
|
+
- `step`
|
|
43
|
+
- `read_mem`
|
|
44
|
+
- `write_mem`
|
|
45
|
+
- `regs`
|
|
46
|
+
- `backtrace`
|
|
47
|
+
- `checksec`
|
|
48
|
+
- `cyclic`
|
|
49
|
+
- `cyclic_find`
|
|
50
|
+
- `to_pwntools_offsets`
|
|
51
|
+
- `close`
|
|
52
|
+
- `authors`
|
|
53
|
+
- `help`
|
|
54
|
+
|
|
55
|
+
## Source
|
|
56
|
+
|
|
57
|
+
`pwn/plugins/debugger.rb`
|
|
58
|
+
|
|
59
|
+
## Verification
|
|
60
|
+
|
|
61
|
+
`PWN::Plugins::Debugger.respond_to?(:required_bins)` after the
|
|
62
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-plugins-handler
|
|
3
|
+
description: Drive PWN::Plugins::Handler from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Plugins::Handler
|
|
10
|
+
source: pwn/plugins/handler.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Plugins::Handler
|
|
14
|
+
|
|
15
|
+
Payload generation and listener sessions without Metasploit.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Plugins::Handler` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/plugins/handler.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Plugins::Handler.help
|
|
31
|
+
PWN::Plugins::Handler.required_bins(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `required_bins`
|
|
37
|
+
- `generate`
|
|
38
|
+
- `listen`
|
|
39
|
+
- `accept`
|
|
40
|
+
- `interact`
|
|
41
|
+
- `stop`
|
|
42
|
+
- `authors`
|
|
43
|
+
- `help`
|
|
44
|
+
|
|
45
|
+
## Source
|
|
46
|
+
|
|
47
|
+
`pwn/plugins/handler.rb`
|
|
48
|
+
|
|
49
|
+
## Verification
|
|
50
|
+
|
|
51
|
+
`PWN::Plugins::Handler.respond_to?(:required_bins)` after the
|
|
52
|
+
module is loaded. Read the source for parameter names.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pwn-plugins-redb
|
|
3
|
+
description: Drive PWN::Plugins::REDB from pwn_eval.
|
|
4
|
+
license: MIT
|
|
5
|
+
allowed-tools: [pwn, pwn_eval]
|
|
6
|
+
metadata:
|
|
7
|
+
bundled: true
|
|
8
|
+
generated: true
|
|
9
|
+
module: PWN::Plugins::REDB
|
|
10
|
+
source: pwn/plugins/redb.rb
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# PWN::Plugins::REDB
|
|
14
|
+
|
|
15
|
+
Persistent per-binary analysis DB under ~/.pwn/redb.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
Call `PWN::Plugins::REDB` from `pwn_eval` when the task needs this module.
|
|
20
|
+
Do not reimplement it in shell.
|
|
21
|
+
|
|
22
|
+
## Methodologies
|
|
23
|
+
|
|
24
|
+
Generated from `pwn/plugins/redb.rb`. Prefer the public class methods below.
|
|
25
|
+
Class methods take `(opts = {})` and read `opts`.
|
|
26
|
+
|
|
27
|
+
## How to call
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
PWN::Plugins::REDB.help
|
|
31
|
+
PWN::Plugins::REDB.open(opts)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Public methods
|
|
35
|
+
|
|
36
|
+
- `open`
|
|
37
|
+
- `funcs`
|
|
38
|
+
- `xrefs_to`
|
|
39
|
+
- `strings`
|
|
40
|
+
- `decompile`
|
|
41
|
+
- `annotate`
|
|
42
|
+
- `authors`
|
|
43
|
+
- `help`
|
|
44
|
+
|
|
45
|
+
## Source
|
|
46
|
+
|
|
47
|
+
`pwn/plugins/redb.rb`
|
|
48
|
+
|
|
49
|
+
## Verification
|
|
50
|
+
|
|
51
|
+
`PWN::Plugins::REDB.respond_to?(:open)` after the
|
|
52
|
+
module is loaded. Read the source for parameter names.
|