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.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +101 -83
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/AI-Integration.md +42 -26
  6. data/documentation/AWS.md +57 -0
  7. data/documentation/Agent-Tool-Registry.md +56 -0
  8. data/documentation/Banner.md +17 -0
  9. data/documentation/Blockchain.md +18 -0
  10. data/documentation/Bounty.md +21 -0
  11. data/documentation/BurpSuite.md +41 -16
  12. data/documentation/CLI-Drivers.md +58 -0
  13. data/documentation/Configuration.md +66 -0
  14. data/documentation/Contributing.md +33 -19
  15. data/documentation/Cron.md +47 -0
  16. data/documentation/Diagrams.md +6 -2
  17. data/documentation/Drivers.md +43 -16
  18. data/documentation/Extrospection.md +73 -0
  19. data/documentation/FFI.md +14 -0
  20. data/documentation/Fuzzing.md +36 -0
  21. data/documentation/Hardware.md +40 -0
  22. data/documentation/Home.md +5 -4
  23. data/documentation/How-PWN-Works.md +7 -4
  24. data/documentation/Metasploit.md +34 -0
  25. data/documentation/Mistakes.md +96 -0
  26. data/documentation/NmapIt.md +18 -12
  27. data/documentation/PWN.png +0 -0
  28. data/documentation/PWN_Contributors_and_Users.png +0 -0
  29. data/documentation/Persistence.md +40 -0
  30. data/documentation/Plugins.md +97 -47
  31. data/documentation/Reporting.md +25 -18
  32. data/documentation/SAST.md +39 -22
  33. data/documentation/SDR.md +58 -0
  34. data/documentation/Sessions.md +39 -0
  35. data/documentation/Skills-Memory-Learning.md +59 -29
  36. data/documentation/Swarm.md +71 -0
  37. data/documentation/Transparent-Browser.md +26 -22
  38. data/documentation/Troubleshooting.md +44 -25
  39. data/documentation/WWW.md +32 -0
  40. data/documentation/diagrams/agent-tool-registry.svg +286 -0
  41. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  42. data/documentation/diagrams/cron-scheduling.svg +148 -0
  43. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  44. data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
  45. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  46. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  47. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  48. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  49. data/documentation/diagrams/dot/persistence-filesystem.dot +30 -0
  50. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
  51. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  52. data/documentation/diagrams/extrospection-world-awareness.svg +203 -0
  53. data/documentation/diagrams/hardware-hacking.svg +163 -0
  54. data/documentation/diagrams/memory-skills-detailed.svg +146 -97
  55. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  56. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  57. data/documentation/diagrams/persistence-filesystem.svg +189 -0
  58. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
  59. data/documentation/diagrams/sdr-radio-flow.svg +166 -0
  60. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  61. data/documentation/fax-spectrogram.png +0 -0
  62. data/documentation/fax-waveform.png +0 -0
  63. data/documentation/pwn-REPL.md +40 -24
  64. data/documentation/pwn-ai-Agent.md +72 -30
  65. data/documentation/pwn_android_war_dialer_session.png +0 -0
  66. data/documentation/pwn_install.png +0 -0
  67. data/documentation/pwn_wallpaper.jpg +0 -0
  68. data/documentation/ringing-spectrogram.png +0 -0
  69. data/documentation/ringing-waveform.png +0 -0
  70. data/lib/pwn/ai/agent/extrospection.rb +65 -6
  71. data/lib/pwn/ai/agent/learning.rb +67 -7
  72. data/lib/pwn/ai/agent/loop.rb +72 -6
  73. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  74. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  75. data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
  76. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  77. data/lib/pwn/ai/agent.rb +1 -0
  78. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  79. data/lib/pwn/sdr/decoder/adsb.rb +101 -0
  80. data/lib/pwn/sdr/decoder/apt.rb +75 -0
  81. data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
  82. data/lib/pwn/sdr/decoder/dect.rb +84 -0
  83. data/lib/pwn/sdr/decoder/gps.rb +83 -0
  84. data/lib/pwn/sdr/decoder/gsm.rb +50 -29
  85. data/lib/pwn/sdr/decoder/iridium.rb +81 -0
  86. data/lib/pwn/sdr/decoder/lora.rb +87 -0
  87. data/lib/pwn/sdr/decoder/lte.rb +88 -0
  88. data/lib/pwn/sdr/decoder/morse.rb +64 -0
  89. data/lib/pwn/sdr/decoder/p25.rb +71 -0
  90. data/lib/pwn/sdr/decoder/pager.rb +77 -0
  91. data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
  92. data/lib/pwn/sdr/decoder/rfid.rb +88 -0
  93. data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
  94. data/lib/pwn/sdr/decoder/rtty.rb +66 -0
  95. data/lib/pwn/sdr/decoder/wifi.rb +98 -0
  96. data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
  97. data/lib/pwn/sdr/decoder.rb +67 -7
  98. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  99. data/lib/pwn/sdr/gqrx.rb +186 -95
  100. data/lib/pwn/version.rb +1 -1
  101. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  102. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  103. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  105. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  106. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  107. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  108. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  109. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  110. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  111. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  112. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  113. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  114. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  115. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  116. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  117. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  118. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  119. data/third_party/pwn_rdoc.jsonl +114 -8
  120. metadata +81 -5
@@ -1,44 +1,74 @@
1
- # Skills, Memory & Learning
1
+ # Memory · Skills · Learning · Mistakes · Metrics — Introspection
2
2
 
3
- One of PWN's most powerful features is its self-improving closed loop.
3
+ The **inward-facing** half of the pwn-ai feedback loop: how the agent measures
4
+ its own performance, turns wins into permanent capability, and — critically —
5
+ **learns from its own mistakes so it does not repeat them**.
4
6
 
5
- ## Memory (`PWN::Memory`)
7
+ ![Memory / Skills detail](diagrams/memory-skills-detailed.svg)
6
8
 
7
- Persistent facts, preferences, lessons, and environment data stored in `~/.pwn/memory.json`.
9
+ ## The five stores
8
10
 
9
- Use from REPL / agent:
10
- - `PWN::Memory.remember(key, value, category: :fact)`
11
- - `PWN::Memory.recall(query)`
11
+ | Store | File | Write tool | Read tool | Injected as |
12
+ |---|---|---|---|---|
13
+ | **Memory** | `memory.json` | `memory_remember` | `memory_recall` | `MEMORY` block — durable facts / prefs / lessons / env |
14
+ | **Skills** | `skills/*.md` | `skill_create` · `learning_distill_skill` | `skill_list` · `skill_view` | `SKILLS` list — reusable procedures + `references:` (CWE/CVE/ATT&CK/NIST/URL) |
15
+ | **Learning** | `learning.jsonl` | `learning_note_outcome` · `learning_reflect` | `learning_outcomes` · `learning_stats` | `LEARNING` block — recent outcomes + success_rate |
16
+ | **Mistakes** | `mistakes.json` | `mistakes_record` · `mistakes_resolve` · *auto on failure* | `mistakes_list` | `KNOWN MISTAKES` + `KNOWN FIXES` blocks — do-NOT-repeat + do-THIS-instead |
17
+ | **Metrics** | `metrics.json` | *automatic* (every Dispatch) | `metrics_summary` | `TOOL EFFECTIVENESS` block — steer tool choice |
12
18
 
13
- Injected into every future `pwn-ai` session.
19
+ ## The lifecycle of a lesson
14
20
 
15
- ## Skills
21
+ ```text
22
+ 1. Dispatch runs a tool → Metrics.record(tool, ok?, ms)
23
+ ↳ tool FAILED? → Mistakes.record(tool, error) (count++, cross-session)
24
+ ↳ same sig ≥3×? → guard_repeated_failure + inline correction_hint
25
+ 2. Final answer produced → Learning.auto_reflect(session_id)
26
+ 3. Reflect finds a durable insight → Memory.remember(lesson_xxxx, …)
27
+ 4. A whole workflow succeeded → Learning.distill_skill(name, session_id, references:)
28
+ 5. Found a fix for a mistake → mistakes_resolve(sig, fix) → Memory :lesson "AVOID X — FIX: Y"
29
+ 6. Next launch: PromptBuilder injects all five blocks → the model already knows.
30
+ ```
16
31
 
17
- Reusable, versionable markdown procedures stored in `~/.pwn/skills/`.
32
+ See **[Mistakes](Mistakes.md)** for the full negative-feedback mechanics
33
+ (fingerprinting, `[REPEATING]`, `[REGRESSED]`, user-correction detection).
18
34
 
19
- - Created automatically via distillation of successful agent runs.
20
- - Manually via `skill_create` or editing YAML+markdown files.
21
- - Contain front-matter `references:` (CWE, CVE, ATT&CK, NIST, URLs).
22
- - Exposed to the agent and listed via `skill_list` / `skill_view`.
35
+ ## Skill file format
23
36
 
24
- Example skills:
25
- - `deep_exploitation`
26
- - `vulnerability_research_fundamentals`
27
- - `xai_grok_oauth_device_flow`
37
+ ```markdown
38
+ ---
39
+ references:
40
+ - CWE-89
41
+ - T1190
42
+ - https://portswigger.net/web-security/sql-injection
43
+ ---
44
+ # sqli_union_enum
28
45
 
29
- ## Learning Loop
46
+ 1. Confirm injection with `' AND 1=1 --`.
47
+ 2. Find column count with `ORDER BY n`.
48
+ 3. …
30
49
 
31
- - `PWN::AI::Agent::Metrics` — per-tool success rate + duration (`~/.pwn/metrics.json`)
32
- - `PWN::AI::Agent::Learning` — outcomes, reflections, skill distillation (`~/.pwn/learning.jsonl`)
33
- - Successful workflows become durable skills available to all future sessions.
50
+ ## References
51
+ - CWE-89
52
+ - T1190
53
+ ```
34
54
 
35
- ## Management Commands (REPL)
55
+ `PWN::Config.parse_skill_references` reads both the YAML front-matter **and**
56
+ the `## References` section, deduplicates, and exposes them via
57
+ `skill_view(name)[:references]`.
36
58
 
37
- - `pwn-ai-memory`
38
- - `pwn-ai-sessions`
39
- - `pwn-ai-cron`
40
- - `skill_list`, `skill_view`, `skill_create`, `skill_add_reference`
59
+ ## Housekeeping
41
60
 
42
- This system turns one-off wins into institutional knowledge.
61
+ | Tool | When |
62
+ |---|---|
63
+ | `learning_consolidate(max_entries: 200)` | MEMORY block getting long/noisy |
64
+ | `learning_reset(confirm: true)` | dev-experiment noise polluted success_rate |
65
+ | `mistakes_reset(confirm: true)` | new host/engagement — prior failure patterns no longer apply |
66
+ | `metrics_reset(confirm: true)` | fixed a broken tool; stale 0 % is misleading |
67
+ | `skill_delete(name)` | auto-distilled skill turned out low-quality |
68
+ | `learning_auto_reflect_toggle(enabled: false)` | during noisy fuzz loops |
43
69
 
44
- [[Diagrams]]
70
+ **See also:** [Mistakes](Mistakes.md) — the negative-feedback half ·
71
+ [Extrospection](Extrospection.md) — the outward-facing half ·
72
+ [Sessions](Sessions.md) · [Persistence](Persistence.md)
73
+
74
+ [← Home](Home.md)
@@ -0,0 +1,71 @@
1
+ # Swarm — Native Multi-Agent Orchestration
2
+
3
+ `PWN::AI::Agent::Swarm` replaces the legacy `pwn-irc` (inspircd + weechat +
4
+ PRIVMSG) transport with **first-class sub-agents** built directly on
5
+ `PWN::AI::Agent::Loop`. Each persona is a *full* tool-calling agent — Memory,
6
+ Skills, Learning, Metrics and Extrospection all apply — so the
7
+ self-improvement loop covers the whole swarm.
8
+
9
+ ![Swarm](diagrams/swarm-multi-agent.svg)
10
+
11
+ ## Files
12
+
13
+ | Path | Contains |
14
+ |---|---|
15
+ | `~/.pwn/agents.yml` | Persona registry (name → role/engine/toolsets/max_iters) |
16
+ | `~/.pwn/swarm/<id>/bus.jsonl` | Append-only chat every persona reads/writes |
17
+ | `~/.pwn/swarm/<id>/personas.json` | persona name → `PWN::Sessions` id |
18
+
19
+ No daemon. Cross-session / cross-process communication == another `pwn-ai` (or
20
+ a `PWN::Cron` job) calling `Swarm.ask` with the same `swarm_id`.
21
+
22
+ ## Define personas
23
+
24
+ ```ruby
25
+ agent_spawn(name: 'red_team',
26
+ role: 'Offensive operator. Propose the most aggressive next step.',
27
+ engine: 'grok',
28
+ toolsets: %w[terminal pwn memory skills extrospection])
29
+
30
+ agent_spawn(name: 'blue_team',
31
+ role: 'Defender. Critique red_team, flag detection risk & OPSEC.',
32
+ engine: 'anthropic',
33
+ toolsets: %w[pwn memory extrospection])
34
+ ```
35
+
36
+ > Omit `swarm` from a persona's toolsets to stop it recursively spawning
37
+ > further sub-agents. Recursion is also hard-capped by
38
+ > `PWN::Env[:ai][:agent][:max_depth]` (default 3).
39
+
40
+ ## Verbs
41
+
42
+ | Tool | Use for |
43
+ |---|---|
44
+ | `agent_list` | See who's defined |
45
+ | `agent_spawn` | Define / overwrite a persona |
46
+ | `agent_ask(name, request)` | One turn of one persona → reply comes back to *you* |
47
+ | `agent_debate(names, topic, rounds:)` | Round-robin critique — each sees the bus tail |
48
+ | `agent_broadcast(request)` | Fan-out; returns `{name => reply}` for voting |
49
+ | `swarm_bus(swarm_id)` | Tail a bus to inspect a prior/concurrent conversation |
50
+ | `swarm_list` | Find a `swarm_id` to resume |
51
+
52
+ ## Example: adversarial exploit review
53
+
54
+ ```ruby
55
+ tx = agent_debate(
56
+ names: %w[red_team blue_team exploit_dev],
57
+ topic: 'Target runs Jenkins 2.426.2 on :8080 — plan initial access.',
58
+ rounds: 3
59
+ )
60
+ # later, in a different pwn-ai process:
61
+ agent_ask(name: 'red_team', swarm_id: tx[:swarm_id],
62
+ request: 'blue_team raised WAF concerns — revise the payload.')
63
+ ```
64
+
65
+ Because each persona can pin a **different engine**, the debate is real model
66
+ diversity, not one model role-playing.
67
+
68
+ **See also:** [pwn-ai Agent](pwn-ai-Agent.md) ·
69
+ [Agent Tool Registry](Agent-Tool-Registry.md) · [Sessions](Sessions.md)
70
+
71
+ [← Home](Home.md)
@@ -1,32 +1,36 @@
1
- # Transparent Browser
1
+ # `PWN::Plugins::TransparentBrowser`
2
2
 
3
- `PWN::Plugins::TransparentBrowser` — powerful browser automation (headless + visible) built on top of Selenium / Watir / Ferrum / similar.
3
+ Watir + Selenium wrapper that gives you a real Chrome/Firefox headless or
4
+ visible — with proxy support, DevTools protocol access, and cookie/console
5
+ capture. It's the traffic source for [BurpSuite](BurpSuite.md), the engine
6
+ under every [`PWN::WWW`](WWW.md) driver, and the agent's go-to for anything
7
+ JS-heavy.
4
8
 
5
- ## Primary Uses
6
-
7
- - Web spidering / crawling
8
- - JavaScript-heavy application interaction
9
- - Automated form submission, auth flows
10
- - Screenshotting, DOM inspection
11
- - Proxied browsing (pairs excellently with BurpSuite)
12
-
13
- ## Example Calls
9
+ ## Open
14
10
 
15
11
  ```ruby
16
- browser = PWN::Plugins::TransparentBrowser.open_browser(
17
- browser_type: :chrome,
18
- proxy: 'http://127.0.0.1:8080' # Burp
12
+ b = PWN::Plugins::TransparentBrowser.open(
13
+ browser_type: :headless, # :chrome | :firefox | :headless | :rest
14
+ proxy: 'http://127.0.0.1:8080',
15
+ with_devtools: true
19
16
  )
20
- browser.goto 'https://target.example.com'
21
- # ... interact ...
22
- browser.close
17
+ b[:browser].goto 'https://target'
18
+ b[:browser].text_field(name: 'q').set 'pwn'
23
19
  ```
24
20
 
25
- Agent-friendly.
21
+ ## Useful bits
22
+
23
+ ```ruby
24
+ b[:browser].cookies.to_a
25
+ b[:browser].execute_script('return document.title')
26
+ b[:devtools].send_cmd('Network.enable')
27
+ PWN::Plugins::TransparentBrowser.dump_links(browser_obj: b)
28
+ PWN::Plugins::TransparentBrowser.close(browser_obj: b)
29
+ ```
26
30
 
27
- ## See Also
31
+ ## `:rest` mode
28
32
 
29
- - [Burp Suite](BurpSuite.md)
30
- - [Plugins](Plugins.md)
33
+ `browser_type: :rest` returns a `RestClient`-backed object with the same proxy
34
+ plumbing — for APIs where a full browser is overkill.
31
35
 
32
- [[Diagrams]]
36
+ [← Home](Home.md) · [BurpSuite](BurpSuite.md) · [WWW](WWW.md)
@@ -1,38 +1,57 @@
1
1
  # Troubleshooting
2
2
 
3
- ## Common Issues
3
+ ## SHIFT+ENTER submits instead of newline
4
4
 
5
- ### Burp / ZAP Proxy Problems
6
- - Prefer `PWN::Plugins::BurpSuite`
7
- - 502 errors usually mean upstream proxy not listening or crashed. Check with `ps`, `ss -tlnp`, restart via plugin methods.
5
+ `pwn-ai` / `pwn-asm` need the terminal to send a *distinct* code for
6
+ Shift-Enter. Under **tmux** both sides must be configured:
8
7
 
9
- ### Ruby / Gemset Issues
10
- - Use RVM and the gemset defined in `.ruby-version` / `.ruby-gemset`.
11
- - Re-run `./install.sh ruby-gem` or the vagrant provisioner after Ruby upgrades.
12
-
13
- ### AI / LLM Authentication
14
- - Grok uses OAuth device flow (public client) — see `xai_grok_oauth_device_flow` skill.
15
- - Store credentials via `PWN::Config` or environment as documented.
8
+ ```tmux
9
+ # ~/.tmux.conf
10
+ set -s extended-keys on
11
+ set -as terminal-features 'xterm*:extkeys' # replace xterm* with your $TERM
12
+ ```
16
13
 
17
- ### SHIFT+ENTER Not Working in pwn-ai
18
- - Requires tmux `extended-keys on` on **both** inner and outer sides.
19
- - See recent lessons in memory for exact tmux config.
14
+ Then fully **detach and re-attach** (a `source-file` isn't enough for
15
+ `terminal-features`). Verify with `tmux display -p '#{client_termfeatures}'`
16
+ it must include `extkeys`.
20
17
 
21
- ### Git / Permissions
22
- - Run `sudo chown -R $USER:$USER /opt/pwn` if permission issues after install.
18
+ ## `502 Bad Gateway` from a proxy plugin
23
19
 
24
- ## Diagnostics
20
+ The upstream (Burp/ZAP) isn't listening. Check:
25
21
 
26
22
  ```bash
27
- pwn
28
- PWN.help
29
- # Inside REPL:
30
- PWN::Config
31
- PWN::Plugins::PWNLogger
23
+ ps aux | grep -E 'burp|zap'
24
+ ss -tlnp | grep -E ':8080|:1337'
32
25
  ```
33
26
 
34
- Check `~/.pwn/` for logs, metrics, learning files.
27
+ Restart via `PWN::Plugins::BurpSuite.start` / `PWN::Plugins::Zaproxy.start` or
28
+ fix the port in `~/.pwn/config.yml`.
29
+
30
+ ## `Psych::DisallowedClass` on cron/agents YAML
31
+
32
+ Fixed in current `PWN::Cron` / `Swarm` — both loaders now pass
33
+ `permitted_classes: [Symbol]`. If you see it, `git pull && rake install`.
34
+
35
+ ## Agent stops early ("max iterations")
36
+
37
+ Raise `ai.agent.max_iters` in `~/.pwn/config.yml`, or split the request.
38
+
39
+ ## A tool is stuck at 0 % success
40
+
41
+ If you've since fixed the tool, wipe the stale telemetry so it stops steering
42
+ the agent away: `metrics_reset(confirm: true)`.
43
+
44
+ ## LLM auth
45
+
46
+ | Engine | Fix |
47
+ |---|---|
48
+ | grok `oauth: true` | first run prints a `https://accounts.x.ai/…` URL — open it, approve, token is cached |
49
+ | ollama | ensure `ollama serve` is running and `base_url:` matches |
50
+ | others | check `key:` under `ai.<engine>` in `~/.pwn/config.yml` |
51
+
52
+ ## Diagrams won't rebuild
35
53
 
36
- Report bugs via GitHub issues with full reproduction + `pwn` version.
54
+ `sudo apt install graphviz` (need `dot` on `$PATH`), then
55
+ `cd documentation/diagrams && ./build.sh`.
37
56
 
38
- [[Diagrams]]
57
+ [← Home](Home.md)
@@ -0,0 +1,32 @@
1
+ # `PWN::WWW` — Site-Specific Browser Automations
2
+
3
+ 21 modules, each a scripted [`TransparentBrowser`](Transparent-Browser.md)
4
+ session against a real site: log in, navigate, scrape, submit.
5
+ Source: `lib/pwn/www/*.rb`.
6
+
7
+ ## Modules
8
+
9
+ | Category | Modules |
10
+ |---|---|
11
+ | **Bug bounty** | `HackerOne` · `BugCrowd` · `Synack` · `AppCobaltIO` |
12
+ | **Search / OSINT** | `Google` · `Bing` · `DuckDuckGo` · `Torch` · `WaybackMachine` · `Pastebin` · `Checkip` |
13
+ | **Social** | `Twitter` · `Facebook` · `LinkedIn` · `Youtube` · `Pandora` |
14
+ | **Finance / Work** | `CoinbasePro` · `Paypal` · `TradingView` · `Uber` · `Upwork` |
15
+
16
+ ## Pattern
17
+
18
+ ```ruby
19
+ b = PWN::WWW::HackerOne.open(browser_type: :headless,
20
+ proxy: 'http://127.0.0.1:8080')
21
+ PWN::WWW::HackerOne.login(browser_obj: b, username: '…', mfa: '…')
22
+ # ... scripted navigation ...
23
+ PWN::WWW::HackerOne.logout(browser_obj: b)
24
+ PWN::Plugins::TransparentBrowser.close(browser_obj: b)
25
+ ```
26
+
27
+ Because traffic goes through TransparentBrowser, you can point `proxy:` at
28
+ [BurpSuite](BurpSuite.md) and passively capture every request the automation
29
+ makes.
30
+
31
+ [← Home](Home.md) · [Transparent-Browser](Transparent-Browser.md) ·
32
+ [Bounty](Bounty.md)