pwn 0.5.617 → 0.5.620
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/Gemfile +2 -2
- data/README.md +101 -83
- data/bin/pwn_gqrx_scanner +25 -5
- data/documentation/AI-Integration.md +42 -26
- data/documentation/AWS.md +57 -0
- data/documentation/Agent-Tool-Registry.md +56 -0
- data/documentation/Banner.md +17 -0
- data/documentation/Blockchain.md +18 -0
- data/documentation/Bounty.md +21 -0
- data/documentation/BurpSuite.md +41 -16
- data/documentation/CLI-Drivers.md +58 -0
- data/documentation/Configuration.md +66 -0
- data/documentation/Contributing.md +33 -19
- data/documentation/Cron.md +47 -0
- data/documentation/Diagrams.md +6 -2
- data/documentation/Drivers.md +43 -16
- data/documentation/Extrospection.md +73 -0
- data/documentation/FFI.md +14 -0
- data/documentation/Fuzzing.md +36 -0
- data/documentation/Hardware.md +40 -0
- data/documentation/Home.md +5 -4
- data/documentation/How-PWN-Works.md +7 -4
- data/documentation/Metasploit.md +34 -0
- data/documentation/Mistakes.md +96 -0
- data/documentation/NmapIt.md +18 -12
- data/documentation/PWN.png +0 -0
- data/documentation/PWN_Contributors_and_Users.png +0 -0
- data/documentation/Persistence.md +40 -0
- data/documentation/Plugins.md +97 -47
- data/documentation/Reporting.md +25 -18
- data/documentation/SAST.md +39 -22
- data/documentation/SDR.md +58 -0
- data/documentation/Sessions.md +39 -0
- data/documentation/Skills-Memory-Learning.md +59 -29
- data/documentation/Swarm.md +71 -0
- data/documentation/Transparent-Browser.md +26 -22
- data/documentation/Troubleshooting.md +44 -25
- data/documentation/WWW.md +32 -0
- data/documentation/diagrams/agent-tool-registry.svg +286 -0
- data/documentation/diagrams/aws-cloud-security.svg +166 -0
- data/documentation/diagrams/cron-scheduling.svg +148 -0
- data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
- data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
- data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
- data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
- data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
- data/documentation/diagrams/dot/persistence-filesystem.dot +30 -0
- data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
- data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
- data/documentation/diagrams/extrospection-world-awareness.svg +203 -0
- data/documentation/diagrams/hardware-hacking.svg +163 -0
- data/documentation/diagrams/memory-skills-detailed.svg +146 -97
- data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
- data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
- data/documentation/diagrams/persistence-filesystem.svg +189 -0
- data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
- data/documentation/diagrams/sdr-radio-flow.svg +166 -0
- data/documentation/diagrams/swarm-multi-agent.svg +225 -0
- data/documentation/fax-spectrogram.png +0 -0
- data/documentation/fax-waveform.png +0 -0
- data/documentation/pwn-REPL.md +40 -24
- data/documentation/pwn-ai-Agent.md +72 -30
- data/documentation/pwn_android_war_dialer_session.png +0 -0
- data/documentation/pwn_install.png +0 -0
- data/documentation/pwn_wallpaper.jpg +0 -0
- data/documentation/ringing-spectrogram.png +0 -0
- data/documentation/ringing-waveform.png +0 -0
- data/lib/pwn/ai/agent/extrospection.rb +65 -6
- data/lib/pwn/ai/agent/learning.rb +67 -7
- data/lib/pwn/ai/agent/loop.rb +72 -6
- data/lib/pwn/ai/agent/mistakes.rb +369 -0
- data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
- data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
- data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
- data/lib/pwn/ai/agent.rb +1 -0
- data/lib/pwn/plugins/jira_data_center.rb +2 -2
- data/lib/pwn/sdr/decoder/adsb.rb +101 -0
- data/lib/pwn/sdr/decoder/apt.rb +75 -0
- data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
- data/lib/pwn/sdr/decoder/dect.rb +84 -0
- data/lib/pwn/sdr/decoder/gps.rb +83 -0
- data/lib/pwn/sdr/decoder/gsm.rb +50 -29
- data/lib/pwn/sdr/decoder/iridium.rb +81 -0
- data/lib/pwn/sdr/decoder/lora.rb +87 -0
- data/lib/pwn/sdr/decoder/lte.rb +88 -0
- data/lib/pwn/sdr/decoder/morse.rb +64 -0
- data/lib/pwn/sdr/decoder/p25.rb +71 -0
- data/lib/pwn/sdr/decoder/pager.rb +77 -0
- data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
- data/lib/pwn/sdr/decoder/rfid.rb +88 -0
- data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
- data/lib/pwn/sdr/decoder/rtty.rb +66 -0
- data/lib/pwn/sdr/decoder/wifi.rb +98 -0
- data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
- data/lib/pwn/sdr/decoder.rb +67 -7
- data/lib/pwn/sdr/frequency_allocation.rb +82 -41
- data/lib/pwn/sdr/gqrx.rb +186 -95
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
- data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
- data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
- data/third_party/pwn_rdoc.jsonl +114 -8
- metadata +81 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d7b52a560de426b6b9c99fa2716b8e93a948e66088e0e1ae78d28f8633417cea
|
|
4
|
+
data.tar.gz: f94969b76a9ad4b856a9b5db25647f41d57f600f0c331ebde29c24b35ab59cd1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dcd6287345b8f7230aeeeddc8a5d8de97d4000ae6bddecd77b4b2957f8ddf480de5c9ba8ba6a96a9fcf77f64a30f0b3d9a41219ad15512deab556c5b7e60c360
|
|
7
|
+
data.tar.gz: 92b3f2b90679984a47ed9cff3e1440100803e4220fc6f78eac386bd5cd125f24acbdd7b44504c20f783ba653895726495a69b7ce5d9cd5fd883a98cb67a11ef9
|
data/Gemfile
CHANGED
|
@@ -50,7 +50,7 @@ gem 'libusb', '0.7.2'
|
|
|
50
50
|
gem 'luhn', '3.0.0'
|
|
51
51
|
gem 'mail', '2.9.1'
|
|
52
52
|
gem 'mcp', '0.23.0'
|
|
53
|
-
gem 'meshtastic', '0.0.
|
|
53
|
+
gem 'meshtastic', '0.0.169'
|
|
54
54
|
gem 'metasm', '1.0.6'
|
|
55
55
|
gem 'mongo', '2.24.1'
|
|
56
56
|
gem 'msfrpc-client', '1.1.2'
|
|
@@ -81,7 +81,7 @@ gem 'rmagick', '7.0.5'
|
|
|
81
81
|
gem 'rqrcode', '3.2.0'
|
|
82
82
|
gem 'rspec', '3.13.2'
|
|
83
83
|
gem 'rtesseract', '3.1.4'
|
|
84
|
-
gem 'rubocop', '1.88.
|
|
84
|
+
gem 'rubocop', '1.88.2'
|
|
85
85
|
gem 'rubocop-rake', '0.7.1'
|
|
86
86
|
gem 'rubocop-rspec', '3.10.2'
|
|
87
87
|
gem 'ruby-audio', '1.6.1'
|
data/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* [What is PWN](#what-is-pwn)
|
|
7
7
|
* [Why PWN](#why-pwn)
|
|
8
8
|
* [How PWN Works](#how-pwn-works)
|
|
9
|
-
- [
|
|
9
|
+
- [Documentation](#documentation)
|
|
10
10
|
- [Installation](#installation)
|
|
11
11
|
- [General Usage](#general-usage)
|
|
12
12
|
- [Call to Arms](#call-to-arms)
|
|
@@ -14,79 +14,92 @@
|
|
|
14
14
|
- [Keep Us Caffeinated](#keep-us-caffeinated)
|
|
15
15
|
- [0x004D65726368](#0x004d65726368)
|
|
16
16
|
|
|
17
|
+
---
|
|
18
|
+
|
|
17
19
|
### **Intro** ###
|
|
18
20
|
|
|
19
21
|
#### **What is PWN** ####
|
|
20
22
|
|
|
21
|
-
PWN (
|
|
23
|
+
PWN (pronounced /pōn/ — *pone*) is an open-source **offensive-security
|
|
24
|
+
automation framework** and **continuous-security-integration** platform.
|
|
25
|
+
It gives security researchers, red teamers, penetration testers and
|
|
26
|
+
vulnerability researchers a single, scriptable Ruby surface over the entire
|
|
27
|
+
offensive toolchain — from OSINT and network discovery, through web / cloud /
|
|
28
|
+
hardware / radio exploitation, to reporting and disclosure — and puts a
|
|
29
|
+
**self-improving, tool-calling, multi-agent AI** on top of it.
|
|
22
30
|
|
|
23
|
-
|
|
31
|
+
**In numbers:** 66 `PWN::Plugins` · 48 `PWN::SAST` rules · 90 `PWN::AWS`
|
|
32
|
+
service wrappers · 21 `PWN::WWW` site drivers · 52 `bin/pwn_*` CLI drivers ·
|
|
33
|
+
5 LLM engines · 10 agent toolsets · 45+ LLM-callable tools.
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
Full page: [What is PWN](documentation/What-is-PWN.md)
|
|
26
36
|
|
|
27
37
|
#### **Why PWN** ####
|
|
28
38
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
Offensive security is a *toolchain problem*. PWN's bet is that the right
|
|
40
|
+
abstraction is **plain Ruby methods with a uniform `opts = {}` signature**,
|
|
41
|
+
exposed simultaneously to a human in a REPL, an LLM in a tool-calling loop, a
|
|
42
|
+
shell script in CI, and a cron job at 3 am — all open-source and auditable,
|
|
43
|
+
which matters when the caller is autonomous.
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
Full page: [Why PWN](documentation/Why-PWN.md)
|
|
34
46
|
|
|
35
47
|
#### **How PWN Works** ####
|
|
36
48
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
The core of pwn-ai is a closed feedback loop for autonomous improvement:
|
|
49
|
+
Five layers, edges only ever go down:
|
|
40
50
|
|
|
41
|
-

|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
The AI layer closes a **self-improvement loop** on every turn — Metrics +
|
|
54
|
+
Learning + **Mistakes** (introspection / negative feedback) joined with
|
|
55
|
+
Snapshot + Drift + Intel + RF (extrospection) via `extro_correlate`, so the
|
|
56
|
+
agent knows whether a failure was *its* fault or *the world* changed —
|
|
57
|
+
**and does not repeat the same mistake twice**:
|
|
44
58
|
|
|
59
|
+

|
|
45
60
|
|
|
46
|
-
|
|
61
|
+
Failures are fingerprinted cross-session (`~/.pwn/mistakes.json`), tagged
|
|
62
|
+
`[REPEATING]` / `[REGRESSED]`, and their **fix** is handed straight back inline
|
|
63
|
+
on the next recurrence:
|
|
47
64
|
|
|
48
|
-
|
|
49
|
-
- `PWN::AI::*` — Multi-provider LLM clients (OpenAI, Anthropic, Gemini, [Grok OAuth device flow](documentation/AI-Integration.md), Ollama) and autonomous `PWN::AI::Agent` with tool-calling harness (`pwn_eval` for full PWN namespace, shell execution, skills, memory recall/remember, learning loops).
|
|
50
|
-
- `PWN::SAST` — Static application security testing and test case generation. See [SAST Wiki](documentation/SAST.md).
|
|
51
|
-
- `PWN::Reports` — Automated reporting from scans, agents, and findings. See [Reporting](documentation/Reporting.md).
|
|
52
|
-
- `PWN::Memory / Sessions / Cron / Skills / Config` — Persistent facts, conversation sessions, scheduled autonomous tasks, reusable markdown skills (distillable from successful workflows), and environment management. See [Skills, Memory & Learning](documentation/Skills-Memory-Learning.md).
|
|
53
|
-
- `PWN::Driver` — Framework for building custom security automation packages ("drivers"). See [Drivers](documentation/Drivers.md).
|
|
65
|
+

|
|
54
66
|
|
|
55
|
-
|
|
67
|
+
And **Swarm** runs multiple personas — each a full tool-calling agent,
|
|
68
|
+
optionally on a *different* LLM engine — over a shared append-only bus:
|
|
56
69
|
|
|
57
|
-
|
|
58
|
-
- Activates an autonomous AI agent TUI with multi-line input support (use SHIFT+ENTER to insert newlines; ENTER submits the full prompt).
|
|
59
|
-
- Full awareness of PWN plugins, skills (`~/.pwn/skills`), memory, sessions, and cron.
|
|
60
|
-
- Leverages LLM tool-calling to execute PWN methods (e.g., `PWN::Plugins::BurpSuite`, `PWN::Plugins::NmapIt`, `PWN::Plugins::TransparentBrowser`, `PWN::SAST`, `PWN::Reports`), shell commands, and orchestrate end-to-end tasks.
|
|
61
|
-
- Supports self-improvement via `PWN::AI::Agent::Learning` / Metrics (records per-tool success/duration, distills skills from outcomes).
|
|
62
|
-
- Example instruction: "Use NmapIt to scan target.example.com for open ports, then TransparentBrowser to spider the web app, run SAST analysis if source is available, proxy via BurpSuite, and generate a vulnerability report with PWN::Reports."
|
|
63
|
-
- Additional REPL commands: `pwn-asm` (assembly prototyping with multiline), `pwn-ai-memory`, `pwn-ai-sessions`, `pwn-ai-cron`, `pwn-ai-delegate`, `welcome-banner`, etc.
|
|
64
|
-
- Easily prototype and roll out custom "drivers" (see `/opt/pwn/bin/` examples).
|
|
70
|
+

|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
Full pages: [How PWN Works](documentation/How-PWN-Works.md) ·
|
|
73
|
+
[All 27 Data-Flow Diagrams](documentation/Diagrams.md)
|
|
67
74
|
|
|
68
|
-
|
|
75
|
+
---
|
|
69
76
|
|
|
70
|
-
|
|
77
|
+
### **Documentation** ###
|
|
71
78
|
|
|
72
|
-
|
|
79
|
+
The complete wiki lives in this repo at **[`documentation/Home.md`](documentation/Home.md)**.
|
|
73
80
|
|
|
74
|
-
|
|
81
|
+
| Start Here | Entry Points | AI Subsystem | Capabilities |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| [What is PWN](documentation/What-is-PWN.md) | [`pwn` REPL](documentation/pwn-REPL.md) | [AI / LLM Integration](documentation/AI-Integration.md) | [Plugins (66)](documentation/Plugins.md) |
|
|
84
|
+
| [Why PWN](documentation/Why-PWN.md) | [`pwn-ai` Agent](documentation/pwn-ai-Agent.md) | [Agent Tool Registry](documentation/Agent-Tool-Registry.md) | [SAST (48)](documentation/SAST.md) |
|
|
85
|
+
| [How PWN Works](documentation/How-PWN-Works.md) | [CLI Drivers (52)](documentation/CLI-Drivers.md) | [Memory · Skills · Learning](documentation/Skills-Memory-Learning.md) | [AWS (90)](documentation/AWS.md) |
|
|
86
|
+
| [Installation](documentation/Installation.md) | [Build a Driver](documentation/Drivers.md) | [Mistakes (neg-feedback)](documentation/Mistakes.md) | [WWW (21)](documentation/WWW.md) |
|
|
87
|
+
| [General Usage](documentation/General-PWN-Usage.md) | | [Extrospection](documentation/Extrospection.md) | [SDR / Radio](documentation/SDR.md) |
|
|
88
|
+
| [Configuration](documentation/Configuration.md) | | [Swarm (multi-agent)](documentation/Swarm.md) | [Hardware](documentation/Hardware.md) |
|
|
89
|
+
| [Configuration](documentation/Configuration.md) | | [Sessions](documentation/Sessions.md) · [Cron](documentation/Cron.md) | [Reports](documentation/Reporting.md) |
|
|
90
|
+
| [`~/.pwn/` Persistence](documentation/Persistence.md) | | | [BurpSuite](documentation/BurpSuite.md) · [NmapIt](documentation/NmapIt.md) |
|
|
91
|
+
| **[All Diagrams](documentation/Diagrams.md)** | | | [Metasploit](documentation/Metasploit.md) · [Fuzzing](documentation/Fuzzing.md) |
|
|
92
|
+
| [Troubleshooting](documentation/Troubleshooting.md) | | | [Hardware](documentation/Hardware.md) · [Blockchain](documentation/Blockchain.md) |
|
|
93
|
+
| [Contributing](documentation/Contributing.md) | | | [Bounty](documentation/Bounty.md) · [FFI](documentation/FFI.md) · [Banner](documentation/Banner.md) |
|
|
75
94
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- [Installation](documentation/Installation.md)
|
|
79
|
-
- [pwn-ai Agent](documentation/pwn-ai-Agent.md)
|
|
80
|
-
- [Plugins](documentation/Plugins.md)
|
|
81
|
-
- [AI Integration](documentation/AI-Integration.md)
|
|
82
|
-
- [Troubleshooting](documentation/Troubleshooting.md)
|
|
83
|
-
- ...and many more
|
|
95
|
+
Rebuild every SVG from its Graphviz source:
|
|
96
|
+
`cd documentation/diagrams && ./build.sh`
|
|
84
97
|
|
|
85
|
-
|
|
98
|
+
---
|
|
86
99
|
|
|
87
100
|
### **Installation** ###
|
|
88
101
|
|
|
89
|
-
Tested on Debian-
|
|
102
|
+
Tested on Debian-based Linux & macOS, Ruby via RVM.
|
|
90
103
|
|
|
91
104
|
```
|
|
92
105
|
$ cd /opt
|
|
@@ -95,20 +108,23 @@ $ cd /opt/pwn
|
|
|
95
108
|
$ ./install.sh
|
|
96
109
|
$ ./install.sh ruby-gem
|
|
97
110
|
$ pwn
|
|
98
|
-
pwn[v0.5.
|
|
111
|
+
pwn[v0.5.616]:001 >>> PWN.help
|
|
99
112
|
```
|
|
100
113
|
|
|
101
114
|
[](https://youtu.be/G7iLUY4FzsI)
|
|
102
115
|
|
|
103
|
-
|
|
116
|
+
Full page: [Installation](documentation/Installation.md) ·
|
|
117
|
+
[Configuration](documentation/Configuration.md)
|
|
104
118
|
|
|
105
|
-
|
|
119
|
+
---
|
|
106
120
|
|
|
107
|
-
|
|
121
|
+
### **General Usage** ###
|
|
108
122
|
|
|
109
|
-
|
|
123
|
+
[General Usage Quick-Start](https://github.com/0dayinc/pwn/wiki/General-PWN-Usage) ·
|
|
124
|
+
local: [General PWN Usage](documentation/General-PWN-Usage.md)
|
|
110
125
|
|
|
111
|
-
|
|
126
|
+
Update PWN frequently — new plugins, agent tools, skills and zero-day tooling
|
|
127
|
+
land regularly:
|
|
112
128
|
|
|
113
129
|
```
|
|
114
130
|
$ rvm list gemsets
|
|
@@ -116,70 +132,72 @@ $ rvm use ruby-4.0.5@pwn
|
|
|
116
132
|
$ gem uninstall --all --executables pwn
|
|
117
133
|
$ gem install --verbose pwn
|
|
118
134
|
$ pwn
|
|
119
|
-
pwn[v0.5.
|
|
135
|
+
pwn[v0.5.616]:001 >>> PWN.help
|
|
120
136
|
```
|
|
121
137
|
|
|
122
|
-
If using a multi-user install
|
|
138
|
+
If using a multi-user RVM install:
|
|
123
139
|
|
|
124
140
|
```
|
|
125
|
-
$ rvm list gemsets
|
|
126
141
|
$ rvm use ruby-4.0.5@pwn
|
|
127
142
|
$ rvmsudo gem uninstall --all --executables pwn
|
|
128
143
|
$ rvmsudo gem install --verbose pwn
|
|
129
|
-
$ pwn
|
|
130
|
-
pwn[v0.5.617]:001 >>> PWN.help
|
|
131
144
|
```
|
|
132
145
|
|
|
133
|
-
**Inside the pwn REPL
|
|
134
|
-
- Full access to every PWN
|
|
135
|
-
- `
|
|
136
|
-
- `pwn-ai`
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
[*] pwn-ai agent TUI activated...
|
|
141
|
-
> Perform active scan of https://target.example.com using preferred tooling, then analyze findings with PWN modules and produce a report.
|
|
142
|
-
```
|
|
143
|
-
- Other REPL helpers: `pwn-asm`, memory/session/cron management commands, etc.
|
|
144
|
-
- Exit AI mode with `back`; use full Ruby/PWN expressions at any time.
|
|
145
|
-
|
|
146
|
-
**Headless / CI-CD one-shot (`pwn --ai`):**
|
|
147
|
-
Skip the TUI entirely and submit a single pwn-ai request from the shell — ideal for quick lookups, scripting, or CI/CD pipelines. The final answer is written to STDOUT (pipeable); live tool-call activity streams to STDERR.
|
|
146
|
+
**Inside the `pwn` REPL:**
|
|
147
|
+
- Full access to every `PWN::` module.
|
|
148
|
+
- `pwn-ai` — launch the autonomous agent TUI (SHIFT+ENTER newline, ENTER submit).
|
|
149
|
+
- `pwn-asm`, `pwn-ai-memory`, `pwn-ai-sessions`, `pwn-ai-cron`, `pwn-ai-delegate`.
|
|
150
|
+
|
|
151
|
+
**Headless / CI one-shot (`pwn --ai`):**
|
|
152
|
+
|
|
148
153
|
```
|
|
149
154
|
$ pwn --ai 'What ports are listening on this host?'
|
|
150
155
|
$ echo "$LONG_PROMPT" | pwn --ai -
|
|
151
156
|
$ pwn -Y ./ci/pwn.yaml --ai 'Run pwn_sast against ./src and summarise HIGH findings' > findings.txt
|
|
152
157
|
```
|
|
153
158
|
|
|
154
|
-
PWN periodically upgrades to the latest
|
|
159
|
+
PWN periodically upgrades to the latest Ruby (`/opt/pwn/.ruby-version`).
|
|
160
|
+
Easiest upgrade of Ruby + pwn from a previous install:
|
|
155
161
|
|
|
156
162
|
```
|
|
157
163
|
$ /opt/pwn/vagrant/provisioners/pwn.sh
|
|
158
164
|
```
|
|
159
165
|
|
|
160
|
-
|
|
166
|
+
---
|
|
161
167
|
|
|
162
168
|
### **Call to Arms** ###
|
|
163
169
|
|
|
164
|
-
Contributions that expand PWN's offensive capabilities are welcome. If you can
|
|
170
|
+
Contributions that expand PWN's offensive capabilities are welcome. If you can
|
|
171
|
+
provide access to additional commercial LLMs, security scanners, or bounty
|
|
172
|
+
platforms — or wish to contribute plugins, AI skills, or exploit modules —
|
|
173
|
+
please [email us](mailto:support@0dayinc.com). See
|
|
174
|
+
[CONTRIBUTING.md](https://github.com/0dayInc/pwn/blob/master/CONTRIBUTING.md)
|
|
175
|
+
and the local [Contributing](documentation/Contributing.md) page.
|
|
165
176
|
|
|
166
|
-
|
|
177
|
+
---
|
|
167
178
|
|
|
168
179
|
### **Module Documentation** ###
|
|
169
180
|
|
|
170
|
-
**Primary
|
|
181
|
+
**Primary:** [`documentation/Home.md`](documentation/Home.md) — the full local
|
|
182
|
+
wiki with 30+ pages and 26 SVG data-flow diagrams.
|
|
171
183
|
|
|
172
|
-
|
|
184
|
+
**API reference:** [rubydoc.info/gems/pwn](https://www.rubydoc.info/gems/pwn),
|
|
185
|
+
or in-REPL: `PWN::Plugins::BurpSuite.help`, `show-source`, `ls`.
|
|
173
186
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
-
|
|
179
|
-
|
|
187
|
+
Highlights:
|
|
188
|
+
[Plugins](documentation/Plugins.md) ·
|
|
189
|
+
[BurpSuite](documentation/BurpSuite.md) ·
|
|
190
|
+
[Transparent-Browser](documentation/Transparent-Browser.md) ·
|
|
191
|
+
[pwn-ai Agent](documentation/pwn-ai-Agent.md) ·
|
|
192
|
+
[Swarm](documentation/Swarm.md) ·
|
|
193
|
+
[Extrospection](documentation/Extrospection.md) ·
|
|
194
|
+
[SAST](documentation/SAST.md) ·
|
|
195
|
+
[AI Integration](documentation/AI-Integration.md)
|
|
180
196
|
|
|
181
|
-
I hope you enjoy PWN and remember
|
|
197
|
+
I hope you enjoy PWN — and remember: **always have permission** before any
|
|
198
|
+
security testing. Now go pwn all the things (responsibly)!
|
|
182
199
|
|
|
200
|
+
---
|
|
183
201
|
|
|
184
202
|
### **Keep Us Caffeinated** ###
|
|
185
203
|
If you've found this project useful and you're interested in supporting our efforts, we invite you to take a brief moment to keep us caffeinated:
|
data/bin/pwn_gqrx_scanner
CHANGED
|
@@ -76,7 +76,7 @@ PWN::Driver::Parser.new do |options|
|
|
|
76
76
|
opts[:fft_scan] = f
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
options.on('
|
|
79
|
+
options.on('--sample-rate=RATE', '<Optional --fft-scan - Visible span/sample_rate in Hz (default 1_000_000). NOTE: no short flag; -S is --strength-lock>') do |s|
|
|
80
80
|
opts[:sample_rate] = s
|
|
81
81
|
end
|
|
82
82
|
|
|
@@ -84,11 +84,11 @@ PWN::Driver::Parser.new do |options|
|
|
|
84
84
|
opts[:nfft] = n
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
options.on('
|
|
87
|
+
options.on('--avg=INT', '<Optional --fft-scan - FFT averages (default 8). NOTE: no short flag; -A is --audio-gain>') do |a|
|
|
88
88
|
opts[:avg] = a
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
options.on('-CSEC', '--capture-secs=SEC', '<Optional --fft-scan - Capture seconds per chunk (default 0.
|
|
91
|
+
options.on('-CSEC', '--capture-secs=SEC', '<Optional --fft-scan - Capture seconds per chunk (default 0.10)>') do |c|
|
|
92
92
|
opts[:capture_secs] = c
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -99,6 +99,14 @@ PWN::Driver::Parser.new do |options|
|
|
|
99
99
|
options.on('-ODB', '--strength-offset-db=FLOAT', '<Optional - Power offset in dB (default 0.0)>') do |o|
|
|
100
100
|
opts[:strength_offset_db] = o
|
|
101
101
|
end
|
|
102
|
+
|
|
103
|
+
options.on('--min-snr-db=FLOAT', '<Optional --fft-scan - Minimum SNR (dB above per-chunk noise floor) to report a signal (default 12.0)>') do |m|
|
|
104
|
+
opts[:min_snr_db] = m
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
options.on('--min-bw-ratio=FLOAT', '<Optional --fft-scan - Reject FFT peaks narrower than RATIO * band-plan bandwidth as spurs (default 0.30)>') do |r|
|
|
108
|
+
opts[:min_bw_ratio] = r
|
|
109
|
+
end
|
|
102
110
|
end.parse!
|
|
103
111
|
|
|
104
112
|
begin
|
|
@@ -178,13 +186,17 @@ begin
|
|
|
178
186
|
sample_rate = sample_rate.to_i
|
|
179
187
|
nfft = opts[:nfft] || 2048
|
|
180
188
|
nfft = nfft.to_i
|
|
181
|
-
avgv = opts[:avg] ||
|
|
189
|
+
avgv = opts[:avg] || 8
|
|
182
190
|
avgv = avgv.to_i
|
|
183
|
-
capture_secs = opts[:capture_secs] || 0.
|
|
191
|
+
capture_secs = opts[:capture_secs] || 0.10
|
|
184
192
|
capture_secs = capture_secs.to_f
|
|
185
193
|
keep_spectrum = opts[:keep_spectrum] ? true : false
|
|
186
194
|
strength_offset_db = opts[:strength_offset_db]
|
|
187
195
|
strength_offset_db = strength_offset_db.to_f unless strength_offset_db.nil?
|
|
196
|
+
min_snr_db = opts[:min_snr_db]
|
|
197
|
+
min_snr_db = min_snr_db.to_f unless min_snr_db.nil?
|
|
198
|
+
min_bw_ratio = opts[:min_bw_ratio]
|
|
199
|
+
min_bw_ratio = min_bw_ratio.to_f unless min_bw_ratio.nil?
|
|
188
200
|
|
|
189
201
|
if fft_scan
|
|
190
202
|
puts '[*] --fft-scan requested: using fast FFT panoramic mode (#fast_scan_range)'
|
|
@@ -198,6 +210,14 @@ begin
|
|
|
198
210
|
strength_lock: strength_lock,
|
|
199
211
|
keep_spectrum: keep_spectrum,
|
|
200
212
|
strength_offset_db: strength_offset_db,
|
|
213
|
+
min_snr_db: min_snr_db,
|
|
214
|
+
precision: precision,
|
|
215
|
+
min_bw_ratio: min_bw_ratio,
|
|
216
|
+
demodulator_mode: demodulator_mode,
|
|
217
|
+
bandwidth: bandwidth,
|
|
218
|
+
squelch: squelch,
|
|
219
|
+
decoder: decoder,
|
|
220
|
+
location: location,
|
|
201
221
|
scan_log: scan_log
|
|
202
222
|
)
|
|
203
223
|
puts "FFT Scan complete: #{fast_resp[:total]} signals found."
|
|
@@ -1,36 +1,52 @@
|
|
|
1
|
-
# AI
|
|
1
|
+
# AI / LLM Integration — `PWN::AI`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
One agent loop, five interchangeable engines. Swap providers by changing one
|
|
4
|
+
line in `~/.pwn/config.yml`; the tool-calling contract is normalised so the
|
|
5
|
+
agent code never cares which model is behind it.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+

|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
- Anthropic
|
|
9
|
-
- Google Gemini
|
|
10
|
-
- xAI Grok (full OAuth device flow support, public client)
|
|
11
|
-
- Ollama (local)
|
|
12
|
-
- Others via extensible client design
|
|
9
|
+
## Supported engines
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
| Engine | Client | Auth | Notes |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `openai` | `PWN::AI::OpenAI` | `key:` | function-calling native |
|
|
14
|
+
| `anthropic` | `PWN::AI::Anthropic` | `key:` | tool-use native |
|
|
15
|
+
| `grok` | `PWN::AI::Grok` | `key:` **or** `oauth: true` | OAuth = RFC-8628 device-code flow using xAI's public Grok-CLI client id (no secret) — see skill `xai_grok_oauth_device_flow` |
|
|
16
|
+
| `gemini` | `PWN::AI::Gemini` | `key:` | function-calling native |
|
|
17
|
+
| `ollama` | `PWN::AI::Ollama` | none | local, `base_url:` + `model:` |
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
- `PWN::AI::Agent` — the autonomous tool-calling harness
|
|
18
|
-
- `pwn-ai` command inside REPL launches the TUI
|
|
19
|
+
## Selecting an engine
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
```yaml
|
|
22
|
+
# ~/.pwn/config.yml
|
|
23
|
+
ai:
|
|
24
|
+
engine: grok
|
|
25
|
+
grok:
|
|
26
|
+
oauth: true # first run opens https://accounts.x.ai/… device page
|
|
27
|
+
```
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- memory (recall/remember)
|
|
27
|
-
- learning & metrics
|
|
29
|
+
```ruby
|
|
30
|
+
# at runtime
|
|
31
|
+
PWN::Env[:ai][:engine] = :ollama
|
|
32
|
+
```
|
|
28
33
|
|
|
29
|
-
|
|
34
|
+
## Direct client use (no agent)
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
```ruby
|
|
37
|
+
resp = PWN::AI::Anthropic.chat(
|
|
38
|
+
messages: [{ role: 'user', content: 'Explain CVE-2024-1234 in one line' }]
|
|
39
|
+
)
|
|
40
|
+
puts resp[:content]
|
|
41
|
+
```
|
|
35
42
|
|
|
36
|
-
|
|
43
|
+
## Model diversity in Swarm
|
|
44
|
+
|
|
45
|
+
Because each persona in [`agents.yml`](Swarm.md) can override `engine:`, an
|
|
46
|
+
`agent_debate` can literally pit Claude against Grok against a local Llama —
|
|
47
|
+
real antagonism, not one model role-playing three voices.
|
|
48
|
+
|
|
49
|
+
**See also:** [pwn-ai Agent](pwn-ai-Agent.md) ·
|
|
50
|
+
[Agent Tool Registry](Agent-Tool-Registry.md) · [Swarm](Swarm.md)
|
|
51
|
+
|
|
52
|
+
[← Home](Home.md)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# `PWN::AWS` — Cloud Security (90 service wrappers)
|
|
2
|
+
|
|
3
|
+
One thin module per AWS service, each wrapping the official `aws-sdk-*` gem
|
|
4
|
+
with the PWN `opts = {}` convention so they compose in the REPL and in
|
|
5
|
+
`pwn_eval`.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Credentials
|
|
10
|
+
|
|
11
|
+
Standard AWS SDK chain: `~/.aws/credentials` profile, env vars
|
|
12
|
+
(`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` / `AWS_SESSION_TOKEN`), or
|
|
13
|
+
instance profile. Optionally pin in `~/.pwn/config.yml` under `aws:`.
|
|
14
|
+
|
|
15
|
+
## Quick enumeration
|
|
16
|
+
|
|
17
|
+
```ruby
|
|
18
|
+
PWN::AWS::STS.get_caller_identity
|
|
19
|
+
PWN::AWS::IAM.list_users
|
|
20
|
+
PWN::AWS::EC2.describe_instances(region: 'us-east-1')
|
|
21
|
+
PWN::AWS::S3.list_buckets
|
|
22
|
+
PWN::AWS::Lambda.list_functions
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
CLI: `pwn_aws_describe_resources -r us-east-1 -o out/`
|
|
26
|
+
|
|
27
|
+
## Service groups
|
|
28
|
+
|
|
29
|
+
| Group | Modules |
|
|
30
|
+
|---|---|
|
|
31
|
+
| Identity | `IAM` `STS` `CognitoIdentity` `CognitoIdentityProvider` `CognitoSync` `DirectoryService` |
|
|
32
|
+
| Compute | `EC2` `ECS` `ECR` `Lambda` `LambdaPreview` `Batch` `Lightsail` `ElasticBeanstalk` `AutoScaling` `ApplicationAutoScaling` `AppStream` |
|
|
33
|
+
| Storage | `S3` `Glacier` `EFS` `StorageGateway` `Snowball` |
|
|
34
|
+
| Data | `DynamoDB` `DynamoDBStreams` `RDS` `Redshift` `ElastiCache` `SimpleDB` `ElasticsearchService` |
|
|
35
|
+
| Network | `Route53` `Route53Domains` `ElasticLoadBalancing` `ElasticLoadBalancingV2` `APIGateway` `CloudFront` `DirectConnect` `WAF` `WAFRegional` `Shield` |
|
|
36
|
+
| Crypto | `KMS` `CloudHSM` `ACM` |
|
|
37
|
+
| Ops / Logs | `CloudTrail` `CloudWatch` `CloudWatchLogs` `CloudWatchEvents` `ConfigService` `SSM` `Health` `Inspector` `XRay` |
|
|
38
|
+
| Dev | `CodeBuild` `CodeCommit` `CodeDeploy` `CodePipeline` |
|
|
39
|
+
| Messaging | `SNS` `SQS` `SES` `Pinpoint` `Kinesis` `KinesisAnalytics` `Firehose` |
|
|
40
|
+
| ML / Media | `Rekognition` `Polly` `MachineLearning` `Lex` `ElasticTranscoder` |
|
|
41
|
+
| Infra | `CloudFormation` `CloudSearch` `CloudSearchDomain` `OpsWorks` `OpsWorksCM` `ServiceCatalog` `DataPipleline` `EMR` `SWF` `States` |
|
|
42
|
+
| IoT / Other | `IoT` `IoTDataPlane` `DeviceFarm` `GameLift` `Workspaces` `Support` `Budgets` `ImportExport` `SMS` `DatabaseMigrationService` `ApplicationDiscoveryService` `MarketplaceCommerceAnalytics` `MarketplaceMetering` |
|
|
43
|
+
|
|
44
|
+
## Offensive patterns
|
|
45
|
+
|
|
46
|
+
- **Enumerate** → `IAM` policies, `EC2` userdata, `Lambda` env vars, `S3`
|
|
47
|
+
bucket ACLs, `SSM` parameters.
|
|
48
|
+
- **Misconfig** → public `S3`, wildcard `IAM` actions, unencrypted `RDS`,
|
|
49
|
+
missing `CloudTrail`.
|
|
50
|
+
- **Escalate** → `iam:PassRole` + `lambda:Invoke`, `ssm:SendCommand`,
|
|
51
|
+
`ec2:RunInstances` with instance profile.
|
|
52
|
+
- **Persist** → new access key, Lambda backdoor, EC2 userdata.
|
|
53
|
+
|
|
54
|
+
Record everything with `extro_observe(source: 'aws', …)` so
|
|
55
|
+
[Extrospection](Extrospection.md) can correlate later.
|
|
56
|
+
|
|
57
|
+
[← Home](Home.md)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Agent Tool Registry
|
|
2
|
+
|
|
3
|
+
`PWN::AI::Agent::Registry` (`lib/pwn/ai/agent/registry.rb`) collects every
|
|
4
|
+
LLM-callable function into named **toolsets**. A persona is granted a subset of
|
|
5
|
+
toolsets; the JSON-Schema for each tool is what the model actually sees.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Toolsets → Tools (10 toolsets · 52 tools)
|
|
10
|
+
|
|
11
|
+
| Toolset | Tools | Backed by |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `terminal` | `shell` | `Open3.capture3` on the host |
|
|
14
|
+
| `pwn` | `pwn_eval` | `TOPLEVEL_BINDING.eval` in the live REPL process |
|
|
15
|
+
| `memory` | `memory_remember` · `memory_recall` · `memory_forget` · `memory_clear` | `PWN::Memory` → `~/.pwn/memory.json` |
|
|
16
|
+
| `skills` | `skill_list` · `skill_view` · `skill_create` · `skill_add_reference` · `skill_delete` | `~/.pwn/skills/*.md` |
|
|
17
|
+
| `sessions` | `sessions_list` · `sessions_view` · `sessions_current` · `sessions_delete` · `sessions_stats` | `PWN::Sessions` → `~/.pwn/sessions/` |
|
|
18
|
+
| `learning` | `learning_note_outcome` · `learning_reflect` · `learning_distill_skill` · `learning_stats` · `learning_outcomes` · `learning_consolidate` · `learning_reset` · `learning_auto_reflect_toggle` · **`mistakes_list`** · **`mistakes_record`** · **`mistakes_resolve`** · **`mistakes_reset`** | `PWN::AI::Agent::Learning` + `PWN::AI::Agent::Mistakes` → `~/.pwn/learning.jsonl` + `~/.pwn/mistakes.json` |
|
|
19
|
+
| `metrics` | `metrics_summary` · `metrics_reset` | `PWN::AI::Agent::Metrics` → `~/.pwn/metrics.json` |
|
|
20
|
+
| `extrospection` | `extro_snapshot` · `extro_drift` · `extro_observe` · `extro_observations` · `extro_intel` · `extro_correlate` · `extro_stats` · `extro_reset` · `extro_auto_toggle` | `PWN::AI::Agent::Extrospection` → `~/.pwn/extrospection.json` |
|
|
21
|
+
| `cron` | `cron_list` · `cron_create` · `cron_run` · `cron_enable` · `cron_disable` · `cron_remove` | `PWN::Cron` → `~/.pwn/cron/jobs.yml` |
|
|
22
|
+
| `swarm` | `agent_list` · `agent_spawn` · `agent_ask` · `agent_debate` · `agent_broadcast` · `swarm_bus` · `swarm_list` | `PWN::AI::Agent::Swarm` → `~/.pwn/agents.yml` + `~/.pwn/swarm/` |
|
|
23
|
+
|
|
24
|
+
## Adding a tool
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
# lib/pwn/ai/agent/tools/my_thing.rb
|
|
28
|
+
PWN::AI::Agent::Registry.register(
|
|
29
|
+
name: 'my_thing_do',
|
|
30
|
+
toolset: 'my_thing',
|
|
31
|
+
description: 'One-line summary the LLM will read.',
|
|
32
|
+
parameters: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: { target: { type: 'string' } },
|
|
35
|
+
required: ['target']
|
|
36
|
+
}
|
|
37
|
+
) do |args|
|
|
38
|
+
PWN::Plugins::MyThing.do(target: args['target'])
|
|
39
|
+
end
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Drop the file in `lib/pwn/ai/agent/tools/`, it's auto-loaded on next launch.
|
|
43
|
+
|
|
44
|
+
## Restricting a persona
|
|
45
|
+
|
|
46
|
+
```yaml
|
|
47
|
+
# ~/.pwn/agents.yml
|
|
48
|
+
recon:
|
|
49
|
+
role: "Passive OSINT only. Never touch the target directly."
|
|
50
|
+
toolsets: [terminal, pwn, memory, extrospection] # no swarm, no cron
|
|
51
|
+
engine: ollama
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**See also:** [pwn-ai Agent](pwn-ai-Agent.md) · [Mistakes](Mistakes.md) · [Swarm](Swarm.md)
|
|
55
|
+
|
|
56
|
+
[← Home](Home.md)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# `PWN::Banner` — Startup Art
|
|
2
|
+
|
|
3
|
+
15 ANSI banners; one is picked at random every time the REPL starts. Purely
|
|
4
|
+
cosmetic, entirely necessary.
|
|
5
|
+
|
|
6
|
+
`Anon · Bubble · Cheshire · CodeCave · DontPanic · ForkBomb · FSociety ·
|
|
7
|
+
JmpEsp · Matrix · Ninja · OffTheAir · Pirate · Radare2 · Radare2AI ·
|
|
8
|
+
WhiteRabbit`
|
|
9
|
+
|
|
10
|
+
```ruby
|
|
11
|
+
puts PWN::Banner::Matrix.get
|
|
12
|
+
welcome-banner # REPL command: redraw a random one
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Add your own: drop a module in `lib/pwn/banner/` implementing `self.get`.
|
|
16
|
+
|
|
17
|
+
[← Home](Home.md)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# `PWN::Blockchain` — BTC · ETH
|
|
2
|
+
|
|
3
|
+
Lightweight helpers for on-chain recon and wallet interaction.
|
|
4
|
+
Source: `lib/pwn/blockchain/*.rb`.
|
|
5
|
+
|
|
6
|
+
| Module | Purpose |
|
|
7
|
+
|---|---|
|
|
8
|
+
| `PWN::Blockchain::BTC` | Address balance/UTXO lookup, tx broadcast, key helpers |
|
|
9
|
+
| `PWN::Blockchain::ETH` | Address balance, contract call, event log query |
|
|
10
|
+
|
|
11
|
+
Also exposed to the agent via `PWN::AI::Agent::BTC` for wallet-aware prompts.
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
PWN::Blockchain::BTC.balance(address: 'bc1q…')
|
|
15
|
+
PWN::Blockchain::ETH.call(contract: '0x…', method: 'owner()')
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
[← Home](Home.md)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# `PWN::Bounty` — Bug-Bounty Lifecycle Tooling
|
|
2
|
+
|
|
3
|
+
| Module | Purpose |
|
|
4
|
+
|---|---|
|
|
5
|
+
| `PWN::Bounty::LifecycleAuthzReplay` | Record an authenticated browser session, then replay every request under a *different* principal to surface horizontal/vertical authz bugs |
|
|
6
|
+
|
|
7
|
+
Pairs naturally with:
|
|
8
|
+
|
|
9
|
+
- [`PWN::WWW::HackerOne`](WWW.md) / `BugCrowd` / `Synack` — programme navigation
|
|
10
|
+
- `PWN::Plugins::HackerOne` — submissions API
|
|
11
|
+
- [`PWN::Plugins::BurpSuite`](BurpSuite.md) — capture the session to replay
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
PWN::Bounty::LifecycleAuthzReplay.start(
|
|
15
|
+
har_path: 'admin_session.har',
|
|
16
|
+
replay_as: { cookie: 'session=LOW_PRIV_TOKEN' },
|
|
17
|
+
proxy: 'http://127.0.0.1:8080'
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
[← Home](Home.md) · [WWW](WWW.md)
|