pwn 0.5.615 → 0.5.617

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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -10
  3. data/bin/pwn +47 -2
  4. data/bin/pwn_gqrx_scanner +75 -18
  5. data/documentation/Diagrams.md +123 -40
  6. data/documentation/General-PWN-Usage.md +50 -30
  7. data/documentation/Home.md +78 -51
  8. data/documentation/How-PWN-Works.md +59 -57
  9. data/documentation/Installation.md +53 -28
  10. data/documentation/What-is-PWN.md +51 -32
  11. data/documentation/Why-PWN.md +41 -11
  12. data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
  13. data/documentation/diagrams/build.sh +20 -0
  14. data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
  15. data/documentation/diagrams/code-scanning-sast.svg +139 -79
  16. data/documentation/diagrams/dot/_THEME.md +27 -0
  17. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  18. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
  19. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  20. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
  21. data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
  22. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  23. data/documentation/diagrams/dot/driver-framework.dot +36 -14
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  25. data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
  26. data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
  27. data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
  28. data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
  29. data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
  30. data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
  31. data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
  32. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
  33. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
  34. data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
  35. data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
  36. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  37. data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
  38. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  39. data/documentation/diagrams/dot/web-application-testing.dot +45 -23
  40. data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
  41. data/documentation/diagrams/driver-framework.svg +87 -66
  42. data/documentation/diagrams/fuzzing-workflow.svg +128 -115
  43. data/documentation/diagrams/history-to-drivers.svg +84 -82
  44. data/documentation/diagrams/memory-skills-detailed.svg +167 -119
  45. data/documentation/diagrams/network-infra-testing.svg +146 -84
  46. data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
  47. data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
  48. data/documentation/diagrams/plugin-ecosystem.svg +225 -121
  49. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
  50. data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
  51. data/documentation/diagrams/reporting-pipeline.svg +128 -68
  52. data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
  53. data/documentation/diagrams/sessions-cron-automation.svg +112 -68
  54. data/documentation/diagrams/web-application-testing.svg +136 -100
  55. data/documentation/diagrams/zero-day-research-flow.svg +116 -112
  56. data/git_commit.sh +1 -1
  57. data/lib/pwn/ai/agent/assembly.rb +1 -1
  58. data/lib/pwn/ai/agent/btc.rb +1 -1
  59. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  60. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  61. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  62. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  63. data/lib/pwn/ai/agent/introspection.rb +91 -0
  64. data/lib/pwn/ai/agent/learning.rb +6 -4
  65. data/lib/pwn/ai/agent/loop.rb +15 -0
  66. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  67. data/lib/pwn/ai/agent/sast.rb +1 -1
  68. data/lib/pwn/ai/agent/swarm.rb +437 -0
  69. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  70. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  71. data/lib/pwn/ai/agent/tools/learning.rb +108 -0
  72. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  73. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  74. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  75. data/lib/pwn/ai/agent/tools/skills.rb +30 -0
  76. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  77. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  78. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  79. data/lib/pwn/ai/agent.rb +3 -0
  80. data/lib/pwn/ai/anthropic.rb +19 -4
  81. data/lib/pwn/ai.rb +0 -1
  82. data/lib/pwn/config.rb +10 -23
  83. data/lib/pwn/cron.rb +16 -7
  84. data/lib/pwn/plugins/repl.rb +90 -281
  85. data/lib/pwn/sdr/decoder/base.rb +251 -0
  86. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  87. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  88. data/lib/pwn/sdr/decoder.rb +1 -0
  89. data/lib/pwn/sdr/gqrx.rb +446 -65
  90. data/lib/pwn/version.rb +1 -1
  91. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  92. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  93. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  94. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  95. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  96. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  97. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  98. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  99. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  100. data/third_party/pwn_rdoc.jsonl +178 -33
  101. metadata +27 -3
  102. data/lib/pwn/ai/introspection.rb +0 -76
@@ -3,110 +3,170 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: PWN Code Scanning &amp; SAST Pages: 1 -->
7
- <svg width="930pt" height="137pt"
8
- viewBox="0.00 0.00 930.00 137.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.75)">
10
- <title>PWN Code Scanning &amp; SAST</title>
11
- <polygon fill="white" stroke="none" points="-4,4 -4,-132.75 926.19,-132.75 926.19,4 -4,4"/>
12
- <!-- Source -->
6
+ <!-- Title: PWN_SAST Pages: 1 -->
7
+ <svg width="818pt" height="484pt"
8
+ viewBox="0.00 0.00 818.00 484.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(43.2 441.2)">
10
+ <title>PWN_SAST</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-441.2 775.2,-441.2 775.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="131.25" y="-376" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::SAST — Static Application Security Testing</text>
13
+ <text xml:space="preserve" text-anchor="start" x="229.88" y="-364.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">48 rules · multi&#45;language · bin/pwn_sast · Reports::SAST</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_engine</title>
16
+ <path fill="#022c22" stroke="#047857" d="M178,-138C178,-138 290.75,-138 290.75,-138 296.75,-138 302.75,-144 302.75,-150 302.75,-150 302.75,-274 302.75,-274 302.75,-280 296.75,-286 290.75,-286 290.75,-286 178,-286 178,-286 172,-286 166,-280 166,-274 166,-274 166,-150 166,-150 166,-144 172,-138 178,-138"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="234.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">SAST Engine</text>
18
+ </g>
19
+ <g id="clust2" class="cluster">
20
+ <title>cluster_rules</title>
21
+ <path fill="#422006" stroke="#a16207" d="M384.75,-8C384.75,-8 538.75,-8 538.75,-8 544.75,-8 550.75,-14 550.75,-20 550.75,-20 550.75,-339 550.75,-339 550.75,-345 544.75,-351 538.75,-351 538.75,-351 384.75,-351 384.75,-351 378.75,-351 372.75,-345 372.75,-339 372.75,-339 372.75,-20 372.75,-20 372.75,-14 378.75,-8 384.75,-8"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="461.75" y="-328" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Rule Families (48)</text>
23
+ </g>
24
+ <g id="clust3" class="cluster">
25
+ <title>cluster_out</title>
26
+ <path fill="#2e1065" stroke="#6d28d9" d="M632.75,-138C632.75,-138 712,-138 712,-138 718,-138 724,-144 724,-150 724,-150 724,-274 724,-274 724,-280 718,-286 712,-286 712,-286 632.75,-286 632.75,-286 626.75,-286 620.75,-280 620.75,-274 620.75,-274 620.75,-150 620.75,-150 620.75,-144 626.75,-138 632.75,-138"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
28
+ </g>
29
+ <!-- Src -->
13
30
  <g id="node1" class="node">
14
- <title>Source</title>
15
- <path fill="none" stroke="black" d="M62.5,-36C62.5,-36 12,-36 12,-36 6,-36 0,-30 0,-24 0,-24 0,-12 0,-12 0,-6 6,0 12,0 12,0 62.5,0 62.5,0 68.5,0 74.5,-6 74.5,-12 74.5,-12 74.5,-24 74.5,-24 74.5,-30 68.5,-36 62.5,-36"/>
16
- <text xml:space="preserve" text-anchor="middle" x="37.25" y="-19.95" font-family="Arial" font-size="9.00">Source Code</text>
17
- <text xml:space="preserve" text-anchor="middle" x="37.25" y="-9.45" font-family="Arial" font-size="9.00">(Git, Local Dir)</text>
31
+ <title>Src</title>
32
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M76,-214C76,-214 12,-214 12,-214 6,-214 0,-208 0,-202 0,-202 0,-190 0,-190 0,-184 6,-178 12,-178 12,-178 76,-178 76,-178 82,-178 88,-184 88,-190 88,-190 88,-202 88,-202 88,-208 82,-214 76,-214"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="44" y="-198.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">📁 &#160;Source Tree</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="44" y="-186.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">git clone / repo</text>
18
35
  </g>
19
- <!-- SAST -->
36
+ <!-- Factory -->
20
37
  <g id="node2" class="node">
21
- <title>SAST</title>
22
- <ellipse fill="none" stroke="black" cx="174.26" cy="-55" rx="62.76" ry="20.51"/>
23
- <text xml:space="preserve" text-anchor="middle" x="174.26" y="-56.95" font-family="Arial" font-size="9.00">PWN::SAST</text>
24
- <text xml:space="preserve" text-anchor="middle" x="174.26" y="-46.45" font-family="Arial" font-size="9.00">(analyze, testgen)</text>
38
+ <title>Factory</title>
39
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M261.75,-182C261.75,-182 206,-182 206,-182 200,-182 194,-176 194,-170 194,-170 194,-158 194,-158 194,-152 200,-146 206,-146 206,-146 261.75,-146 261.75,-146 267.75,-146 273.75,-152 273.75,-158 273.75,-158 273.75,-170 273.75,-170 273.75,-176 267.75,-182 261.75,-182"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="233.88" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">SAST::Factory</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="233.88" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rule loader</text>
25
42
  </g>
26
- <!-- Source&#45;&gt;SAST -->
43
+ <!-- Src&#45;&gt;Factory -->
27
44
  <g id="edge1" class="edge">
28
- <title>Source&#45;&gt;SAST</title>
29
- <path fill="none" stroke="black" d="M74.78,-28.01C86.93,-31.34 100.77,-35.13 114.17,-38.81"/>
30
- <polygon fill="black" stroke="black" points="113.24,-42.18 123.81,-41.45 115.09,-35.43 113.24,-42.18"/>
45
+ <title>Src&#45;&gt;Factory</title>
46
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-188.58C117.01,-183.73 154.19,-177.4 183.69,-172.38"/>
47
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="184.02,-175.16 191.44,-171.06 183.08,-169.64 184.02,-175.16"/>
31
48
  </g>
32
- <!-- Static -->
49
+ <!-- TCE -->
33
50
  <g id="node3" class="node">
34
- <title>Static</title>
35
- <path fill="none" stroke="black" d="M374.76,-128.75C374.76,-128.75 286.01,-128.75 286.01,-128.75 280.01,-128.75 274.01,-122.75 274.01,-116.75 274.01,-116.75 274.01,-101.25 274.01,-101.25 274.01,-95.25 280.01,-89.25 286.01,-89.25 286.01,-89.25 374.76,-89.25 374.76,-89.25 380.76,-89.25 386.76,-95.25 386.76,-101.25 386.76,-101.25 386.76,-116.75 386.76,-116.75 386.76,-122.75 380.76,-128.75 374.76,-128.75"/>
36
- <text xml:space="preserve" text-anchor="middle" x="330.39" y="-116.2" font-family="Arial" font-size="9.00">Static Analysis</text>
37
- <text xml:space="preserve" text-anchor="middle" x="330.39" y="-105.7" font-family="Arial" font-size="9.00">(RuboCop, Brakeman,</text>
38
- <text xml:space="preserve" text-anchor="middle" x="330.39" y="-95.2" font-family="Arial" font-size="9.00">Semgrep, custom rules)</text>
51
+ <title>TCE</title>
52
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M265.88,-247C265.88,-247 201.88,-247 201.88,-247 195.88,-247 189.88,-241 189.88,-235 189.88,-235 189.88,-223 189.88,-223 189.88,-217 195.88,-211 201.88,-211 201.88,-211 265.88,-211 265.88,-211 271.88,-211 277.88,-217 277.88,-223 277.88,-223 277.88,-235 277.88,-235 277.88,-241 271.88,-247 265.88,-247"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="233.88" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TestCaseEngine</text>
54
+ <text xml:space="preserve" text-anchor="middle" x="233.88" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generate probes</text>
39
55
  </g>
40
- <!-- SAST&#45;&gt;Static -->
56
+ <!-- Src&#45;&gt;TCE -->
41
57
  <g id="edge2" class="edge">
42
- <title>SAST&#45;&gt;Static</title>
43
- <path fill="none" stroke="black" d="M218.19,-70.04C232.16,-74.94 248,-80.49 263.26,-85.83"/>
44
- <polygon fill="black" stroke="black" points="261.68,-88.99 272.27,-88.99 263.99,-82.38 261.68,-88.99"/>
58
+ <title>Src&#45;&gt;TCE</title>
59
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-203.65C115.84,-208.44 151.15,-214.65 180.02,-219.72"/>
60
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="179.24,-222.42 187.6,-221.05 180.2,-216.91 179.24,-222.42"/>
45
61
  </g>
46
- <!-- TestGen -->
62
+ <!-- Cmd -->
47
63
  <g id="node4" class="node">
48
- <title>TestGen</title>
49
- <path fill="none" stroke="black" d="M369.14,-71C369.14,-71 291.64,-71 291.64,-71 285.64,-71 279.64,-65 279.64,-59 279.64,-59 279.64,-47 279.64,-47 279.64,-41 285.64,-35 291.64,-35 291.64,-35 369.14,-35 369.14,-35 375.14,-35 381.14,-41 381.14,-47 381.14,-47 381.14,-59 381.14,-59 381.14,-65 375.14,-71 369.14,-71"/>
50
- <text xml:space="preserve" text-anchor="middle" x="330.39" y="-54.95" font-family="Arial" font-size="9.00">Test Case Gen</text>
51
- <text xml:space="preserve" text-anchor="middle" x="330.39" y="-44.45" font-family="Arial" font-size="9.00">(unit/integration fuzz)</text>
64
+ <title>Cmd</title>
65
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M515.75,-52C515.75,-52 406.75,-52 406.75,-52 400.75,-52 394.75,-46 394.75,-40 394.75,-40 394.75,-28 394.75,-28 394.75,-22 400.75,-16 406.75,-16 406.75,-16 515.75,-16 515.75,-16 521.75,-16 527.75,-22 527.75,-28 527.75,-28 527.75,-40 527.75,-40 527.75,-46 521.75,-52 515.75,-52"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cmd_execution_*</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">java · py · ruby · go · scala</text>
52
68
  </g>
53
- <!-- SAST&#45;&gt;TestGen -->
69
+ <!-- Factory&#45;&gt;Cmd -->
54
70
  <g id="edge3" class="edge">
55
- <title>SAST&#45;&gt;TestGen</title>
56
- <path fill="none" stroke="black" d="M237.06,-54.2C247.28,-54.07 257.88,-53.93 268.09,-53.8"/>
57
- <polygon fill="black" stroke="black" points="267.94,-57.3 277.9,-53.67 267.85,-50.3 267.94,-57.3"/>
71
+ <title>Factory&#45;&gt;Cmd</title>
72
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M257.15,-145.65C283.5,-124.59 329.29,-90 372.75,-67 379.97,-63.18 387.73,-59.58 395.54,-56.28"/>
73
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="396.54,-58.89 402.88,-53.27 394.42,-53.71 396.54,-58.89"/>
58
74
  </g>
59
- <!-- Findings -->
75
+ <!-- Web -->
60
76
  <g id="node5" class="node">
61
- <title>Findings</title>
62
- <path fill="none" stroke="black" d="M578.26,-73C578.26,-73 521.76,-73 521.76,-73 515.76,-73 509.76,-67 509.76,-61 509.76,-61 509.76,-49 509.76,-49 509.76,-43 515.76,-37 521.76,-37 521.76,-37 578.26,-37 578.26,-37 584.26,-37 590.26,-43 590.26,-49 590.26,-49 590.26,-61 590.26,-61 590.26,-67 584.26,-73 578.26,-73"/>
63
- <text xml:space="preserve" text-anchor="middle" x="550.01" y="-56.95" font-family="Arial" font-size="9.00">Vulns / Findings</text>
64
- <text xml:space="preserve" text-anchor="middle" x="550.01" y="-46.45" font-family="Arial" font-size="9.00">(CWE mapped)</text>
77
+ <title>Web</title>
78
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M526.62,-117C526.62,-117 395.88,-117 395.88,-117 389.88,-117 383.88,-111 383.88,-105 383.88,-105 383.88,-93 383.88,-93 383.88,-87 389.88,-81 395.88,-81 395.88,-81 526.62,-81 526.62,-81 532.62,-81 538.62,-87 538.62,-93 538.62,-93 538.62,-105 538.62,-105 538.62,-111 532.62,-117 526.62,-117"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">csrf · redirect · redos</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">inner/outer_html · location_hash</text>
65
81
  </g>
66
- <!-- Static&#45;&gt;Findings -->
82
+ <!-- Factory&#45;&gt;Web -->
67
83
  <g id="edge4" class="edge">
68
- <title>Static&#45;&gt;Findings</title>
69
- <path fill="none" stroke="black" d="M387.15,-95.16C421.54,-86.63 465.3,-75.77 498.65,-67.5"/>
70
- <polygon fill="black" stroke="black" points="499.2,-70.97 508.06,-65.16 497.51,-64.17 499.2,-70.97"/>
84
+ <title>Factory&#45;&gt;Web</title>
85
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-152.6C305.35,-143.68 349.28,-131 386.67,-120.22"/>
86
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="387.22,-122.98 394.13,-118.07 385.67,-117.6 387.22,-122.98"/>
71
87
  </g>
72
- <!-- TestGen&#45;&gt;Findings -->
73
- <g id="edge5" class="edge">
74
- <title>TestGen&#45;&gt;Findings</title>
75
- <path fill="none" stroke="black" d="M381.59,-53.46C416.55,-53.78 463.02,-54.21 498.13,-54.53"/>
76
- <polygon fill="black" stroke="black" points="498.02,-58.03 508.05,-54.62 498.08,-51.03 498.02,-58.03"/>
77
- </g>
78
- <!-- Reports -->
88
+ <!-- Cryp -->
79
89
  <g id="node6" class="node">
80
- <title>Reports</title>
81
- <ellipse fill="none" stroke="black" cx="713.35" cy="-55" rx="86.09" ry="20.51"/>
82
- <text xml:space="preserve" text-anchor="middle" x="713.35" y="-56.95" font-family="Arial" font-size="9.00">PWN::Reports</text>
83
- <text xml:space="preserve" text-anchor="middle" x="713.35" y="-46.45" font-family="Arial" font-size="9.00">(generate PDF/MD/JSON)</text>
90
+ <title>Cryp</title>
91
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M519.5,-182C519.5,-182 403,-182 403,-182 397,-182 391,-176 391,-170 391,-170 391,-158 391,-158 391,-152 397,-146 403,-146 403,-146 519.5,-146 519.5,-146 525.5,-146 531.5,-152 531.5,-158 531.5,-158 531.5,-170 531.5,-170 531.5,-176 525.5,-182 519.5,-182"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">md5 · ssl · keystore</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">padding_oracle · private_key</text>
84
94
  </g>
85
- <!-- Findings&#45;&gt;Reports -->
86
- <g id="edge6" class="edge">
87
- <title>Findings&#45;&gt;Reports</title>
88
- <path fill="none" stroke="black" d="M590.48,-55C598.29,-55 606.79,-55 615.57,-55"/>
89
- <polygon fill="black" stroke="black" points="615.28,-58.5 625.28,-55 615.28,-51.5 615.28,-58.5"/>
95
+ <!-- Factory&#45;&gt;Cryp -->
96
+ <g id="edge5" class="edge">
97
+ <title>Factory&#45;&gt;Cryp</title>
98
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-164C303.83,-164 345,-164 381.11,-164"/>
99
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="380.69,-166.8 388.69,-164 380.69,-161.2 380.69,-166.8"/>
90
100
  </g>
91
- <!-- REPL -->
101
+ <!-- Data -->
92
102
  <g id="node7" class="node">
93
- <title>REPL</title>
94
- <path fill="none" stroke="black" d="M910.19,-36C910.19,-36 848.44,-36 848.44,-36 842.44,-36 836.44,-30 836.44,-24 836.44,-24 836.44,-12 836.44,-12 836.44,-6 842.44,0 848.44,0 848.44,0 910.19,0 910.19,0 916.19,0 922.19,-6 922.19,-12 922.19,-12 922.19,-24 922.19,-24 922.19,-30 916.19,-36 910.19,-36"/>
95
- <text xml:space="preserve" text-anchor="middle" x="879.32" y="-19.95" font-family="Arial" font-size="9.00">REPL / Agent</text>
96
- <text xml:space="preserve" text-anchor="middle" x="879.32" y="-9.45" font-family="Arial" font-size="9.00">(inspect findings)</text>
103
+ <title>Data</title>
104
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M510.88,-247C510.88,-247 411.62,-247 411.62,-247 405.62,-247 399.62,-241 399.62,-235 399.62,-235 399.62,-223 399.62,-223 399.62,-217 405.62,-211 411.62,-211 411.62,-211 510.88,-211 510.88,-211 516.88,-211 522.88,-217 522.88,-223 522.88,-223 522.88,-235 522.88,-235 522.88,-241 516.88,-247 510.88,-247"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sql · eval · deserial_java</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">log4j · php_type_juggling</text>
97
107
  </g>
98
- <!-- Reports&#45;&gt;REPL -->
108
+ <!-- TCE&#45;&gt;Data -->
109
+ <g id="edge6" class="edge">
110
+ <title>TCE&#45;&gt;Data</title>
111
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-229C309.8,-229 353.03,-229 389.45,-229"/>
112
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="389.07,-231.8 397.07,-229 389.07,-226.2 389.07,-231.8"/>
113
+ </g>
114
+ <!-- Mem -->
115
+ <g id="node8" class="node">
116
+ <title>Mem</title>
117
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M491,-312C491,-312 431.5,-312 431.5,-312 425.5,-312 419.5,-306 419.5,-300 419.5,-300 419.5,-288 419.5,-288 419.5,-282 425.5,-276 431.5,-276 431.5,-276 491,-276 491,-276 497,-276 503,-282 503,-288 503,-288 503,-300 503,-300 503,-306 497,-312 491,-312"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-296.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">banned_c_calls</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="461.25" y="-284.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">use_after_free</text>
120
+ </g>
121
+ <!-- TCE&#45;&gt;Mem -->
99
122
  <g id="edge7" class="edge">
100
- <title>Reports&#45;&gt;REPL</title>
101
- <path fill="none" stroke="black" d="M776.81,-40.91C792.83,-37.29 809.91,-33.44 825.4,-29.94"/>
102
- <polygon fill="black" stroke="black" points="825.89,-33.42 834.88,-27.8 824.35,-26.59 825.89,-33.42"/>
103
- </g>
104
- <!-- REPL&#45;&gt;Source -->
123
+ <title>TCE&#45;&gt;Mem</title>
124
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-241.53C315.99,-252.39 370.49,-268.11 410.01,-279.51"/>
125
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="408.85,-282.09 417.32,-281.62 410.41,-276.71 408.85,-282.09"/>
126
+ </g>
127
+ <!-- Report -->
128
+ <g id="node9" class="node">
129
+ <title>Report</title>
130
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M701.75,-182C701.75,-182 643,-182 643,-182 637,-182 631,-176 631,-170 631,-170 631,-158 631,-158 631,-152 637,-146 643,-146 643,-146 701.75,-146 701.75,-146 707.75,-146 713.75,-152 713.75,-158 713.75,-158 713.75,-170 713.75,-170 713.75,-176 707.75,-182 701.75,-182"/>
131
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports::SAST</text>
132
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">HTML + JSON</text>
133
+ </g>
134
+ <!-- Cmd&#45;&gt;Report -->
105
135
  <g id="edge8" class="edge">
106
- <title>REPL&#45;&gt;Source</title>
107
- <path fill="none" stroke="black" d="M836.25,-13.22C803.17,-9.88 755.88,-6 714.35,-6 173.26,-6 173.26,-6 173.26,-6 144.28,-6 111.94,-8.78 86.18,-11.66"/>
108
- <polygon fill="black" stroke="black" points="85.87,-8.17 76.35,-12.81 86.69,-15.12 85.87,-8.17"/>
109
- <text xml:space="preserve" text-anchor="middle" x="448.26" y="-9.2" font-family="Times,serif" font-size="14.00">patch &amp; re&#45;scan</text>
136
+ <title>Cmd&#45;&gt;Report</title>
137
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M520.12,-52.52C530.59,-56.72 541.2,-61.57 550.75,-67 586.16,-87.14 621.93,-117.44 645.22,-138.81"/>
138
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="643.12,-140.67 650.88,-144.07 646.93,-136.57 643.12,-140.67"/>
139
+ </g>
140
+ <!-- Web&#45;&gt;Report -->
141
+ <g id="edge9" class="edge">
142
+ <title>Web&#45;&gt;Report</title>
143
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M522.18,-117.63C553.54,-127.38 591.51,-139.17 621.29,-148.43"/>
144
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.3,-151.06 628.77,-150.76 621.96,-145.71 620.3,-151.06"/>
145
+ </g>
146
+ <!-- Cryp&#45;&gt;Report -->
147
+ <g id="edge10" class="edge">
148
+ <title>Cryp&#45;&gt;Report</title>
149
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M531.89,-164C560.86,-164 593.87,-164 620.51,-164"/>
150
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.42,-166.8 628.42,-164 620.42,-161.2 620.42,-166.8"/>
151
+ </g>
152
+ <!-- DD -->
153
+ <g id="node10" class="node">
154
+ <title>DD</title>
155
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M704,-247C704,-247 640.75,-247 640.75,-247 634.75,-247 628.75,-241 628.75,-235 628.75,-235 628.75,-223 628.75,-223 628.75,-217 634.75,-211 640.75,-211 640.75,-211 704,-211 704,-211 710,-211 716,-217 716,-223 716,-223 716,-235 716,-235 716,-241 710,-247 704,-247"/>
156
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DefectDojo</text>
157
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">import / reimport</text>
158
+ </g>
159
+ <!-- Data&#45;&gt;DD -->
160
+ <g id="edge11" class="edge">
161
+ <title>Data&#45;&gt;DD</title>
162
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M523.3,-229C553.39,-229 589.33,-229 618.26,-229"/>
163
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="618.22,-231.8 626.22,-229 618.22,-226.2 618.22,-231.8"/>
164
+ </g>
165
+ <!-- Mem&#45;&gt;DD -->
166
+ <g id="edge12" class="edge">
167
+ <title>Mem&#45;&gt;DD</title>
168
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M503.57,-281.16C536.68,-270.87 583.34,-256.36 619.05,-245.26"/>
169
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="619.66,-248.01 626.47,-242.96 618,-242.66 619.66,-248.01"/>
110
170
  </g>
111
171
  </g>
112
172
  </svg>
@@ -0,0 +1,27 @@
1
+ # PWN Diagram Visual Theme
2
+
3
+ All `.dot` files in this directory share one visual language so the rendered
4
+ SVGs feel like a single coherent product.
5
+
6
+ | Element | Color | Hex |
7
+ |----------------------|-----------|-----------|
8
+ | Background | slate-900 | `#0f172a` |
9
+ | Cluster border | slate-700 | `#334155` |
10
+ | Cluster fill | slate-800 | `#1e293b` |
11
+ | Actor / Entry (blue) | sky-300 | `#7dd3fc` |
12
+ | AI / Agent (purple) | violet-300| `#c4b5fd` |
13
+ | Capability (green) | emerald-300| `#6ee7b7`|
14
+ | Persistence (amber) | amber-300 | `#fcd34d` |
15
+ | Target / Danger (red)| rose-300 | `#fda4af` |
16
+ | Edge default | slate-400 | `#94a3b8` |
17
+ | Edge highlight | sky-400 | `#38bdf8` |
18
+
19
+ Layout rules (to avoid criss-crossed edges):
20
+ 1. `rankdir=TB` (or `LR` for pipelines), `newrank=true`, `splines=spline`.
21
+ 2. Group every layer with `{rank=same; ...}` — edges go layer→layer only.
22
+ 3. Side/back edges use `constraint=false` + `style=dashed` and are kept to ≤3 per diagram.
23
+ 4. One `subgraph cluster_*` per logical layer with a translucent fill.
24
+ 5. Node order inside a rank matches edge destinations in the next rank
25
+ (Graphviz then draws parallel non-crossing edges).
26
+
27
+ Rebuild everything: `./build.sh` (from `documentation/diagrams/`).
@@ -0,0 +1,59 @@
1
+ digraph "PWN_Agent_Tool_Registry" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Registry — Toolsets exposed to the LLM</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">10 toolsets · 45+ callable tools · lib/pwn/ai/agent/tools/*</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.35, ranksep=1.4,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [color="#94a3b8", penwidth=1.1, arrowsize=0.7];
11
+
12
+ Registry [label="Registry\nJSON-Schema\nfunction defs", fillcolor="#c4b5fd", fontsize=12, penwidth=2];
13
+
14
+ subgraph cluster_ts {
15
+ label="Toolsets"; fontcolor="#a7f3d0"; style=rounded;
16
+ color="#047857"; bgcolor="#022c22"; penwidth=2;
17
+ terminal [label="terminal", fillcolor="#6ee7b7"];
18
+ pwn [label="pwn", fillcolor="#6ee7b7"];
19
+ memory [label="memory", fillcolor="#6ee7b7"];
20
+ skills [label="skills", fillcolor="#6ee7b7"];
21
+ sessions [label="sessions", fillcolor="#6ee7b7"];
22
+ learning [label="learning", fillcolor="#6ee7b7"];
23
+ metrics [label="metrics", fillcolor="#6ee7b7"];
24
+ extro [label="extrospection", fillcolor="#6ee7b7"];
25
+ cron [label="cron", fillcolor="#6ee7b7"];
26
+ swarm [label="swarm", fillcolor="#6ee7b7"];
27
+ }
28
+
29
+ subgraph cluster_tools {
30
+ label="Tools (LLM-callable)"; fontcolor="#fde68a"; style=rounded;
31
+ color="#a16207"; bgcolor="#422006"; penwidth=2;
32
+ node [fillcolor="#fcd34d", fontsize=9];
33
+ t_shell [label="shell"];
34
+ t_eval [label="pwn_eval"];
35
+ t_mem [label="memory_remember\nrecall · forget · clear"];
36
+ t_skill [label="skill_list · view\ncreate · add_reference · delete"];
37
+ t_sess [label="sessions_list · view\ncurrent · delete · stats"];
38
+ t_learn [label="learning_note_outcome\nreflect · distill_skill\nconsolidate · outcomes · reset"];
39
+ t_metric [label="metrics_summary\nmetrics_reset"];
40
+ t_extro [label="extro_snapshot · drift\nobserve · intel · correlate\nobservations · stats · reset"];
41
+ t_cron [label="cron_list · create · run\nenable · disable · remove"];
42
+ t_swarm [label="agent_list · spawn · ask\ndebate · broadcast\nswarm_bus · swarm_list"];
43
+ }
44
+
45
+ Registry -> terminal; Registry -> pwn; Registry -> memory;
46
+ Registry -> skills; Registry -> sessions; Registry -> learning;
47
+ Registry -> metrics; Registry -> extro; Registry -> cron; Registry -> swarm;
48
+
49
+ terminal -> t_shell [color="#f59e0b"];
50
+ pwn -> t_eval [color="#f59e0b"];
51
+ memory -> t_mem [color="#f59e0b"];
52
+ skills -> t_skill [color="#f59e0b"];
53
+ sessions -> t_sess [color="#f59e0b"];
54
+ learning -> t_learn [color="#f59e0b"];
55
+ metrics -> t_metric [color="#f59e0b"];
56
+ extro -> t_extro [color="#f59e0b"];
57
+ cron -> t_cron [color="#f59e0b"];
58
+ swarm -> t_swarm [color="#f59e0b"];
59
+ }
@@ -1,23 +1,50 @@
1
- digraph "PWN AI Integration & Tool Calling" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_AI_Integration" {
2
+ graph [
3
+ label=<<B>PWN::AI Multi-Provider LLM Integration</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">one Agent Loop · five interchangeable engines</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- User [label="User Prompt"];
6
- Agent [label="PWN::AI::Agent", shape=ellipse, fillcolor=lightblue];
7
- LLM [label="LLM (Grok OAuth,\nOpenAI, etc.)", shape=box];
8
- Tools [label="Tool Registry\n(pwn_eval, shell,\nmemory_*, skill_*, \nlearning_*)", shape=box];
9
- PWNNS [label="PWN Namespace\n(Plugins, SAST,\nReports, etc.)", shape=box];
10
- External [label="External Tools\n(curl, nmap, msf, burp)", shape=box];
13
+ Loop [label="PWN::AI::Agent::Loop\ntool-calling harness", fillcolor="#7dd3fc", penwidth=2];
11
14
 
12
- User -> Agent;
13
- Agent -> LLM [label="build prompt +\ntools schema"];
14
- LLM -> Agent [label="tool_calls[]"];
15
- Agent -> Tools [label="dispatch"];
16
- Tools -> PWNNS [label="PWN::Plugins::XXX.method"];
17
- Tools -> External [label="shell commands"];
18
- PWNNS -> Tools [label="return value\nor exception"];
19
- External -> Tools [label="stdout/stderr"];
20
- Tools -> Agent [label="results"];
21
- Agent -> LLM [label="continue conversation"];
22
- Agent -> User [label="final answer + artifacts"];
15
+ subgraph cluster_c {
16
+ label="PWN::AI::* Clients"; fontcolor="#ddd6fe"; style=rounded;
17
+ color="#6d28d9"; bgcolor="#2e1065";
18
+ OpenAI [label="OpenAI", fillcolor="#c4b5fd"];
19
+ Anthropic [label="Anthropic", fillcolor="#c4b5fd"];
20
+ Grok [label="Grok\nOAuth device flow", fillcolor="#c4b5fd"];
21
+ Gemini [label="Gemini", fillcolor="#c4b5fd"];
22
+ Ollama [label="Ollama\n(local)", fillcolor="#c4b5fd"];
23
+ }
24
+ {rank=same; OpenAI; Anthropic; Grok; Gemini; Ollama}
25
+
26
+ subgraph cluster_api {
27
+ label="Provider APIs"; fontcolor="#fecaca"; style="rounded,dashed";
28
+ color="#b91c1c"; bgcolor="#450a0a";
29
+ A1 [label="api.openai.com", fillcolor="#fda4af"];
30
+ A2 [label="api.anthropic.com", fillcolor="#fda4af"];
31
+ A3 [label="api.x.ai\nauth.x.ai", fillcolor="#fda4af"];
32
+ A4 [label="generativelanguage\n.googleapis.com", fillcolor="#fda4af"];
33
+ A5 [label="localhost:11434", fillcolor="#fda4af"];
34
+ }
35
+ {rank=same; A1; A2; A3; A4; A5}
36
+
37
+ Cfg [label="PWN::Config\n~/.pwn/config.yml\nengine · key · oauth", shape=cylinder, fillcolor="#fcd34d"];
38
+
39
+ Loop -> OpenAI [color="#a78bfa"];
40
+ Loop -> Anthropic [color="#a78bfa"];
41
+ Loop -> Grok [color="#a78bfa"];
42
+ Loop -> Gemini [color="#a78bfa"];
43
+ Loop -> Ollama [color="#a78bfa"];
44
+ OpenAI -> A1 [color="#fb7185"];
45
+ Anthropic -> A2 [color="#fb7185"];
46
+ Grok -> A3 [color="#fb7185"];
47
+ Gemini -> A4 [color="#fb7185"];
48
+ Ollama -> A5 [color="#fb7185"];
49
+ Cfg -> Loop [label="active engine", style=dashed, color="#fbbf24", constraint=false];
23
50
  }
@@ -0,0 +1,48 @@
1
+ digraph "PWN_AWS" {
2
+ graph [
3
+ label=<<B>PWN::AWS — Cloud Security (90 service wrappers)</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">enumerate → misconfig → escalate → persist</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.4, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ Creds [label="🔑 AWS Creds\nSTS · env · profile", fillcolor="#7dd3fc"];
14
+
15
+ subgraph cluster_enum {
16
+ label="Enumerate"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ IAM [label="IAM · STS\nOrganizations", fillcolor="#6ee7b7"];
19
+ EC2 [label="EC2 · ECS · ECR\nLambda · Lightsail", fillcolor="#6ee7b7"];
20
+ Net [label="Route53 · ELB\nAPI Gateway · CloudFront", fillcolor="#6ee7b7"];
21
+ }
22
+ subgraph cluster_mis {
23
+ label="Misconfig"; fontcolor="#fde68a"; style=rounded;
24
+ color="#a16207"; bgcolor="#422006";
25
+ S3 [label="S3 · Glacier\npublic buckets", fillcolor="#fcd34d"];
26
+ KMS [label="KMS · CloudHSM\nSecrets · SSM", fillcolor="#fcd34d"];
27
+ Log [label="CloudTrail\nCloudWatch · Config", fillcolor="#fcd34d"];
28
+ }
29
+ subgraph cluster_esc {
30
+ label="Escalate / Persist"; fontcolor="#fecaca"; style=rounded;
31
+ color="#b91c1c"; bgcolor="#450a0a";
32
+ Priv [label="iam:PassRole\nlambda invoke", fillcolor="#fda4af"];
33
+ Back [label="new access key\nEC2 userdata", fillcolor="#fda4af"];
34
+ }
35
+ Rep [label="pwn_aws_describe_resources\nReports", fillcolor="#c4b5fd"];
36
+
37
+ Creds -> IAM [color="#38bdf8"];
38
+ Creds -> EC2 [color="#38bdf8"];
39
+ Creds -> Net [color="#38bdf8"];
40
+ IAM -> S3 [color="#f59e0b"];
41
+ EC2 -> KMS [color="#f59e0b"];
42
+ Net -> Log [color="#f59e0b"];
43
+ S3 -> Priv [color="#fb7185"];
44
+ KMS -> Priv [color="#fb7185"];
45
+ Log -> Back [color="#fb7185"];
46
+ Priv -> Rep [color="#a78bfa"];
47
+ Back -> Rep [color="#a78bfa"];
48
+ }
@@ -1,15 +1,26 @@
1
- digraph "PWN BurpSuite vs Zaproxy Preference" {
2
- rankdir=LR;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_BurpVsZap" {
2
+ graph [
3
+ label=<<B>Web Proxy Selection BurpSuite ⭐ preferred over ZAP</B>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=TB, splines=spline, nodesep=0.7, ranksep=0.9,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Decision [label="Web Proxy Choice\nin PWN", shape=diamond, fillcolor=lightyellow];
6
- Burp [label="PWN::Plugins::BurpSuite\n(preferred for most cases)\n- Comprehensive scanning\n- Rich ecosystem\n- Active scan + extensions", shape=box, fillcolor=lightgreen];
7
- Zap [label="PWN::Plugins::Zaproxy\n(fallback)\n- Open source\n- REST API scans", shape=box, fillcolor=lightblue];
13
+ Need [label="Need web proxy /\nactive scanner?", shape=diamond,
14
+ style=filled, fillcolor="#7dd3fc", height=1.1];
15
+ Burp [label="PWN::Plugins::BurpSuite\nheadless · REST · richer scanner\nBApp ecosystem",
16
+ fillcolor="#6ee7b7", penwidth=2];
17
+ Zap [label="PWN::Plugins::Zaproxy\nOSS fallback",
18
+ fillcolor="#fcd34d"];
19
+ Both [label="Same downstream:\nTransparentBrowser proxy · Reports · DefectDojo",
20
+ fillcolor="#c4b5fd"];
8
21
 
9
- UserTask [label="Web App Test Task"];
10
- UserTask -> Decision;
11
- Decision -> Burp [label="default / most features"];
12
- Decision -> Zap [label="if Burp unavailable\nor specific REST need"];
13
- Burp -> "Scan / Proxy / Exploit";
14
- Zap -> "Scan / Proxy / Exploit";
22
+ Need -> Burp [label="Burp Pro available", color="#34d399", penwidth=2];
23
+ Need -> Zap [label="fallback", color="#f59e0b"];
24
+ Burp -> Both [color="#a78bfa"];
25
+ Zap -> Both [color="#a78bfa"];
15
26
  }