pwn 0.5.615 → 0.5.618

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 (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +109 -85
  3. data/README.md.bak +200 -0
  4. data/bin/pwn +47 -2
  5. data/bin/pwn_gqrx_scanner +75 -18
  6. data/documentation/AI-Integration.md +42 -26
  7. data/documentation/AWS.md +57 -0
  8. data/documentation/Agent-Tool-Registry.md +56 -0
  9. data/documentation/Banner.md +17 -0
  10. data/documentation/Blockchain.md +18 -0
  11. data/documentation/Bounty.md +21 -0
  12. data/documentation/BurpSuite.md +41 -16
  13. data/documentation/CLI-Drivers.md +58 -0
  14. data/documentation/Configuration.md +66 -0
  15. data/documentation/Contributing.md +33 -19
  16. data/documentation/Cron.md +47 -0
  17. data/documentation/Diagrams.md +123 -40
  18. data/documentation/Drivers.md +43 -16
  19. data/documentation/Extrospection.md +54 -0
  20. data/documentation/FFI.md +14 -0
  21. data/documentation/Fuzzing.md +36 -0
  22. data/documentation/General-PWN-Usage.md +50 -30
  23. data/documentation/Hardware.md +40 -0
  24. data/documentation/Home.md +78 -51
  25. data/documentation/How-PWN-Works.md +59 -57
  26. data/documentation/Installation.md +53 -28
  27. data/documentation/Metasploit.md +34 -0
  28. data/documentation/NmapIt.md +18 -12
  29. data/documentation/PWN.png +0 -0
  30. data/documentation/PWN_Contributors_and_Users.png +0 -0
  31. data/documentation/Persistence.md +38 -0
  32. data/documentation/Plugins.md +97 -47
  33. data/documentation/Reporting.md +25 -18
  34. data/documentation/SAST.md +39 -22
  35. data/documentation/SDR.md +40 -0
  36. data/documentation/Sessions.md +39 -0
  37. data/documentation/Skills-Memory-Learning.md +49 -29
  38. data/documentation/Swarm.md +71 -0
  39. data/documentation/Transparent-Browser.md +26 -22
  40. data/documentation/Troubleshooting.md +44 -25
  41. data/documentation/WWW.md +32 -0
  42. data/documentation/What-is-PWN.md +51 -32
  43. data/documentation/Why-PWN.md +41 -11
  44. data/documentation/diagrams/agent-tool-registry.svg +284 -0
  45. data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
  46. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  47. data/documentation/diagrams/build.sh +20 -0
  48. data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
  49. data/documentation/diagrams/code-scanning-sast.svg +139 -79
  50. data/documentation/diagrams/cron-scheduling.svg +148 -0
  51. data/documentation/diagrams/dot/_THEME.md +27 -0
  52. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  53. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
  54. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  55. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
  56. data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
  57. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  58. data/documentation/diagrams/dot/driver-framework.dot +36 -14
  59. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  60. data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
  61. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  62. data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
  63. data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
  64. data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
  65. data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
  66. data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
  67. data/documentation/diagrams/dot/persistence-filesystem.dot +29 -0
  68. data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
  69. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
  70. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
  71. data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
  72. data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
  73. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  74. data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
  75. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  76. data/documentation/diagrams/dot/web-application-testing.dot +45 -23
  77. data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
  78. data/documentation/diagrams/driver-framework.svg +87 -66
  79. data/documentation/diagrams/extrospection-world-awareness.svg +185 -0
  80. data/documentation/diagrams/fuzzing-workflow.svg +128 -115
  81. data/documentation/diagrams/hardware-hacking.svg +163 -0
  82. data/documentation/diagrams/history-to-drivers.svg +84 -82
  83. data/documentation/diagrams/memory-skills-detailed.svg +167 -119
  84. data/documentation/diagrams/network-infra-testing.svg +146 -84
  85. data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
  86. data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
  87. data/documentation/diagrams/persistence-filesystem.svg +174 -0
  88. data/documentation/diagrams/plugin-ecosystem.svg +225 -121
  89. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
  90. data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
  91. data/documentation/diagrams/reporting-pipeline.svg +128 -68
  92. data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
  93. data/documentation/diagrams/sdr-radio-flow.svg +146 -0
  94. data/documentation/diagrams/sessions-cron-automation.svg +112 -68
  95. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  96. data/documentation/diagrams/web-application-testing.svg +136 -100
  97. data/documentation/diagrams/zero-day-research-flow.svg +116 -112
  98. data/documentation/fax-spectrogram.png +0 -0
  99. data/documentation/fax-waveform.png +0 -0
  100. data/documentation/pwn-REPL.md +40 -24
  101. data/documentation/pwn-ai-Agent.md +59 -30
  102. data/documentation/pwn_android_war_dialer_session.png +0 -0
  103. data/documentation/pwn_install.png +0 -0
  104. data/documentation/pwn_wallpaper.jpg +0 -0
  105. data/documentation/ringing-spectrogram.png +0 -0
  106. data/documentation/ringing-waveform.png +0 -0
  107. data/git_commit.sh +1 -1
  108. data/lib/pwn/ai/agent/assembly.rb +1 -1
  109. data/lib/pwn/ai/agent/btc.rb +1 -1
  110. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  111. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  112. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  113. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  114. data/lib/pwn/ai/agent/introspection.rb +91 -0
  115. data/lib/pwn/ai/agent/learning.rb +6 -4
  116. data/lib/pwn/ai/agent/loop.rb +15 -0
  117. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  118. data/lib/pwn/ai/agent/sast.rb +1 -1
  119. data/lib/pwn/ai/agent/swarm.rb +437 -0
  120. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  121. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  122. data/lib/pwn/ai/agent/tools/learning.rb +108 -0
  123. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  124. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  125. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  126. data/lib/pwn/ai/agent/tools/skills.rb +30 -0
  127. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  128. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  129. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  130. data/lib/pwn/ai/agent.rb +3 -0
  131. data/lib/pwn/ai/anthropic.rb +19 -4
  132. data/lib/pwn/ai.rb +0 -1
  133. data/lib/pwn/config.rb +10 -23
  134. data/lib/pwn/cron.rb +16 -7
  135. data/lib/pwn/plugins/repl.rb +90 -281
  136. data/lib/pwn/sdr/decoder/base.rb +251 -0
  137. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  138. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  139. data/lib/pwn/sdr/decoder.rb +1 -0
  140. data/lib/pwn/sdr/gqrx.rb +446 -65
  141. data/lib/pwn/version.rb +1 -1
  142. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  143. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  144. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  145. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  146. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  147. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  148. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  149. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  150. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  151. data/third_party/pwn_rdoc.jsonl +199 -37
  152. metadata +65 -3
  153. data/lib/pwn/ai/introspection.rb +0 -76
@@ -3,132 +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 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 -->
6
+ <!-- Title: PWN_AI_Integration Pages: 1 -->
7
+ <svg width="680pt" height="496pt"
8
+ viewBox="0.00 0.00 680.00 496.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 453.2)">
10
+ <title>PWN_AI_Integration</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-453.2 636.7,-453.2 636.7,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="98.75" y="-388" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI — Multi&#45;Provider LLM Integration</text>
13
+ <text xml:space="preserve" text-anchor="start" x="186.12" y="-376.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">one Agent Loop · five interchangeable engines</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_c</title>
16
+ <path fill="#2e1065" stroke="#6d28d9" d="M213.25,-8C213.25,-8 365,-8 365,-8 371,-8 377,-14 377,-20 377,-20 377,-351 377,-351 377,-357 371,-363 365,-363 365,-363 213.25,-363 213.25,-363 207.25,-363 201.25,-357 201.25,-351 201.25,-351 201.25,-20 201.25,-20 201.25,-14 207.25,-8 213.25,-8"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="289.12" y="-340" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::* Clients</text>
18
+ </g>
19
+ <g id="clust3" class="cluster">
20
+ <title>cluster_api</title>
21
+ <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M468,-8C468,-8 581.5,-8 581.5,-8 587.5,-8 593.5,-14 593.5,-20 593.5,-20 593.5,-351 593.5,-351 593.5,-357 587.5,-363 581.5,-363 581.5,-363 468,-363 468,-363 462,-363 456,-357 456,-351 456,-351 456,-20 456,-20 456,-14 462,-8 468,-8"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="524.75" y="-340" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Provider APIs</text>
23
+ </g>
24
+ <!-- Loop -->
13
25
  <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>
26
+ <title>Loop</title>
27
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M102.25,-188C102.25,-188 12,-188 12,-188 6,-188 0,-182 0,-176 0,-176 0,-164 0,-164 0,-158 6,-152 12,-152 12,-152 102.25,-152 102.25,-152 108.25,-152 114.25,-158 114.25,-164 114.25,-164 114.25,-176 114.25,-176 114.25,-182 108.25,-188 102.25,-188"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-172.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::AI::Agent::Loop</text>
29
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-160.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">tool&#45;calling harness</text>
17
30
  </g>
18
- <!-- Agent -->
31
+ <!-- OpenAI -->
19
32
  <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>
33
+ <title>OpenAI</title>
34
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M303.62,-324C303.62,-324 273.62,-324 273.62,-324 267.62,-324 261.62,-318 261.62,-312 261.62,-312 261.62,-300 261.62,-300 261.62,-294 267.62,-288 273.62,-288 273.62,-288 303.62,-288 303.62,-288 309.62,-288 315.62,-294 315.62,-300 315.62,-300 315.62,-312 315.62,-312 315.62,-318 309.62,-324 303.62,-324"/>
35
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-302.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OpenAI</text>
23
36
  </g>
24
- <!-- User&#45;&gt;Agent -->
37
+ <!-- Loop&#45;&gt;OpenAI -->
25
38
  <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"/>
39
+ <title>Loop&#45;&gt;OpenAI</title>
40
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M80.78,-188.81C108.07,-210.83 155.92,-247.41 201.25,-272 217.35,-280.74 236.19,-288.42 252.15,-294.26"/>
41
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="250.85,-296.77 259.33,-296.82 252.73,-291.49 250.85,-296.77"/>
29
42
  </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 -->
43
+ <!-- Anthropic -->
38
44
  <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>
45
+ <title>Anthropic</title>
46
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M305.25,-256C305.25,-256 272,-256 272,-256 266,-256 260,-250 260,-244 260,-244 260,-232 260,-232 260,-226 266,-220 272,-220 272,-220 305.25,-220 305.25,-220 311.25,-220 317.25,-226 317.25,-232 317.25,-232 317.25,-244 317.25,-244 317.25,-250 311.25,-256 305.25,-256"/>
47
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-234.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Anthropic</text>
43
48
  </g>
44
- <!-- Agent&#45;&gt;LLM -->
49
+ <!-- Loop&#45;&gt;Anthropic -->
45
50
  <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
+ <title>Loop&#45;&gt;Anthropic</title>
52
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M115.15,-186.9C157.31,-199.39 213.54,-216.05 250.15,-226.9"/>
53
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="249.12,-229.51 257.59,-229.1 250.71,-224.14 249.12,-229.51"/>
51
54
  </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 -->
55
+ <!-- Grok -->
60
56
  <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>
57
+ <title>Grok</title>
58
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M324.75,-188C324.75,-188 252.5,-188 252.5,-188 246.5,-188 240.5,-182 240.5,-176 240.5,-176 240.5,-164 240.5,-164 240.5,-158 246.5,-152 252.5,-152 252.5,-152 324.75,-152 324.75,-152 330.75,-152 336.75,-158 336.75,-164 336.75,-164 336.75,-176 336.75,-176 336.75,-182 330.75,-188 324.75,-188"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-172.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Grok</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-160.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OAuth device flow</text>
74
61
  </g>
75
- <!-- LLM&#45;&gt;Agent -->
62
+ <!-- Loop&#45;&gt;Grok -->
76
63
  <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>
64
+ <title>Loop&#45;&gt;Grok</title>
65
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M115.15,-170C150.34,-170 195.32,-170 230.53,-170"/>
66
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="230.21,-172.8 238.21,-170 230.21,-167.2 230.21,-172.8"/>
81
67
  </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 -->
68
+ <!-- Gemini -->
90
69
  <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>
70
+ <title>Gemini</title>
71
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M303.62,-120C303.62,-120 273.62,-120 273.62,-120 267.62,-120 261.62,-114 261.62,-108 261.62,-108 261.62,-96 261.62,-96 261.62,-90 267.62,-84 273.62,-84 273.62,-84 303.62,-84 303.62,-84 309.62,-84 315.62,-90 315.62,-96 315.62,-96 315.62,-108 315.62,-108 315.62,-114 309.62,-120 303.62,-120"/>
72
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-98.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Gemini</text>
96
73
  </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>
74
+ <!-- Loop&#45;&gt;Gemini -->
75
+ <g id="edge4" class="edge">
76
+ <title>Loop&#45;&gt;Gemini</title>
77
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M115.15,-153.1C157.92,-140.43 215.17,-123.47 251.73,-112.64"/>
78
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="252.25,-115.4 259.12,-110.44 250.66,-110.03 252.25,-115.4"/>
103
79
  </g>
104
- <!-- External -->
80
+ <!-- Ollama -->
105
81
  <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>
82
+ <title>Ollama</title>
83
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M303.62,-52C303.62,-52 273.62,-52 273.62,-52 267.62,-52 261.62,-46 261.62,-40 261.62,-40 261.62,-28 261.62,-28 261.62,-22 267.62,-16 273.62,-16 273.62,-16 303.62,-16 303.62,-16 309.62,-16 315.62,-22 315.62,-28 315.62,-28 315.62,-40 315.62,-40 315.62,-46 309.62,-52 303.62,-52"/>
84
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Ollama</text>
85
+ <text xml:space="preserve" text-anchor="middle" x="288.62" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(local)</text>
110
86
  </g>
111
- <!-- Tools&#45;&gt;External -->
87
+ <!-- Loop&#45;&gt;Ollama -->
88
+ <g id="edge5" class="edge">
89
+ <title>Loop&#45;&gt;Ollama</title>
90
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M80.78,-151.19C108.07,-129.17 155.92,-92.59 201.25,-68 217.35,-59.26 236.19,-51.58 252.15,-45.74"/>
91
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="252.73,-48.51 259.33,-43.18 250.85,-43.23 252.73,-48.51"/>
92
+ </g>
93
+ <!-- A1 -->
94
+ <g id="node7" class="node">
95
+ <title>A1</title>
96
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M553.25,-324C553.25,-324 495.25,-324 495.25,-324 489.25,-324 483.25,-318 483.25,-312 483.25,-312 483.25,-300 483.25,-300 483.25,-294 489.25,-288 495.25,-288 495.25,-288 553.25,-288 553.25,-288 559.25,-288 565.25,-294 565.25,-300 565.25,-300 565.25,-312 565.25,-312 565.25,-318 559.25,-324 553.25,-324"/>
97
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-302.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.openai.com</text>
98
+ </g>
99
+ <!-- OpenAI&#45;&gt;A1 -->
112
100
  <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>
101
+ <title>OpenAI&#45;&gt;A1</title>
102
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M315.97,-306C353.96,-306 424.85,-306 473.03,-306"/>
103
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="472.98,-308.8 480.98,-306 472.98,-303.2 472.98,-308.8"/>
117
104
  </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>
105
+ <!-- A2 -->
106
+ <g id="node8" class="node">
107
+ <title>A2</title>
108
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M558.88,-256C558.88,-256 489.62,-256 489.62,-256 483.62,-256 477.62,-250 477.62,-244 477.62,-244 477.62,-232 477.62,-232 477.62,-226 483.62,-220 489.62,-220 489.62,-220 558.88,-220 558.88,-220 564.88,-220 570.88,-226 570.88,-232 570.88,-232 570.88,-244 570.88,-244 570.88,-250 564.88,-256 558.88,-256"/>
109
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-234.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.anthropic.com</text>
125
110
  </g>
126
- <!-- External&#45;&gt;Tools -->
111
+ <!-- Anthropic&#45;&gt;A2 -->
112
+ <g id="edge7" class="edge">
113
+ <title>Anthropic&#45;&gt;A2</title>
114
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M317.81,-238C354.74,-238 420.36,-238 467.51,-238"/>
115
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="467.31,-240.8 475.31,-238 467.31,-235.2 467.31,-240.8"/>
116
+ </g>
117
+ <!-- A3 -->
118
+ <g id="node9" class="node">
119
+ <title>A3</title>
120
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M539.25,-188C539.25,-188 509.25,-188 509.25,-188 503.25,-188 497.25,-182 497.25,-176 497.25,-176 497.25,-164 497.25,-164 497.25,-158 503.25,-152 509.25,-152 509.25,-152 539.25,-152 539.25,-152 545.25,-152 551.25,-158 551.25,-164 551.25,-164 551.25,-176 551.25,-176 551.25,-182 545.25,-188 539.25,-188"/>
121
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-172.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.x.ai</text>
122
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-160.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">auth.x.ai</text>
123
+ </g>
124
+ <!-- Grok&#45;&gt;A3 -->
127
125
  <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>
126
+ <title>Grok&#45;&gt;A3</title>
127
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M337.18,-170C381.49,-170 446.6,-170 486.89,-170"/>
128
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="486.84,-172.8 494.84,-170 486.84,-167.2 486.84,-172.8"/>
129
+ </g>
130
+ <!-- A4 -->
131
+ <g id="node10" class="node">
132
+ <title>A4</title>
133
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M562.25,-120C562.25,-120 486.25,-120 486.25,-120 480.25,-120 474.25,-114 474.25,-108 474.25,-108 474.25,-96 474.25,-96 474.25,-90 480.25,-84 486.25,-84 486.25,-84 562.25,-84 562.25,-84 568.25,-84 574.25,-90 574.25,-96 574.25,-96 574.25,-108 574.25,-108 574.25,-114 568.25,-120 562.25,-120"/>
134
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generativelanguage</text>
135
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">.googleapis.com</text>
136
+ </g>
137
+ <!-- Gemini&#45;&gt;A4 -->
138
+ <g id="edge9" class="edge">
139
+ <title>Gemini&#45;&gt;A4</title>
140
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M315.97,-102C351.62,-102 416.24,-102 463.88,-102"/>
141
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="463.81,-104.8 471.81,-102 463.81,-99.2 463.81,-104.8"/>
142
+ </g>
143
+ <!-- A5 -->
144
+ <g id="node11" class="node">
145
+ <title>A5</title>
146
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M554.38,-52C554.38,-52 494.12,-52 494.12,-52 488.12,-52 482.12,-46 482.12,-40 482.12,-40 482.12,-28 482.12,-28 482.12,-22 488.12,-16 494.12,-16 494.12,-16 554.38,-16 554.38,-16 560.38,-16 566.38,-22 566.38,-28 566.38,-28 566.38,-40 566.38,-40 566.38,-46 560.38,-52 554.38,-52"/>
147
+ <text xml:space="preserve" text-anchor="middle" x="524.25" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">localhost:11434</text>
148
+ </g>
149
+ <!-- Ollama&#45;&gt;A5 -->
150
+ <g id="edge10" class="edge">
151
+ <title>Ollama&#45;&gt;A5</title>
152
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M315.97,-34C353.63,-34 423.6,-34 471.75,-34"/>
153
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="471.71,-36.8 479.71,-34 471.71,-31.2 471.71,-36.8"/>
154
+ </g>
155
+ <!-- Cfg -->
156
+ <g id="node12" class="node">
157
+ <title>Cfg</title>
158
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M108.25,-82.75C108.25,-85.78 85.33,-88.25 57.12,-88.25 28.92,-88.25 6,-85.78 6,-82.75 6,-82.75 6,-33.25 6,-33.25 6,-30.22 28.92,-27.75 57.12,-27.75 85.33,-27.75 108.25,-30.22 108.25,-33.25 108.25,-33.25 108.25,-82.75 108.25,-82.75"/>
159
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M108.25,-82.75C108.25,-79.72 85.33,-77.25 57.12,-77.25 28.92,-77.25 6,-79.72 6,-82.75"/>
160
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-66.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Config</text>
161
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-54.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn/config.yml</text>
162
+ <text xml:space="preserve" text-anchor="middle" x="57.12" y="-42.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engine · key · oauth</text>
163
+ </g>
164
+ <!-- Cfg&#45;&gt;Loop -->
165
+ <g id="edge11" class="edge">
166
+ <title>Cfg&#45;&gt;Loop</title>
167
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M57.12,-88.6C57.12,-104.97 57.12,-125 57.12,-141.1"/>
168
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="54.33,-141.06 57.13,-149.06 59.93,-141.06 54.33,-141.06"/>
169
+ <text xml:space="preserve" text-anchor="middle" x="48.88" y="-116.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">active engine</text>
132
170
  </g>
133
171
  </g>
134
172
  </svg>
@@ -0,0 +1,166 @@
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_AWS Pages: 1 -->
7
+ <svg width="1064pt" height="354pt"
8
+ viewBox="0.00 0.00 1064.00 354.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 311.2)">
10
+ <title>PWN_AWS</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-311.2 1021.2,-311.2 1021.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="246.38" y="-246" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AWS — Cloud Security (90 service wrappers)</text>
13
+ <text xml:space="preserve" text-anchor="start" x="379.12" y="-234.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">enumerate → misconfig → escalate → persist</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_enum</title>
16
+ <path fill="#022c22" stroke="#047857" d="M185.5,-8C185.5,-8 309,-8 309,-8 315,-8 321,-14 321,-20 321,-20 321,-209 321,-209 321,-215 315,-221 309,-221 309,-221 185.5,-221 185.5,-221 179.5,-221 173.5,-215 173.5,-209 173.5,-209 173.5,-20 173.5,-20 173.5,-14 179.5,-8 185.5,-8"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-198" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Enumerate</text>
18
+ </g>
19
+ <g id="clust2" class="cluster">
20
+ <title>cluster_mis</title>
21
+ <path fill="#422006" stroke="#a16207" d="M403,-8C403,-8 501.75,-8 501.75,-8 507.75,-8 513.75,-14 513.75,-20 513.75,-20 513.75,-209 513.75,-209 513.75,-215 507.75,-221 501.75,-221 501.75,-221 403,-221 403,-221 397,-221 391,-215 391,-209 391,-209 391,-20 391,-20 391,-14 397,-8 403,-8"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-198" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Misconfig</text>
23
+ </g>
24
+ <g id="clust3" class="cluster">
25
+ <title>cluster_esc</title>
26
+ <path fill="#450a0a" stroke="#b91c1c" d="M595.75,-73C595.75,-73 740.75,-73 740.75,-73 746.75,-73 752.75,-79 752.75,-85 752.75,-85 752.75,-209 752.75,-209 752.75,-215 746.75,-221 740.75,-221 740.75,-221 595.75,-221 595.75,-221 589.75,-221 583.75,-215 583.75,-209 583.75,-209 583.75,-85 583.75,-85 583.75,-79 589.75,-73 595.75,-73"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="668.25" y="-198" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Escalate / Persist</text>
28
+ </g>
29
+ <!-- Creds -->
30
+ <g id="node1" class="node">
31
+ <title>Creds</title>
32
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M83.5,-117C83.5,-117 12,-117 12,-117 6,-117 0,-111 0,-105 0,-105 0,-93 0,-93 0,-87 6,-81 12,-81 12,-81 83.5,-81 83.5,-81 89.5,-81 95.5,-87 95.5,-93 95.5,-93 95.5,-105 95.5,-105 95.5,-111 89.5,-117 83.5,-117"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="47.75" y="-101.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">🔑 &#160;AWS Creds</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="47.75" y="-89.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">STS · env · profile</text>
35
+ </g>
36
+ <!-- IAM -->
37
+ <g id="node2" class="node">
38
+ <title>IAM</title>
39
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M273.25,-52C273.25,-52 221.25,-52 221.25,-52 215.25,-52 209.25,-46 209.25,-40 209.25,-40 209.25,-28 209.25,-28 209.25,-22 215.25,-16 221.25,-16 221.25,-16 273.25,-16 273.25,-16 279.25,-16 285.25,-22 285.25,-28 285.25,-28 285.25,-40 285.25,-40 285.25,-46 279.25,-52 273.25,-52"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">IAM · STS</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Organizations</text>
42
+ </g>
43
+ <!-- Creds&#45;&gt;IAM -->
44
+ <g id="edge1" class="edge">
45
+ <title>Creds&#45;&gt;IAM</title>
46
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M96.06,-83.43C127.39,-73.12 168.32,-59.65 199.53,-49.38"/>
47
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="200.29,-52.07 207.02,-46.91 198.54,-46.75 200.29,-52.07"/>
48
+ </g>
49
+ <!-- EC2 -->
50
+ <g id="node3" class="node">
51
+ <title>EC2</title>
52
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M283.38,-117C283.38,-117 211.12,-117 211.12,-117 205.12,-117 199.12,-111 199.12,-105 199.12,-105 199.12,-93 199.12,-93 199.12,-87 205.12,-81 211.12,-81 211.12,-81 283.38,-81 283.38,-81 289.38,-81 295.38,-87 295.38,-93 295.38,-93 295.38,-105 295.38,-105 295.38,-111 289.38,-117 283.38,-117"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">EC2 · ECS · ECR</text>
54
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Lambda · Lightsail</text>
55
+ </g>
56
+ <!-- Creds&#45;&gt;EC2 -->
57
+ <g id="edge2" class="edge">
58
+ <title>Creds&#45;&gt;EC2</title>
59
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M96.06,-99C123.94,-99 159.43,-99 188.9,-99"/>
60
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="188.68,-101.8 196.68,-99 188.68,-96.2 188.68,-101.8"/>
61
+ </g>
62
+ <!-- Net -->
63
+ <g id="node4" class="node">
64
+ <title>Net</title>
65
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M301,-182C301,-182 193.5,-182 193.5,-182 187.5,-182 181.5,-176 181.5,-170 181.5,-170 181.5,-158 181.5,-158 181.5,-152 187.5,-146 193.5,-146 193.5,-146 301,-146 301,-146 307,-146 313,-152 313,-158 313,-158 313,-170 313,-170 313,-176 307,-182 301,-182"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Route53 · ELB</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="247.25" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">API Gateway · CloudFront</text>
68
+ </g>
69
+ <!-- Creds&#45;&gt;Net -->
70
+ <g id="edge3" class="edge">
71
+ <title>Creds&#45;&gt;Net</title>
72
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M96.06,-114.57C121.38,-122.9 152.97,-133.3 180.63,-142.4"/>
73
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="179.5,-144.98 187.98,-144.82 181.25,-139.66 179.5,-144.98"/>
74
+ </g>
75
+ <!-- S3 -->
76
+ <g id="node5" class="node">
77
+ <title>S3</title>
78
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M479.88,-52C479.88,-52 424.88,-52 424.88,-52 418.88,-52 412.88,-46 412.88,-40 412.88,-40 412.88,-28 412.88,-28 412.88,-22 418.88,-16 424.88,-16 424.88,-16 479.88,-16 479.88,-16 485.88,-16 491.88,-22 491.88,-28 491.88,-28 491.88,-40 491.88,-40 491.88,-46 485.88,-52 479.88,-52"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">S3 · Glacier</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">public buckets</text>
81
+ </g>
82
+ <!-- IAM&#45;&gt;S3 -->
83
+ <g id="edge4" class="edge">
84
+ <title>IAM&#45;&gt;S3</title>
85
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M285.51,-34C318.38,-34 366.52,-34 402.48,-34"/>
86
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="402.31,-36.8 410.31,-34 402.31,-31.2 402.31,-36.8"/>
87
+ </g>
88
+ <!-- KMS -->
89
+ <g id="node6" class="node">
90
+ <title>KMS</title>
91
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M487.75,-117C487.75,-117 417,-117 417,-117 411,-117 405,-111 405,-105 405,-105 405,-93 405,-93 405,-87 411,-81 417,-81 417,-81 487.75,-81 487.75,-81 493.75,-81 499.75,-87 499.75,-93 499.75,-93 499.75,-105 499.75,-105 499.75,-111 493.75,-117 487.75,-117"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">KMS · CloudHSM</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Secrets · SSM</text>
94
+ </g>
95
+ <!-- EC2&#45;&gt;KMS -->
96
+ <g id="edge5" class="edge">
97
+ <title>EC2&#45;&gt;KMS</title>
98
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M295.87,-99C325.39,-99 363.48,-99 394.57,-99"/>
99
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="394.43,-101.8 402.43,-99 394.43,-96.2 394.43,-101.8"/>
100
+ </g>
101
+ <!-- Log -->
102
+ <g id="node7" class="node">
103
+ <title>Log</title>
104
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M493.75,-182C493.75,-182 411,-182 411,-182 405,-182 399,-176 399,-170 399,-170 399,-158 399,-158 399,-152 405,-146 411,-146 411,-146 493.75,-146 493.75,-146 499.75,-146 505.75,-152 505.75,-158 505.75,-158 505.75,-170 505.75,-170 505.75,-176 499.75,-182 493.75,-182"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">CloudTrail</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="452.38" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">CloudWatch · Config</text>
107
+ </g>
108
+ <!-- Net&#45;&gt;Log -->
109
+ <g id="edge6" class="edge">
110
+ <title>Net&#45;&gt;Log</title>
111
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M313.64,-164C337.8,-164 365.1,-164 388.98,-164"/>
112
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="388.67,-166.8 396.67,-164 388.67,-161.2 388.67,-166.8"/>
113
+ </g>
114
+ <!-- Priv -->
115
+ <g id="node8" class="node">
116
+ <title>Priv</title>
117
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M695.25,-117C695.25,-117 640.25,-117 640.25,-117 634.25,-117 628.25,-111 628.25,-105 628.25,-105 628.25,-93 628.25,-93 628.25,-87 634.25,-81 640.25,-81 640.25,-81 695.25,-81 695.25,-81 701.25,-81 707.25,-87 707.25,-93 707.25,-93 707.25,-105 707.25,-105 707.25,-111 701.25,-117 695.25,-117"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="667.75" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">iam:PassRole</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="667.75" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">lambda invoke</text>
120
+ </g>
121
+ <!-- S3&#45;&gt;Priv -->
122
+ <g id="edge7" class="edge">
123
+ <title>S3&#45;&gt;Priv</title>
124
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M492.51,-45.92C528,-56.73 580.44,-72.71 618.51,-84.31"/>
125
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="617.51,-86.93 625.98,-86.58 619.14,-81.57 617.51,-86.93"/>
126
+ </g>
127
+ <!-- KMS&#45;&gt;Priv -->
128
+ <g id="edge8" class="edge">
129
+ <title>KMS&#45;&gt;Priv</title>
130
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M500.2,-99C535.19,-99 582.87,-99 618.25,-99"/>
131
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="617.92,-101.8 625.92,-99 617.92,-96.2 617.92,-101.8"/>
132
+ </g>
133
+ <!-- Back -->
134
+ <g id="node9" class="node">
135
+ <title>Back</title>
136
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M699.38,-182C699.38,-182 636.12,-182 636.12,-182 630.12,-182 624.12,-176 624.12,-170 624.12,-170 624.12,-158 624.12,-158 624.12,-152 630.12,-146 636.12,-146 636.12,-146 699.38,-146 699.38,-146 705.38,-146 711.38,-152 711.38,-158 711.38,-158 711.38,-170 711.38,-170 711.38,-176 705.38,-182 699.38,-182"/>
137
+ <text xml:space="preserve" text-anchor="middle" x="667.75" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">new access key</text>
138
+ <text xml:space="preserve" text-anchor="middle" x="667.75" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">EC2 userdata</text>
139
+ </g>
140
+ <!-- Log&#45;&gt;Back -->
141
+ <g id="edge9" class="edge">
142
+ <title>Log&#45;&gt;Back</title>
143
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M506.39,-164C539.17,-164 581.08,-164 613.83,-164"/>
144
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="613.71,-166.8 621.71,-164 613.71,-161.2 613.71,-166.8"/>
145
+ </g>
146
+ <!-- Rep -->
147
+ <g id="node10" class="node">
148
+ <title>Rep</title>
149
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M966,-149C966,-149 842.75,-149 842.75,-149 836.75,-149 830.75,-143 830.75,-137 830.75,-137 830.75,-125 830.75,-125 830.75,-119 836.75,-113 842.75,-113 842.75,-113 966,-113 966,-113 972,-113 978,-119 978,-125 978,-125 978,-137 978,-137 978,-143 972,-149 966,-149"/>
150
+ <text xml:space="preserve" text-anchor="middle" x="904.38" y="-133.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn_aws_describe_resources</text>
151
+ <text xml:space="preserve" text-anchor="middle" x="904.38" y="-121.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports</text>
152
+ </g>
153
+ <!-- Priv&#45;&gt;Rep -->
154
+ <g id="edge10" class="edge">
155
+ <title>Priv&#45;&gt;Rep</title>
156
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M707.76,-104.32C738.39,-108.5 782.13,-114.46 820.48,-119.69"/>
157
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="819.85,-122.43 828.16,-120.74 820.61,-116.89 819.85,-122.43"/>
158
+ </g>
159
+ <!-- Back&#45;&gt;Rep -->
160
+ <g id="edge11" class="edge">
161
+ <title>Back&#45;&gt;Rep</title>
162
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M711.78,-157.95C742.14,-153.68 783.78,-147.82 820.48,-142.66"/>
163
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="820.71,-145.45 828.25,-141.57 819.93,-139.91 820.71,-145.45"/>
164
+ </g>
165
+ </g>
166
+ </svg>
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env bash
2
+ # Regenerate every PWN data-flow diagram SVG from its .dot source.
3
+ # Usage: ./build.sh # build all
4
+ # ./build.sh foo.dot # build one
5
+ set -euo pipefail
6
+ cd "$(dirname "$0")"
7
+ DOT_BIN="${DOT_BIN:-dot}"
8
+ SRC_DIR="dot"
9
+ build_one() {
10
+ local src="$1"
11
+ local base="$(basename "$src" .dot)"
12
+ echo " [dot] ${base}.svg"
13
+ "$DOT_BIN" -Tsvg "-Gfontnames=svg" "$src" -o "${base}.svg"
14
+ }
15
+ if [[ $# -gt 0 ]]; then
16
+ for f in "$@"; do build_one "$f"; done
17
+ else
18
+ for f in "$SRC_DIR"/*.dot; do build_one "$f"; done
19
+ fi
20
+ echo "[done] $(ls -1 *.svg | wc -l) SVG diagram(s) in $(pwd)"