pwn 0.5.613 → 0.5.615

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -10
  3. data/README.md +110 -24
  4. data/documentation/AI-Integration.md +36 -0
  5. data/documentation/BurpSuite.md +26 -0
  6. data/documentation/Contributing.md +31 -0
  7. data/documentation/Diagrams.md +57 -0
  8. data/documentation/Drivers.md +25 -0
  9. data/documentation/General-PWN-Usage.md +40 -0
  10. data/documentation/Home.md +51 -0
  11. data/documentation/How-PWN-Works.md +60 -0
  12. data/documentation/Installation.md +50 -0
  13. data/documentation/NmapIt.md +18 -0
  14. data/documentation/Plugins.md +59 -0
  15. data/documentation/Reporting.md +28 -0
  16. data/documentation/SAST.md +32 -0
  17. data/documentation/Skills-Memory-Learning.md +44 -0
  18. data/documentation/Transparent-Browser.md +32 -0
  19. data/documentation/Troubleshooting.md +38 -0
  20. data/documentation/What-is-PWN.md +34 -0
  21. data/documentation/Why-PWN.md +18 -0
  22. data/documentation/diagrams/ai-integration-tool-calling.svg +134 -0
  23. data/documentation/diagrams/burp-vs-zap-preference.svg +84 -0
  24. data/documentation/diagrams/code-scanning-sast.svg +112 -0
  25. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +23 -0
  26. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +15 -0
  27. data/documentation/diagrams/dot/code-scanning-sast.dot +21 -0
  28. data/documentation/diagrams/dot/driver-framework.dot +17 -0
  29. data/documentation/diagrams/dot/fuzzing-workflow.dot +27 -0
  30. data/documentation/diagrams/dot/history-to-drivers.dot +20 -0
  31. data/documentation/diagrams/dot/memory-skills-detailed.dot +28 -0
  32. data/documentation/diagrams/dot/network-infra-testing.dot +22 -0
  33. data/documentation/diagrams/dot/overall-pwn-architecture.dot +49 -0
  34. data/documentation/diagrams/dot/penetration-testing-workflow.dot +29 -0
  35. data/documentation/diagrams/dot/plugin-ecosystem.dot +31 -0
  36. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +57 -0
  37. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +37 -0
  38. data/documentation/diagrams/dot/reporting-pipeline.dot +17 -0
  39. data/documentation/diagrams/dot/reverse-engineering-flow.dot +21 -0
  40. data/documentation/diagrams/dot/sessions-cron-automation.dot +17 -0
  41. data/documentation/diagrams/dot/web-application-testing.dot +27 -0
  42. data/documentation/diagrams/dot/zero-day-research-flow.dot +27 -0
  43. data/documentation/diagrams/driver-framework.svg +90 -0
  44. data/documentation/diagrams/fuzzing-workflow.svg +147 -0
  45. data/documentation/diagrams/history-to-drivers.svg +117 -0
  46. data/documentation/diagrams/memory-skills-detailed.svg +154 -0
  47. data/documentation/diagrams/network-infra-testing.svg +121 -0
  48. data/documentation/diagrams/overall-pwn-architecture.svg +234 -0
  49. data/documentation/diagrams/penetration-testing-workflow.svg +148 -0
  50. data/documentation/diagrams/plugin-ecosystem.svg +172 -0
  51. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +234 -0
  52. data/documentation/diagrams/pwn-repl-prototyping.svg +179 -0
  53. data/documentation/diagrams/reporting-pipeline.svg +91 -0
  54. data/documentation/diagrams/reverse-engineering-flow.svg +114 -0
  55. data/documentation/diagrams/sessions-cron-automation.svg +92 -0
  56. data/documentation/diagrams/web-application-testing.svg +137 -0
  57. data/documentation/diagrams/zero-day-research-flow.svg +149 -0
  58. data/documentation/pwn-REPL.md +33 -0
  59. data/documentation/pwn-ai-Agent.md +43 -0
  60. data/lib/pwn/ai/agent/learning.rb +377 -0
  61. data/lib/pwn/ai/agent/loop.rb +18 -3
  62. data/lib/pwn/ai/agent/metrics.rb +155 -0
  63. data/lib/pwn/ai/agent/prompt_builder.rb +23 -3
  64. data/lib/pwn/ai/agent/tools/learning.rb +113 -0
  65. data/lib/pwn/ai/agent/tools/skills.rb +94 -8
  66. data/lib/pwn/ai/agent.rb +2 -0
  67. data/lib/pwn/ai/grok.rb +249 -106
  68. data/lib/pwn/config.rb +86 -13
  69. data/lib/pwn/plugins/monkey_patch.rb +2 -2
  70. data/lib/pwn/plugins/repl.rb +68 -3
  71. data/lib/pwn/version.rb +1 -1
  72. data/spec/lib/pwn/ai/agent/learning_spec.rb +68 -0
  73. data/spec/lib/pwn/ai/agent/metrics_spec.rb +27 -0
  74. data/spec/lib/pwn/ai/agent/tools/learning_spec.rb +30 -0
  75. metadata +84 -34
  76. data/documentation/PWN.png +0 -0
  77. data/documentation/PWN_Contributors_and_Users.png +0 -0
  78. data/documentation/fax-spectrogram.png +0 -0
  79. data/documentation/fax-waveform.png +0 -0
  80. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +0 -54
  81. data/documentation/lifecycle_authz_replay.example.yaml +0 -27
  82. data/documentation/pwn_android_war_dialer_session.png +0 -0
  83. data/documentation/pwn_install.png +0 -0
  84. data/documentation/pwn_wallpaper.jpg +0 -0
  85. data/documentation/ringing-spectrogram.png +0 -0
  86. data/documentation/ringing-waveform.png +0 -0
  87. data/documentation/vulnerability_report_template.md +0 -37
@@ -0,0 +1,50 @@
1
+ # Installation
2
+
3
+ Tested primarily on Debian-based Linux (including Kali) and macOS using RVM-managed Ruby.
4
+
5
+ ## Quick Install (Recommended)
6
+
7
+ ```bash
8
+ $ cd /opt
9
+ $ sudo git clone https://github.com/0dayInc/pwn
10
+ $ cd /opt/pwn
11
+ $ ./install.sh
12
+ $ ./install.sh ruby-gem
13
+ $ pwn
14
+ pwn[v0.5.613]:001 >>> PWN.help
15
+ ```
16
+
17
+ ## Video Guide
18
+
19
+ [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
20
+
21
+ ## Ruby Gem Updates
22
+
23
+ ```bash
24
+ $ rvm use ruby-4.0.5@pwn
25
+ $ gem uninstall --all --executables pwn
26
+ $ gem install --verbose pwn
27
+ ```
28
+
29
+ For multi-user RVM use `rvmsudo` instead of `sudo` on gem commands.
30
+
31
+ ## Upgrade Path (Ruby + PWN)
32
+
33
+ Use the vagrant provisioner or:
34
+
35
+ ```bash
36
+ $ /opt/pwn/vagrant/provisioners/pwn.sh
37
+ ```
38
+
39
+ This rebuilds the gemset when `.ruby-version` advances.
40
+
41
+ ## Requirements
42
+
43
+ - Ruby (via RVM recommended)
44
+ - Git
45
+ - Build tools (for native extensions)
46
+ - Optional: Burp Suite Pro, Metasploit, etc. for full plugin capability
47
+
48
+ See the root [README.md](../README.md) and `install.sh` for latest details.
49
+
50
+ [[Diagrams]]
@@ -0,0 +1,18 @@
1
+ # NmapIt
2
+
3
+ `PWN::Plugins::NmapIt` provides a convenient Ruby wrapper around Nmap for reconnaissance.
4
+
5
+ ## Features
6
+
7
+ - Easy target specification (hosts, ranges, CIDR)
8
+ - Parsing of XML output into usable Ruby structures
9
+ - Service version detection, script execution support
10
+ - Integration with other plugins (e.g. feed into TransparentBrowser or Shodan)
11
+
12
+ Commonly used early in agent workflows:
13
+
14
+ > "Run NmapIt against 10.0.0.0/24, identify web services, then spider with TransparentBrowser."
15
+
16
+ See source in `lib/pwn/plugins/nmap_it.rb`.
17
+
18
+ [[Diagrams]]
@@ -0,0 +1,59 @@
1
+ # Plugins
2
+
3
+ PWN ships with **66+** plugins under `PWN::Plugins::*`.
4
+
5
+ ## Browsing Plugins
6
+
7
+ ```ruby
8
+ PWN::Plugins.constants.sort
9
+ PWN::Plugins::BurpSuite.methods(false).sort # preferred web proxy/scanner
10
+ ```
11
+
12
+ ## Major Categories & Highlights
13
+
14
+ ### Web / Proxy / Scanning
15
+ - **burp_suite** (preferred) — Headless + live interaction with Burp Suite Professional
16
+ - **zaproxy** — OWASP ZAP support (fallback)
17
+ - **transparent_browser** — Headless/visible browser automation, spidering, JS execution
18
+ - **spider**
19
+ - **nmap_it** — Nmap wrapper + parsing
20
+ - **nessus_cloud**, **nexpose_vuln_scan**, **openvas**
21
+
22
+ ### Exploitation & Post-Exploitation
23
+ - **metasploit**
24
+ - **assembly**
25
+ - **fuzz**
26
+ - **packet**
27
+ - **beef** (Browser Exploitation Framework)
28
+ - **tor**
29
+
30
+ ### Recon / OSINT
31
+ - **shodan**
32
+ - **hunter**
33
+ - **ip_info**
34
+ - **github**
35
+ - **hacker_one**
36
+
37
+ ### Data & Auth
38
+ - **authentication_helper**, **basic_auth**, **oauth2**
39
+ - **dao_ldap**, **dao_mongo**, **dao_postgres**, **dao_sqlite3**
40
+ - **vault**
41
+
42
+ ### Mobile / Hardware / Misc
43
+ - **android**
44
+ - **serial**, **bus_pirate**, **msr206**
45
+ - **ocr**, **pdf_parse**, **voice**
46
+ - **blockchain**, **bounty** (HackerOne), **defect_dojo**
47
+
48
+ ### Utility
49
+ - **file_fu**, **json_pathify**, **log**, **pwn_logger**, **thread_pool**
50
+ - **monkey_patch**, **xxd**, **char**, **vin**, **ssn**, **credit_card**
51
+
52
+ Full list (current as of build):
53
+ `android assembly authentication_helper baresip basic_auth beef black_duck_binary_analysis burp_suite bus_pirate char credit_card dao_ldap dao_mongo dao_postgres dao_sqlite3 defect_dojo detect_os ein file_fu fuzz git github hacker_one hunter ip_info irc jenkins jira_data_center json_pathify log mail_agent metasploit monkey_patch msr206 nessus_cloud nexpose_vuln_scan nmap_it oauth2 ocr open_api openvas packet pdf_parse pony ps pwn_logger rabbit_mq repl scannable_codes serial shodan slack_client sock spider ssn thread_pool tor transparent_browser twitter_api uri_scheme vault vin voice vsphere xxd zaproxy`
54
+
55
+ Each plugin has self-documenting method signatures viewable via the REPL or source in `lib/pwn/plugins/`.
56
+
57
+ See individual plugin pages or source for details. Many plugins accept common options and return rich Ruby objects.
58
+
59
+ [[Diagrams]]
@@ -0,0 +1,28 @@
1
+ # Reporting
2
+
3
+ `PWN::Reports` generates structured output from scans, agent runs, SAST results, and manual findings.
4
+
5
+ ## Capabilities
6
+
7
+ - Vulnerability report templating (Markdown + other formats)
8
+ - Integration with defect trackers (`PWN::Plugins::DefectDojo`, Jira, etc.)
9
+ - Automated report generation after agent tasks or plugin runs
10
+ - Custom report drivers
11
+
12
+ ## Template
13
+
14
+ See example report templates in the PWN repo (or generate with `PWN::Reports`). Full pipeline in [Diagrams](Diagrams.md).
15
+
16
+ ## Usage Patterns
17
+
18
+ Typically invoked at the end of reconnaissance → scanning → exploitation → analysis workflows:
19
+
20
+ ```ruby
21
+ PWN::Reports.generate(...)
22
+ ```
23
+
24
+ The `pwn-ai` agent is frequently instructed to "analyze findings and produce a report."
25
+
26
+ Combined with `PWN::Plugins::HackerOne` / bounty modules for streamlined disclosure workflows.
27
+
28
+ [[Diagrams]]
@@ -0,0 +1,32 @@
1
+ # SAST (Static Application Security Testing)
2
+
3
+ `PWN::SAST` provides a growing collection of static analysis signatures and test case generators.
4
+
5
+ ## Location
6
+
7
+ `lib/pwn/sast/` — one file per vulnerability class or mechanism.
8
+
9
+ ## Current Coverage (examples)
10
+
11
+ - Command execution (multiple languages)
12
+ - Deserialization (Java, etc.)
13
+ - Eval / dangerous functions
14
+ - CSRF, redirect, inner HTML, postMessage issues
15
+ - Log4j, ReDoS, path traversal patterns
16
+ - Credential / secret patterns (keystore, passwords, AWS keys)
17
+ - Modern issues: prototype pollution, etc.
18
+ - Custom signature engine + factory
19
+
20
+ ## Usage
21
+
22
+ ```ruby
23
+ PWN::SAST.constants
24
+ PWN::SAST::TestCaseEngine.generate(...)
25
+ # Or call specific check modules
26
+ ```
27
+
28
+ SAST results feed directly into reporting and can be orchestrated by the `pwn-ai` agent or custom drivers.
29
+
30
+ See `lib/pwn/sast/` source for the full and growing list of modules.
31
+
32
+ [[Diagrams]]
@@ -0,0 +1,44 @@
1
+ # Skills, Memory & Learning
2
+
3
+ One of PWN's most powerful features is its self-improving closed loop.
4
+
5
+ ## Memory (`PWN::Memory`)
6
+
7
+ Persistent facts, preferences, lessons, and environment data stored in `~/.pwn/memory.json`.
8
+
9
+ Use from REPL / agent:
10
+ - `PWN::Memory.remember(key, value, category: :fact)`
11
+ - `PWN::Memory.recall(query)`
12
+
13
+ Injected into every future `pwn-ai` session.
14
+
15
+ ## Skills
16
+
17
+ Reusable, versionable markdown procedures stored in `~/.pwn/skills/`.
18
+
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`.
23
+
24
+ Example skills:
25
+ - `deep_exploitation`
26
+ - `vulnerability_research_fundamentals`
27
+ - `xai_grok_oauth_device_flow`
28
+
29
+ ## Learning Loop
30
+
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.
34
+
35
+ ## Management Commands (REPL)
36
+
37
+ - `pwn-ai-memory`
38
+ - `pwn-ai-sessions`
39
+ - `pwn-ai-cron`
40
+ - `skill_list`, `skill_view`, `skill_create`, `skill_add_reference`
41
+
42
+ This system turns one-off wins into institutional knowledge.
43
+
44
+ [[Diagrams]]
@@ -0,0 +1,32 @@
1
+ # Transparent Browser
2
+
3
+ `PWN::Plugins::TransparentBrowser` — powerful browser automation (headless + visible) built on top of Selenium / Watir / Ferrum / similar.
4
+
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
14
+
15
+ ```ruby
16
+ browser = PWN::Plugins::TransparentBrowser.open_browser(
17
+ browser_type: :chrome,
18
+ proxy: 'http://127.0.0.1:8080' # Burp
19
+ )
20
+ browser.goto 'https://target.example.com'
21
+ # ... interact ...
22
+ browser.close
23
+ ```
24
+
25
+ Agent-friendly.
26
+
27
+ ## See Also
28
+
29
+ - [Burp Suite](BurpSuite.md)
30
+ - [Plugins](Plugins.md)
31
+
32
+ [[Diagrams]]
@@ -0,0 +1,38 @@
1
+ # Troubleshooting
2
+
3
+ ## Common Issues
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.
8
+
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.
16
+
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.
20
+
21
+ ### Git / Permissions
22
+ - Run `sudo chown -R $USER:$USER /opt/pwn` if permission issues after install.
23
+
24
+ ## Diagnostics
25
+
26
+ ```bash
27
+ pwn
28
+ PWN.help
29
+ # Inside REPL:
30
+ PWN::Config
31
+ PWN::Plugins::PWNLogger
32
+ ```
33
+
34
+ Check `~/.pwn/` for logs, metrics, learning files.
35
+
36
+ Report bugs via GitHub issues with full reproduction + `pwn` version.
37
+
38
+ [[Diagrams]]
@@ -0,0 +1,34 @@
1
+ # What is PWN
2
+
3
+ PWN (pronounced /pōn/ or "pone") is a powerful open-source **offensive cybersecurity automation framework** and **continuous security integration platform**.
4
+
5
+ ## Core Purpose
6
+
7
+ - Rapidly discover zero-days
8
+ - Automate exploitation and post-exploitation
9
+ - Perform advanced web application penetration testing
10
+ - Conduct source code analysis (SAST)
11
+ - Orchestrate infrastructure reconnaissance at scale
12
+ - Execute AI-augmented autonomous security operations
13
+
14
+ ## Architecture Highlights
15
+
16
+ PWN provides over 60 production-grade plugins, full LLM integration with tool-calling agents, persistent memory, reusable skills, session/cron management, and a highly interactive REPL (Pry-powered) for prototyping and driving complex security workflows.
17
+
18
+ All core automation primitives are open to promote trust, peer review, and collaborative innovation in adversarial security.
19
+
20
+ ## Key Components
21
+
22
+ - `PWN::Plugins::*` — 66+ specialized modules
23
+ - `PWN::AI::*` — Multi-LLM clients + autonomous agent
24
+ - `PWN::SAST` — Static analysis & test case generation
25
+ - `PWN::Reports` — Automated reporting
26
+ - `PWN::Memory`, `Sessions`, `Cron`, `Skills`, `Config`
27
+ - `PWN::Driver` — Custom automation packages
28
+
29
+ See:
30
+ - [How PWN Works](How-PWN-Works.md)
31
+ - [Plugins](Plugins.md)
32
+ - [pwn-ai Agent](pwn-ai-Agent.md)
33
+
34
+ [[Diagrams]]
@@ -0,0 +1,18 @@
1
+ # Why PWN
2
+
3
+ In cybersecurity, proprietary black-box tools dominate. Threats evolve daily. An **open framework** for core security primitives, vulnerability research, exploitation techniques, and intelligent automation is essential.
4
+
5
+ ## Key Benefits
6
+
7
+ - **Transparency & Auditability**: Foundational modules remain open.
8
+ - **Extensibility**: Seamless bridges to commercial tools (Burp Suite Professional [preferred], Metasploit, Nmap, Nessus, ZAP, etc.).
9
+ - **Collaboration**: Accelerates zero-day discovery and reliable exploit development.
10
+ - **Continuous Security**: Integrates into CI/CD pipelines.
11
+ - **Reusable Intelligence**: AI skills, persistent memory, learning loops.
12
+ - **Accessibility**: Advanced red team / vuln research capabilities available to all.
13
+
14
+ PWN stands on the shoulders of security giants while keeping the core open and auditable.
15
+
16
+ See [How PWN Works](How-PWN-Works.md) for architecture.
17
+
18
+ [[Diagrams]]
@@ -0,0 +1,134 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN AI Integration &amp; Tool Calling Pages: 1 -->
7
+ <svg width="878pt" height="235pt"
8
+ viewBox="0.00 0.00 878.00 235.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 230.55)">
10
+ <title>PWN AI Integration &amp; Tool Calling</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-230.55 874.47,-230.55 874.47,4 -4,4"/>
12
+ <!-- User -->
13
+ <g id="node1" class="node">
14
+ <title>User</title>
15
+ <path fill="none" stroke="black" d="M55,-143.82C55,-143.82 12,-143.82 12,-143.82 6,-143.82 0,-137.82 0,-131.82 0,-131.82 0,-119.82 0,-119.82 0,-113.82 6,-107.82 12,-107.82 12,-107.82 55,-107.82 55,-107.82 61,-107.82 67,-113.82 67,-119.82 67,-119.82 67,-131.82 67,-131.82 67,-137.82 61,-143.82 55,-143.82"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="33.5" y="-122.52" font-family="Arial" font-size="9.00">User Prompt</text>
17
+ </g>
18
+ <!-- Agent -->
19
+ <g id="node2" class="node">
20
+ <title>Agent</title>
21
+ <ellipse fill="none" stroke="black" cx="274.61" cy="-125.82" rx="45.61" ry="18"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="274.61" y="-122.52" font-family="Arial" font-size="9.00">PWN::AI::Agent</text>
23
+ </g>
24
+ <!-- User&#45;&gt;Agent -->
25
+ <g id="edge1" class="edge">
26
+ <title>User&#45;&gt;Agent</title>
27
+ <path fill="none" stroke="black" d="M67.36,-127.31C73.24,-127.52 79.3,-127.71 85,-127.82 140.99,-128.93 155.01,-128.72 211,-127.82 213.07,-127.79 215.18,-127.75 217.31,-127.7"/>
28
+ <polygon fill="black" stroke="black" points="217.39,-131.2 227.3,-127.46 217.22,-124.21 217.39,-131.2"/>
29
+ </g>
30
+ <!-- Agent&#45;&gt;User -->
31
+ <g id="edge11" class="edge">
32
+ <title>Agent&#45;&gt;User</title>
33
+ <path fill="none" stroke="black" d="M239.56,-113.84C230.4,-111.14 220.42,-108.68 211,-107.32 155.58,-99.3 140.14,-97.54 85,-107.32 82.83,-107.71 80.63,-108.18 78.42,-108.72"/>
34
+ <polygon fill="black" stroke="black" points="77.55,-105.33 68.91,-111.46 79.49,-112.05 77.55,-105.33"/>
35
+ <text xml:space="preserve" text-anchor="middle" x="148" y="-110.52" font-family="Times,serif" font-size="14.00">final answer + artifacts</text>
36
+ </g>
37
+ <!-- LLM -->
38
+ <g id="node3" class="node">
39
+ <title>LLM</title>
40
+ <path fill="none" stroke="black" d="M553.72,-183.82C553.72,-183.82 488.97,-183.82 488.97,-183.82 482.97,-183.82 476.97,-177.82 476.97,-171.82 476.97,-171.82 476.97,-159.82 476.97,-159.82 476.97,-153.82 482.97,-147.82 488.97,-147.82 488.97,-147.82 553.72,-147.82 553.72,-147.82 559.72,-147.82 565.72,-153.82 565.72,-159.82 565.72,-159.82 565.72,-171.82 565.72,-171.82 565.72,-177.82 559.72,-183.82 553.72,-183.82"/>
41
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-167.77" font-family="Arial" font-size="9.00">LLM (Grok OAuth,</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-157.27" font-family="Arial" font-size="9.00">OpenAI, etc.)</text>
43
+ </g>
44
+ <!-- Agent&#45;&gt;LLM -->
45
+ <g id="edge2" class="edge">
46
+ <title>Agent&#45;&gt;LLM</title>
47
+ <path fill="none" stroke="black" d="M288.28,-143.25C299.59,-157.19 317.52,-175.71 338.22,-183.82 378.83,-199.74 428.27,-193.41 465.38,-184.11"/>
48
+ <polygon fill="black" stroke="black" points="466.25,-187.5 475.01,-181.54 464.45,-180.74 466.25,-187.5"/>
49
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-213.25" font-family="Times,serif" font-size="14.00">build prompt +</text>
50
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-196.75" font-family="Times,serif" font-size="14.00">tools schema</text>
51
+ </g>
52
+ <!-- Agent&#45;&gt;LLM -->
53
+ <g id="edge10" class="edge">
54
+ <title>Agent&#45;&gt;LLM</title>
55
+ <path fill="none" stroke="black" d="M311.12,-137.1C319.91,-139.59 329.35,-142.02 338.22,-143.82 380.46,-152.39 428.95,-158.05 465.27,-161.48"/>
56
+ <polygon fill="black" stroke="black" points="464.82,-164.95 475.1,-162.38 465.46,-157.98 464.82,-164.95"/>
57
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-163.67" font-family="Times,serif" font-size="14.00">continue conversation</text>
58
+ </g>
59
+ <!-- Tools -->
60
+ <g id="node4" class="node">
61
+ <title>Tools</title>
62
+ <path fill="none" stroke="black" d="M555.22,-90.82C555.22,-90.82 487.47,-90.82 487.47,-90.82 481.47,-90.82 475.47,-84.82 475.47,-78.82 475.47,-78.82 475.47,-52.82 475.47,-52.82 475.47,-46.82 481.47,-40.82 487.47,-40.82 487.47,-40.82 555.22,-40.82 555.22,-40.82 561.22,-40.82 567.22,-46.82 567.22,-52.82 567.22,-52.82 567.22,-78.82 567.22,-78.82 567.22,-84.82 561.22,-90.82 555.22,-90.82"/>
63
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-78.27" font-family="Arial" font-size="9.00">Tool Registry</text>
64
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-67.77" font-family="Arial" font-size="9.00">(pwn_eval, shell,</text>
65
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-57.27" font-family="Arial" font-size="9.00">memory_*, skill_*, </text>
66
+ <text xml:space="preserve" text-anchor="middle" x="521.34" y="-46.77" font-family="Arial" font-size="9.00">learning_*)</text>
67
+ </g>
68
+ <!-- Agent&#45;&gt;Tools -->
69
+ <g id="edge4" class="edge">
70
+ <title>Agent&#45;&gt;Tools</title>
71
+ <path fill="none" stroke="black" d="M302.38,-111.22C313.24,-105.83 326.06,-100.12 338.22,-96.32 379.22,-83.5 427.19,-75.74 463.61,-71.26"/>
72
+ <polygon fill="black" stroke="black" points="463.98,-74.74 473.5,-70.1 463.16,-67.79 463.98,-74.74"/>
73
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-99.52" font-family="Times,serif" font-size="14.00">dispatch</text>
74
+ </g>
75
+ <!-- LLM&#45;&gt;Agent -->
76
+ <g id="edge3" class="edge">
77
+ <title>LLM&#45;&gt;Agent</title>
78
+ <path fill="none" stroke="black" d="M497.01,-147.34C485.74,-139.55 471.62,-131.37 457.47,-127.32 415.52,-115.31 365.86,-115.83 329.04,-118.85"/>
79
+ <polygon fill="black" stroke="black" points="329.2,-115.32 319.56,-119.72 329.83,-122.29 329.2,-115.32"/>
80
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-130.52" font-family="Times,serif" font-size="14.00">tool_calls[]</text>
81
+ </g>
82
+ <!-- Tools&#45;&gt;Agent -->
83
+ <g id="edge9" class="edge">
84
+ <title>Tools&#45;&gt;Agent</title>
85
+ <path fill="none" stroke="black" d="M475.11,-50.64C436.87,-40.5 381.54,-32.32 338.22,-52.32 317.61,-61.84 301.28,-81.85 290.48,-98.6"/>
86
+ <polygon fill="black" stroke="black" points="287.77,-96.32 285.55,-106.68 293.74,-99.97 287.77,-96.32"/>
87
+ <text xml:space="preserve" text-anchor="middle" x="397.84" y="-55.52" font-family="Times,serif" font-size="14.00">results</text>
88
+ </g>
89
+ <!-- PWNNS -->
90
+ <g id="node5" class="node">
91
+ <title>PWNNS</title>
92
+ <path fill="none" stroke="black" d="M849.47,-119.57C849.47,-119.57 784.72,-119.57 784.72,-119.57 778.72,-119.57 772.72,-113.57 772.72,-107.57 772.72,-107.57 772.72,-92.07 772.72,-92.07 772.72,-86.07 778.72,-80.07 784.72,-80.07 784.72,-80.07 849.47,-80.07 849.47,-80.07 855.47,-80.07 861.47,-86.07 861.47,-92.07 861.47,-92.07 861.47,-107.57 861.47,-107.57 861.47,-113.57 855.47,-119.57 849.47,-119.57"/>
93
+ <text xml:space="preserve" text-anchor="middle" x="817.09" y="-107.02" font-family="Arial" font-size="9.00">PWN Namespace</text>
94
+ <text xml:space="preserve" text-anchor="middle" x="817.09" y="-96.52" font-family="Arial" font-size="9.00">(Plugins, SAST,</text>
95
+ <text xml:space="preserve" text-anchor="middle" x="817.09" y="-86.02" font-family="Arial" font-size="9.00">Reports, etc.)</text>
96
+ </g>
97
+ <!-- Tools&#45;&gt;PWNNS -->
98
+ <g id="edge5" class="edge">
99
+ <title>Tools&#45;&gt;PWNNS</title>
100
+ <path fill="none" stroke="black" d="M543.86,-91.12C554.94,-102.19 569.43,-113.97 585.22,-119.82 642.67,-141.11 713.47,-129.99 761.41,-117.49"/>
101
+ <polygon fill="black" stroke="black" points="762.29,-120.88 771.02,-114.87 760.45,-114.12 762.29,-120.88"/>
102
+ <text xml:space="preserve" text-anchor="middle" x="665.47" y="-135" font-family="Times,serif" font-size="14.00">PWN::Plugins::XXX.method</text>
103
+ </g>
104
+ <!-- External -->
105
+ <g id="node6" class="node">
106
+ <title>External</title>
107
+ <path fill="none" stroke="black" d="M858.47,-49.82C858.47,-49.82 775.72,-49.82 775.72,-49.82 769.72,-49.82 763.72,-43.82 763.72,-37.82 763.72,-37.82 763.72,-25.82 763.72,-25.82 763.72,-19.82 769.72,-13.82 775.72,-13.82 775.72,-13.82 858.47,-13.82 858.47,-13.82 864.47,-13.82 870.47,-19.82 870.47,-25.82 870.47,-25.82 870.47,-37.82 870.47,-37.82 870.47,-43.82 864.47,-49.82 858.47,-49.82"/>
108
+ <text xml:space="preserve" text-anchor="middle" x="817.09" y="-33.77" font-family="Arial" font-size="9.00">External Tools</text>
109
+ <text xml:space="preserve" text-anchor="middle" x="817.09" y="-23.27" font-family="Arial" font-size="9.00">(curl, nmap, msf, burp)</text>
110
+ </g>
111
+ <!-- Tools&#45;&gt;External -->
112
+ <g id="edge6" class="edge">
113
+ <title>Tools&#45;&gt;External</title>
114
+ <path fill="none" stroke="black" d="M567.39,-51.28C573.34,-49.74 579.39,-48.36 585.22,-47.32 641,-37.37 705.4,-33.68 751.98,-32.37"/>
115
+ <polygon fill="black" stroke="black" points="752,-35.87 761.91,-32.12 751.83,-28.87 752,-35.87"/>
116
+ <text xml:space="preserve" text-anchor="middle" x="665.47" y="-50.52" font-family="Times,serif" font-size="14.00">shell commands</text>
117
+ </g>
118
+ <!-- PWNNS&#45;&gt;Tools -->
119
+ <g id="edge7" class="edge">
120
+ <title>PWNNS&#45;&gt;Tools</title>
121
+ <path fill="none" stroke="black" d="M772.39,-88.11C763.61,-86.08 754.41,-84.19 745.72,-82.82 689.35,-73.93 624.21,-69.64 578.88,-67.61"/>
122
+ <polygon fill="black" stroke="black" points="579.16,-64.12 569.02,-67.19 578.87,-71.11 579.16,-64.12"/>
123
+ <text xml:space="preserve" text-anchor="middle" x="665.47" y="-102.52" font-family="Times,serif" font-size="14.00">return value</text>
124
+ <text xml:space="preserve" text-anchor="middle" x="665.47" y="-86.02" font-family="Times,serif" font-size="14.00">or exception</text>
125
+ </g>
126
+ <!-- External&#45;&gt;Tools -->
127
+ <g id="edge8" class="edge">
128
+ <title>External&#45;&gt;Tools</title>
129
+ <path fill="none" stroke="black" d="M763.5,-14.94C715.56,-2.41 643.54,9.14 585.22,-12.32 573.27,-16.72 562.04,-24.5 552.48,-32.79"/>
130
+ <polygon fill="black" stroke="black" points="550.26,-30.08 545.3,-39.44 555.01,-35.22 550.26,-30.08"/>
131
+ <text xml:space="preserve" text-anchor="middle" x="665.47" y="-15.52" font-family="Times,serif" font-size="14.00">stdout/stderr</text>
132
+ </g>
133
+ </g>
134
+ </svg>
@@ -0,0 +1,84 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN BurpSuite vs Zaproxy Preference Pages: 1 -->
7
+ <svg width="745pt" height="136pt"
8
+ viewBox="0.00 0.00 745.00 136.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 132.25)">
10
+ <title>PWN BurpSuite vs Zaproxy Preference</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-132.25 740.75,-132.25 740.75,4 -4,4"/>
12
+ <!-- Decision -->
13
+ <g id="node1" class="node">
14
+ <title>Decision</title>
15
+ <path fill="none" stroke="black" d="M210.56,-86.38C210.56,-86.38 141.69,-64.62 141.69,-64.62 135.97,-62.81 135.97,-59.19 141.69,-57.38 141.69,-57.38 210.56,-35.62 210.56,-35.62 216.28,-33.81 227.72,-33.81 233.44,-35.62 233.44,-35.62 302.31,-57.38 302.31,-57.38 308.03,-59.19 308.03,-62.81 302.31,-64.62 302.31,-64.62 233.44,-86.38 233.44,-86.38 227.72,-88.19 216.28,-88.19 210.56,-86.38"/>
16
+ <text xml:space="preserve" text-anchor="middle" x="222" y="-62.95" font-family="Arial" font-size="9.00">Web Proxy Choice</text>
17
+ <text xml:space="preserve" text-anchor="middle" x="222" y="-52.45" font-family="Arial" font-size="9.00">in PWN</text>
18
+ </g>
19
+ <!-- Burp -->
20
+ <g id="node2" class="node">
21
+ <title>Burp</title>
22
+ <path fill="none" stroke="black" d="M586.25,-128.25C586.25,-128.25 484,-128.25 484,-128.25 478,-128.25 472,-122.25 472,-116.25 472,-116.25 472,-79.75 472,-79.75 472,-73.75 478,-67.75 484,-67.75 484,-67.75 586.25,-67.75 586.25,-67.75 592.25,-67.75 598.25,-73.75 598.25,-79.75 598.25,-79.75 598.25,-116.25 598.25,-116.25 598.25,-122.25 592.25,-128.25 586.25,-128.25"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-115.7" font-family="Arial" font-size="9.00">PWN::Plugins::BurpSuite</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-105.2" font-family="Arial" font-size="9.00">(preferred for most cases)</text>
25
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-94.7" font-family="Arial" font-size="9.00">&#45; Comprehensive scanning</text>
26
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-84.2" font-family="Arial" font-size="9.00">&#45; Rich ecosystem</text>
27
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-73.7" font-family="Arial" font-size="9.00">&#45; Active scan + extensions</text>
28
+ </g>
29
+ <!-- Decision&#45;&gt;Burp -->
30
+ <g id="edge2" class="edge">
31
+ <title>Decision&#45;&gt;Burp</title>
32
+ <path fill="none" stroke="black" d="M290.13,-68.98C340.2,-74.94 408.58,-83.07 460.21,-89.21"/>
33
+ <polygon fill="black" stroke="black" points="459.77,-92.68 470.12,-90.39 460.6,-85.73 459.77,-92.68"/>
34
+ <text xml:space="preserve" text-anchor="middle" x="392.88" y="-91.28" font-family="Times,serif" font-size="14.00">default / most features</text>
35
+ </g>
36
+ <!-- Zap -->
37
+ <g id="node3" class="node">
38
+ <title>Zap</title>
39
+ <path fill="none" stroke="black" d="M578,-50C578,-50 492.25,-50 492.25,-50 486.25,-50 480.25,-44 480.25,-38 480.25,-38 480.25,-12 480.25,-12 480.25,-6 486.25,0 492.25,0 492.25,0 578,0 578,0 584,0 590,-6 590,-12 590,-12 590,-38 590,-38 590,-44 584,-50 578,-50"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-37.45" font-family="Arial" font-size="9.00">PWN::Plugins::Zaproxy</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-26.95" font-family="Arial" font-size="9.00">(fallback)</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-16.45" font-family="Arial" font-size="9.00">&#45; Open source</text>
43
+ <text xml:space="preserve" text-anchor="middle" x="535.12" y="-5.95" font-family="Arial" font-size="9.00">&#45; REST API scans</text>
44
+ </g>
45
+ <!-- Decision&#45;&gt;Zap -->
46
+ <g id="edge3" class="edge">
47
+ <title>Decision&#45;&gt;Zap</title>
48
+ <path fill="none" stroke="black" d="M275.28,-48.35C293.1,-44.46 313.2,-40.54 331.75,-38 377.15,-31.77 428.69,-28.52 468.4,-26.82"/>
49
+ <polygon fill="black" stroke="black" points="468.43,-30.32 478.29,-26.43 468.15,-23.33 468.43,-30.32"/>
50
+ <text xml:space="preserve" text-anchor="middle" x="392.88" y="-57.7" font-family="Times,serif" font-size="14.00">if Burp unavailable</text>
51
+ <text xml:space="preserve" text-anchor="middle" x="392.88" y="-41.2" font-family="Times,serif" font-size="14.00">or specific REST need</text>
52
+ </g>
53
+ <!-- Scan / Proxy / Exploit -->
54
+ <g id="node5" class="node">
55
+ <title>Scan / Proxy / Exploit</title>
56
+ <path fill="none" stroke="black" d="M724.75,-79C724.75,-79 647.25,-79 647.25,-79 641.25,-79 635.25,-73 635.25,-67 635.25,-67 635.25,-55 635.25,-55 635.25,-49 641.25,-43 647.25,-43 647.25,-43 724.75,-43 724.75,-43 730.75,-43 736.75,-49 736.75,-55 736.75,-55 736.75,-67 736.75,-67 736.75,-73 730.75,-79 724.75,-79"/>
57
+ <text xml:space="preserve" text-anchor="middle" x="686" y="-57.7" font-family="Arial" font-size="9.00">Scan / Proxy / Exploit</text>
58
+ </g>
59
+ <!-- Burp&#45;&gt;Scan / Proxy / Exploit -->
60
+ <g id="edge4" class="edge">
61
+ <title>Burp&#45;&gt;Scan / Proxy / Exploit</title>
62
+ <path fill="none" stroke="black" d="M598.4,-82.52C606.93,-80.4 615.68,-78.23 624.19,-76.11"/>
63
+ <polygon fill="black" stroke="black" points="624.86,-79.55 633.72,-73.75 623.17,-72.76 624.86,-79.55"/>
64
+ </g>
65
+ <!-- Zap&#45;&gt;Scan / Proxy / Exploit -->
66
+ <g id="edge5" class="edge">
67
+ <title>Zap&#45;&gt;Scan / Proxy / Exploit</title>
68
+ <path fill="none" stroke="black" d="M590.29,-38.1C601.27,-40.75 612.88,-43.56 624.07,-46.27"/>
69
+ <polygon fill="black" stroke="black" points="623.06,-49.62 633.61,-48.57 624.71,-42.82 623.06,-49.62"/>
70
+ </g>
71
+ <!-- UserTask -->
72
+ <g id="node4" class="node">
73
+ <title>UserTask</title>
74
+ <path fill="none" stroke="black" d="M81.25,-79C81.25,-79 12,-79 12,-79 6,-79 0,-73 0,-67 0,-67 0,-55 0,-55 0,-49 6,-43 12,-43 12,-43 81.25,-43 81.25,-43 87.25,-43 93.25,-49 93.25,-55 93.25,-55 93.25,-67 93.25,-67 93.25,-73 87.25,-79 81.25,-79"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="46.62" y="-57.7" font-family="Arial" font-size="9.00">Web App Test Task</text>
76
+ </g>
77
+ <!-- UserTask&#45;&gt;Decision -->
78
+ <g id="edge1" class="edge">
79
+ <title>UserTask&#45;&gt;Decision</title>
80
+ <path fill="none" stroke="black" d="M93.63,-61C101.15,-61 109.19,-61 117.45,-61"/>
81
+ <polygon fill="black" stroke="black" points="117.3,-64.5 127.3,-61 117.3,-57.5 117.3,-64.5"/>
82
+ </g>
83
+ </g>
84
+ </svg>