@aegis-scan/skills 0.5.0 → 0.5.1

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 (346) hide show
  1. package/ATTRIBUTION.md +93 -0
  2. package/package.json +1 -1
  3. package/sbom.cdx.json +1 -0
  4. package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
  5. package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +878 -0
  6. package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
  7. package/skills/compliance/aegis-native/brutaler-anwalt/README.md +9 -3
  8. package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +93 -14
  9. package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
  10. package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
  11. package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
  12. package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
  13. package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
  14. package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
  15. package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
  16. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
  17. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
  18. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
  19. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
  20. package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
  21. package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
  22. package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +60 -5
  23. package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +745 -11
  24. package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
  25. package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +106 -30
  26. package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +247 -2
  27. package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +75 -2
  28. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
  29. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
  30. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
  31. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
  32. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
  33. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
  34. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
  35. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
  36. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
  37. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
  38. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
  39. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
  40. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
  41. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
  42. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
  43. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
  44. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
  45. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
  46. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
  47. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
  48. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
  49. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
  50. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
  51. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
  52. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
  53. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
  54. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
  55. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
  56. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
  57. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
  58. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
  59. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
  60. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
  61. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
  62. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
  63. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
  64. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
  65. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
  66. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
  67. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
  68. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
  69. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
  70. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
  71. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
  72. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
  73. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
  74. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
  75. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
  76. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
  77. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
  78. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
  79. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
  80. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
  81. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
  82. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
  83. package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +55 -8
  84. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
  85. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
  86. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
  87. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
  88. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
  89. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
  90. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
  91. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +4 -1
  92. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
  93. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
  94. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
  95. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
  96. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
  97. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
  98. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
  99. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
  100. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
  101. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
  102. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
  103. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
  104. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
  105. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
  106. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +3 -0
  107. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
  108. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
  109. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
  110. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
  111. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
  112. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
  113. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
  114. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
  115. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
  116. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
  117. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
  118. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
  119. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
  120. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
  121. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
  122. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
  123. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
  124. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
  125. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
  126. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
  127. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
  128. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
  129. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
  130. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
  131. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
  132. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
  133. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
  134. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +3 -2
  135. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
  136. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
  137. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +71 -3
  138. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
  139. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
  140. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
  141. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
  142. package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +115 -9
  143. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +1 -1
  144. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
  145. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
  146. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
  147. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
  148. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
  149. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
  150. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
  151. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
  152. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
  153. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
  154. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
  155. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
  156. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
  157. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
  158. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
  159. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
  160. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
  161. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
  162. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
  163. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
  164. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
  165. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
  166. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
  167. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
  168. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
  169. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
  170. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
  171. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
  172. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
  173. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
  174. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
  175. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
  176. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
  177. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
  178. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
  179. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
  180. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
  181. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
  182. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
  183. package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
  184. package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
  185. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +80 -0
  186. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
  187. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
  188. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
  189. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
  190. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
  191. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
  192. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
  193. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
  194. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
  195. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
  196. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
  197. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +190 -48
  198. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
  199. package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
  200. package/skills/defensive/permoon-fork/README.md +40 -0
  201. package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
  202. package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
  203. package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
  204. package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
  205. package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +1 -1
  206. package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
  207. package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
  208. package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
  209. package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
  210. package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
  211. package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
  212. package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
  213. package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
  214. package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
  215. package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
  216. package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
  217. package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
  218. package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
  219. package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
  220. package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
  221. package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
  222. package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
  223. package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
  224. package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
  225. package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
  226. package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
  227. package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
  228. package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
  229. package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
  230. package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
  231. package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
  232. package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
  233. package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
  234. package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
  235. package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
  236. package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
  237. package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
  238. package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
  239. package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
  240. package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
  241. package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
  242. package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
  243. package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
  244. package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
  245. package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
  246. package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
  247. package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
  248. package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
  249. package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
  250. package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
  251. package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
  252. package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
  253. package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
  254. package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
  255. package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
  256. package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
  257. package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
  258. package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
  259. package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
  260. package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
  261. package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
  262. package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
  263. package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
  264. package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
  265. package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
  266. package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
  267. package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
  268. package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
  269. package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
  270. package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
  271. package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
  272. package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
  273. package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
  274. package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
  275. package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
  276. package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
  277. package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
  278. package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
  279. package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
  280. package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
  281. package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
  282. package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
  283. package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
  284. package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
  285. package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
  286. package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
  287. package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
  288. package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
  289. package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
  290. package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
  291. package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
  292. package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
  293. package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
  294. package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
  295. package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
  296. package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
  297. package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
  298. package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
  299. package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
  300. package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
  301. package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
  302. package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
  303. package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
  304. package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
  305. package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
  306. package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
  307. package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
  308. package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
  309. package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
  310. package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
  311. package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
  312. package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
  313. package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
  314. package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
  315. package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
  316. package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
  317. package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
  318. package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
  319. package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
  320. package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
  321. package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
  322. package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
  323. package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
  324. package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
  325. package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
  326. package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
  327. package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
  328. package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
  329. package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
  330. package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
  331. package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
  332. package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
  333. package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
  334. package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
  335. package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
  336. package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
  337. package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
  338. package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
  339. package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
  340. package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
  341. package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
  342. package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
  343. package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
  344. package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
  345. package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
  346. package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
@@ -0,0 +1,952 @@
1
+ <!-- aegis-local: forked 2026-05-04 from pikpikcu/airecon@9a21453459d87eefb012ea355c79b593d0d3c0cc (MIT-licensed); attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ # Subdomain Enumeration — Full Spectrum Playbook
4
+
5
+ ## Overview
6
+ Three-layer coverage: Passive (no DNS noise), Active (DNS queries), Manual (logic-driven).
7
+ Goal: maximum surface with minimum noise.
8
+
9
+ ---
10
+
11
+ ## Setup
12
+
13
+ ```bash
14
+ TARGET="example.com"
15
+ OUT="/workspace/output/${TARGET}"
16
+ mkdir -p "$OUT"
17
+
18
+ # Core tools
19
+ # go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
20
+ # go install github.com/owasp-amass/amass/v4/...@latest
21
+ # go install github.com/projectdiscovery/dnsx/cmd/dnsx@latest
22
+ # go install github.com/projectdiscovery/httpx/cmd/httpx@latest
23
+ # go install github.com/d3mondev/puredns/v2@latest
24
+ # go install github.com/tomnomnom/assetfinder@latest
25
+ # go install github.com/tomnomnom/anew@latest
26
+ # go install github.com/Josue87/gotator@latest
27
+ # go install github.com/projectdiscovery/alterx/cmd/alterx@latest
28
+ # go install github.com/lc/subjs@latest
29
+ # go install github.com/tomnomnom/waybackurls@latest
30
+ # go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
31
+ # pip install dnsgen
32
+ ```
33
+
34
+ ---
35
+
36
+ ## PHASE 1 — PASSIVE ENUMERATION (No Active DNS)
37
+
38
+ ### 1.1 Aggregator Tools
39
+
40
+ ```bash
41
+ # subfinder with all sources
42
+ subfinder -d $TARGET -all -recursive -silent \
43
+ | anew $OUT/passive_subfinder.txt
44
+
45
+ # assetfinder
46
+ assetfinder --subs-only $TARGET \
47
+ | anew $OUT/passive_assetfinder.txt
48
+
49
+ # amass passive only
50
+ amass enum -passive -d $TARGET -o $OUT/passive_amass.txt
51
+ ```
52
+
53
+ ### 1.2 Certificate Transparency
54
+
55
+ ```bash
56
+ # crt.sh — best free CT source
57
+ curl -s "https://crt.sh/?q=%25.$TARGET&output=json" \
58
+ | python3 -c "
59
+ import json,sys
60
+ data=json.load(sys.stdin)
61
+ subs={e['name_value'] for e in data}
62
+ for s in sorted(subs):
63
+ for line in s.split('\n'):
64
+ line=line.strip().lstrip('*.')
65
+ if line: print(line)
66
+ " | sort -u | anew $OUT/passive_crtsh.txt
67
+
68
+ # certspotter
69
+ curl -s "https://api.certspotter.com/v1/issuances?domain=$TARGET&include_subdomains=true&expand=dns_names" \
70
+ | python3 -c "
71
+ import json,sys
72
+ for entry in json.load(sys.stdin):
73
+ for name in entry.get('dns_names',[]):
74
+ print(name.lstrip('*.'))
75
+ " | sort -u | anew $OUT/passive_certspotter.txt
76
+
77
+ # Censys (requires API key)
78
+ # curl -s "https://search.censys.io/api/v1/search/certificates" \
79
+ # -u "$CENSYS_API_ID:$CENSYS_API_SECRET" \
80
+ # -d "{\"query\":\"parsed.names: $TARGET\",\"fields\":[\"parsed.names\"]}" \
81
+ # | python3 -c "import json,sys; [print(n) for r in json.load(sys.stdin)['results'] for n in r.get('parsed.names',[])]"
82
+ ```
83
+
84
+ ### 1.3 DNS History & Passive DNS
85
+
86
+ ```bash
87
+ # VirusTotal passive DNS (free tier)
88
+ curl -s "https://www.virustotal.com/api/v3/domains/$TARGET/subdomains?limit=40" \
89
+ -H "x-apikey: $VT_API_KEY" \
90
+ | python3 -c "
91
+ import json,sys
92
+ data=json.load(sys.stdin)
93
+ for item in data.get('data',[]):
94
+ print(item['id'])
95
+ " | anew $OUT/passive_virustotal.txt
96
+
97
+ # SecurityTrails (requires API key)
98
+ # curl -s "https://api.securitytrails.com/v1/domain/$TARGET/subdomains" \
99
+ # -H "APIKEY: $SECURITYTRAILS_KEY" \
100
+ # | python3 -c "import json,sys; d=json.load(sys.stdin); [print(f'{s}.{d[\"apex_domain\"]}') for s in d.get('subdomains',[])]"
101
+
102
+ # HackerTarget
103
+ curl -s "https://api.hackertarget.com/hostsearch/?q=$TARGET" \
104
+ | cut -d',' -f1 | anew $OUT/passive_hackertarget.txt
105
+
106
+ # RapidDNS
107
+ curl -s "https://rapiddns.io/subdomain/$TARGET?full=1#result" \
108
+ | grep -oP '(?<=<td>)[a-zA-Z0-9._-]+\.'$TARGET | sort -u \
109
+ | anew $OUT/passive_rapiddns.txt
110
+ ```
111
+
112
+ ### 1.4 Search Engine Dorking
113
+
114
+ ```python
115
+ # dork_subdomain.py — Google/Bing programmatic subdomain harvest
116
+ import re, time, sys, urllib.request, urllib.parse
117
+
118
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
119
+ DORKS = [
120
+ f'site:{TARGET} -www',
121
+ f'site:*.{TARGET}',
122
+ f'inurl:{TARGET} filetype:txt',
123
+ ]
124
+ PATTERN = re.compile(r'(?:https?://)?([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
125
+ found = set()
126
+
127
+ headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'}
128
+
129
+ for dork in DORKS:
130
+ url = "https://www.bing.com/search?q=" + urllib.parse.quote(dork) + "&count=50"
131
+ try:
132
+ req = urllib.request.Request(url, headers=headers)
133
+ body = urllib.request.urlopen(req, timeout=10).read().decode('utf-8', errors='ignore')
134
+ matches = PATTERN.findall(body)
135
+ found.update(m.lower() for m in matches)
136
+ time.sleep(2)
137
+ except Exception as e:
138
+ print(f"[!] {dork}: {e}", file=sys.stderr)
139
+
140
+ for s in sorted(found):
141
+ print(s)
142
+ ```
143
+
144
+ ```bash
145
+ python3 dork_subdomain.py $TARGET | anew $OUT/passive_dorks.txt
146
+ ```
147
+
148
+ ### 1.5 Web Archive Sources
149
+
150
+ ```bash
151
+ # Wayback Machine
152
+ echo $TARGET | waybackurls \
153
+ | grep -oP '(?:https?://)\K[a-zA-Z0-9._-]+(?=/)' \
154
+ | grep -E "\.${TARGET}$" | sort -u \
155
+ | anew $OUT/passive_wayback.txt
156
+
157
+ # Common Crawl index API
158
+ curl -s "https://index.commoncrawl.org/CC-MAIN-2024-10-index?url=*.$TARGET&output=json&limit=500" \
159
+ | python3 -c "
160
+ import sys,json
161
+ for line in sys.stdin:
162
+ try:
163
+ d=json.loads(line)
164
+ u=d.get('url','')
165
+ if '://' in u:
166
+ host=u.split('://')[1].split('/')[0].split(':')[0]
167
+ print(host)
168
+ except: pass
169
+ " | sort -u | anew $OUT/passive_commoncrawl.txt
170
+ ```
171
+
172
+ ### 1.6 ASN → IP Ranges → Reverse DNS
173
+
174
+ ```python
175
+ # asn_reverse_dns.py — find all org IP ranges, reverse DNS → subdomains
176
+ import subprocess, sys, re, ipaddress
177
+
178
+ TARGET_ORG = sys.argv[1] if len(sys.argv) > 1 else "Example Inc"
179
+ TARGET_DOMAIN = sys.argv[2] if len(sys.argv) > 2 else "example.com"
180
+
181
+ import urllib.request, json
182
+
183
+ # Get ASN from bgpview
184
+ url = f"https://api.bgpview.io/search?query_term={urllib.parse.quote(TARGET_ORG)}"
185
+ try:
186
+ import urllib.parse
187
+ data = json.loads(urllib.request.urlopen(url, timeout=15).read())
188
+ asns = [a['asn'] for a in data.get('data', {}).get('asns', [])]
189
+ except Exception as e:
190
+ print(f"[!] BGPView lookup failed: {e}", file=sys.stderr)
191
+ asns = []
192
+
193
+ print(f"[*] Found ASNs: {asns}", file=sys.stderr)
194
+ found_subs = set()
195
+
196
+ for asn in asns[:5]: # cap at 5 ASNs
197
+ try:
198
+ prefixes_url = f"https://api.bgpview.io/asn/{asn}/prefixes"
199
+ prefix_data = json.loads(urllib.request.urlopen(prefixes_url, timeout=15).read())
200
+ for p in prefix_data.get('data', {}).get('ipv4_prefixes', [])[:20]:
201
+ cidr = p.get('prefix', '')
202
+ if not cidr:
203
+ continue
204
+ print(f"[*] Scanning {cidr}", file=sys.stderr)
205
+ # Use host command for reverse lookup on first /24 subset
206
+ net = ipaddress.ip_network(cidr, strict=False)
207
+ for ip in list(net.hosts())[:50]:
208
+ try:
209
+ result = subprocess.run(['host', str(ip)], capture_output=True, text=True, timeout=3)
210
+ if 'domain name pointer' in result.stdout:
211
+ ptr = result.stdout.split('domain name pointer')[1].strip().rstrip('.')
212
+ if TARGET_DOMAIN in ptr:
213
+ found_subs.add(ptr)
214
+ except:
215
+ pass
216
+ except Exception as e:
217
+ print(f"[!] ASN {asn}: {e}", file=sys.stderr)
218
+
219
+ for s in sorted(found_subs):
220
+ print(s)
221
+ ```
222
+
223
+ ### 1.7 SPF/DMARC/MX DNS Record Mining
224
+
225
+ ```python
226
+ # dns_record_harvest.py — extract subdomains from TXT/MX/NS/SOA records
227
+ import dns.resolver, re, sys
228
+
229
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
230
+ resolver = dns.resolver.Resolver()
231
+ resolver.timeout = 5
232
+ resolver.lifetime = 5
233
+
234
+ RECORD_TYPES = ['MX', 'NS', 'SOA', 'TXT']
235
+ found = set()
236
+ pattern = re.compile(r'([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
237
+
238
+ for rtype in RECORD_TYPES:
239
+ try:
240
+ answers = resolver.resolve(TARGET, rtype)
241
+ for r in answers:
242
+ raw = r.to_text()
243
+ matches = pattern.findall(raw)
244
+ for m in matches:
245
+ m = m.rstrip('.')
246
+ if m != TARGET:
247
+ found.add(m)
248
+ print(f"[{rtype}] {m}")
249
+ except Exception as e:
250
+ print(f"[!] {rtype}: {e}", file=sys.stderr)
251
+
252
+ # SPF includes — often reveal infra subdomains
253
+ try:
254
+ for r in resolver.resolve(TARGET, 'TXT'):
255
+ raw = r.to_text()
256
+ if 'spf' in raw.lower() or 'include:' in raw:
257
+ includes = re.findall(r'include:([^\s"]+)', raw)
258
+ redirects = re.findall(r'redirect=([^\s"]+)', raw)
259
+ for host in includes + redirects:
260
+ print(f"[SPF-INCLUDE] {host}")
261
+ # Recurse one level
262
+ try:
263
+ for r2 in resolver.resolve(host, 'TXT'):
264
+ for inc2 in re.findall(r'include:([^\s"]+)', r2.to_text()):
265
+ print(f"[SPF-INCLUDE-L2] {inc2}")
266
+ except:
267
+ pass
268
+ except Exception as e:
269
+ print(f"[!] SPF: {e}", file=sys.stderr)
270
+ ```
271
+
272
+ ```bash
273
+ python3 dns_record_harvest.py $TARGET | anew $OUT/passive_dns_records.txt
274
+ ```
275
+
276
+ ### 1.8 JavaScript & Response Header Mining
277
+
278
+ ```bash
279
+ # Extract subdomains from JS files
280
+ echo "https://$TARGET" | subjs \
281
+ | xargs -P5 -I{} curl -sk {} \
282
+ | grep -oP "(?:https?://)[a-zA-Z0-9._-]+\.${TARGET}" \
283
+ | sort -u | anew $OUT/passive_js.txt
284
+
285
+ # GitHub code search for target domain mentions
286
+ # Requires: gh auth login
287
+ # gh search code "$TARGET" --limit 100 --json path,url \
288
+ # | python3 -c "import json,sys; [print(r['url']) for r in json.load(sys.stdin)]"
289
+ ```
290
+
291
+ ---
292
+
293
+ ## PHASE 2 — ACTIVE ENUMERATION (DNS Queries)
294
+
295
+ ### 2.1 Zone Transfer Attempt (AXFR)
296
+
297
+ ```bash
298
+ # Enumerate nameservers first
299
+ dig NS $TARGET +short | tee $OUT/active_nameservers.txt
300
+
301
+ # Attempt AXFR on each NS
302
+ while read ns; do
303
+ ns=$(echo $ns | tr -d '.')
304
+ echo "[*] Trying AXFR from $ns"
305
+ dig AXFR $TARGET @$ns | tee $OUT/active_axfr_${ns}.txt
306
+ # If successful, extract all hostnames
307
+ if grep -q "SOA\|A\|AAAA\|CNAME" $OUT/active_axfr_${ns}.txt 2>/dev/null; then
308
+ awk '{print $1}' $OUT/active_axfr_${ns}.txt \
309
+ | grep -E "\.${TARGET}\.?$" \
310
+ | sed 's/\.$//' | anew $OUT/active_axfr_found.txt
311
+ echo "[!] AXFR SUCCESS on $ns"
312
+ fi
313
+ done < $OUT/active_nameservers.txt
314
+ ```
315
+
316
+ ### 2.2 Wildcard Detection
317
+
318
+ ```bash
319
+ # Detect wildcard before brute forcing — prevents false positives
320
+ python3 -c "
321
+ import dns.resolver, random, string, sys
322
+
323
+ TARGET = sys.argv[1]
324
+ resolver = dns.resolver.Resolver()
325
+ resolver.timeout = 3
326
+
327
+ # Test 3 random subdomains
328
+ wildcards = []
329
+ for _ in range(3):
330
+ rand = ''.join(random.choices(string.ascii_lowercase, k=12))
331
+ test = f'{rand}.{TARGET}'
332
+ try:
333
+ resolver.resolve(test, 'A')
334
+ wildcards.append(test)
335
+ except:
336
+ pass
337
+
338
+ if wildcards:
339
+ print(f'[!] WILDCARD DETECTED: {TARGET} resolves random subdomains')
340
+ print('[!] Brute force will produce false positives — filter by wildcard IP')
341
+ # Get wildcard IPs to exclude
342
+ try:
343
+ wc_ips = [r.to_text() for r in resolver.resolve(wildcards[0], 'A')]
344
+ print(f'[!] Wildcard IPs: {wc_ips}')
345
+ with open('wildcard_ips.txt', 'w') as f:
346
+ f.write('\n'.join(wc_ips))
347
+ except:
348
+ pass
349
+ else:
350
+ print(f'[OK] No wildcard detected on {TARGET}')
351
+ " $TARGET
352
+ ```
353
+
354
+ ### 2.3 DNS Brute Force (puredns + massdns)
355
+
356
+ ```bash
357
+ # Download wordlist
358
+ WORDLIST="/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt"
359
+ # Or: curl -sL https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/DNS/subdomains-top1million-20000.txt -o /tmp/dns_wordlist.txt
360
+
361
+ # Resolvers — curated public DNS resolvers
362
+ curl -sL https://raw.githubusercontent.com/trickest/resolvers/main/resolvers.txt \
363
+ -o /tmp/resolvers.txt
364
+
365
+ # puredns brute force (handles wildcards automatically)
366
+ puredns bruteforce $WORDLIST $TARGET \
367
+ --resolvers /tmp/resolvers.txt \
368
+ --wildcard-tests 3 \
369
+ --write $OUT/active_bruteforce.txt
370
+
371
+ # Alternative: dnsx direct bruteforce
372
+ # dnsx -d $TARGET -w $WORDLIST -r /tmp/resolvers.txt -o $OUT/active_bruteforce.txt
373
+ ```
374
+
375
+ ### 2.4 Permutation & Alteration
376
+
377
+ ```bash
378
+ # Merge all discovered subdomains so far
379
+ cat $OUT/passive_*.txt $OUT/active_bruteforce.txt 2>/dev/null \
380
+ | sort -u > $OUT/all_so_far.txt
381
+
382
+ # gotator — generate permutations
383
+ gotator -sub $OUT/all_so_far.txt \
384
+ -perm /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt \
385
+ -depth 1 -numbers 3 -md \
386
+ | anew $OUT/active_permutations_raw.txt
387
+
388
+ # alterx — pattern-based alteration
389
+ cat $OUT/all_so_far.txt | alterx | anew $OUT/active_permutations_raw.txt
390
+
391
+ # dnsgen
392
+ cat $OUT/all_so_far.txt | dnsgen - | anew $OUT/active_permutations_raw.txt
393
+
394
+ # Resolve all permutations
395
+ puredns resolve $OUT/active_permutations_raw.txt \
396
+ --resolvers /tmp/resolvers.txt \
397
+ --write $OUT/active_permutations_resolved.txt
398
+ ```
399
+
400
+ ### 2.5 Recursive Active Enumeration
401
+
402
+ ```bash
403
+ # amass active — uses brute force, TLS certs, scraping
404
+ amass enum -active -d $TARGET \
405
+ -brute -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt \
406
+ -o $OUT/active_amass_active.txt \
407
+ -timeout 30
408
+
409
+ # Extract from amass output
410
+ cat $OUT/active_amass_active.txt | anew $OUT/all_so_far.txt
411
+ ```
412
+
413
+ ### 2.6 TLS Certificate SAN Probe
414
+
415
+ ```python
416
+ # tls_san_probe.py — connect to discovered subdomains, extract SANs from TLS cert
417
+ import ssl, socket, sys
418
+
419
+ def get_sans(host, port=443, timeout=5):
420
+ ctx = ssl.create_default_context()
421
+ ctx.check_hostname = False
422
+ ctx.verify_mode = ssl.CERT_NONE
423
+ try:
424
+ with socket.create_connection((host, port), timeout=timeout) as sock:
425
+ with ctx.wrap_socket(sock, server_hostname=host) as ssock:
426
+ cert = ssock.getpeercert()
427
+ sans = [v for t, v in cert.get('subjectAltName', []) if t == 'DNS']
428
+ return sans
429
+ except Exception as e:
430
+ return []
431
+
432
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
433
+ input_file = sys.argv[2] if len(sys.argv) > 2 else None
434
+
435
+ hosts = []
436
+ if input_file:
437
+ with open(input_file) as f:
438
+ hosts = [l.strip() for l in f if l.strip()]
439
+ else:
440
+ hosts = [TARGET]
441
+
442
+ found = set()
443
+ for host in hosts:
444
+ sans = get_sans(host)
445
+ for san in sans:
446
+ san = san.lstrip('*.')
447
+ if TARGET in san:
448
+ found.add(san)
449
+
450
+ for s in sorted(found):
451
+ print(s)
452
+ ```
453
+
454
+ ```bash
455
+ python3 tls_san_probe.py $TARGET $OUT/all_so_far.txt \
456
+ | anew $OUT/active_tls_sans.txt
457
+ ```
458
+
459
+ ### 2.7 Virtual Host (VHOST) Fuzzing
460
+
461
+ ```bash
462
+ # Discover hidden vhosts on a target IP
463
+ TARGET_IP=$(dig +short $TARGET | head -1)
464
+
465
+ ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt \
466
+ -u "https://$TARGET_IP/" \
467
+ -H "Host: FUZZ.$TARGET" \
468
+ -fs $(curl -sk -o /dev/null -w "%{size_download}" "https://$TARGET_IP/" -H "Host: nonexistent123.$TARGET") \
469
+ -t 50 -mc 200,301,302,403 \
470
+ -o $OUT/active_vhost.json -of json
471
+
472
+ # Extract found vhosts
473
+ cat $OUT/active_vhost.json \
474
+ | python3 -c "
475
+ import json,sys
476
+ data=json.load(sys.stdin)
477
+ for r in data.get('results',[]):
478
+ print(r['input']['FUZZ'] + '.$TARGET')
479
+ " | anew $OUT/active_vhost_found.txt
480
+ ```
481
+
482
+ ---
483
+
484
+ ## PHASE 3 — MANUAL TECHNIQUES (Logic-Driven)
485
+
486
+ ### 3.1 robots.txt / sitemap.xml Mining
487
+
488
+ ```python
489
+ # sitemap_subdomain.py — recursively parse sitemaps for subdomain mentions
490
+ import urllib.request, re, sys
491
+ from xml.etree import ElementTree
492
+
493
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
494
+ SEEDS = [
495
+ f"https://{TARGET}/robots.txt",
496
+ f"https://{TARGET}/sitemap.xml",
497
+ f"https://{TARGET}/sitemap_index.xml",
498
+ f"https://www.{TARGET}/sitemap.xml",
499
+ ]
500
+
501
+ PATTERN = re.compile(r'(?:https?://)?([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
502
+ visited = set()
503
+ found = set()
504
+
505
+ def parse_sitemap(url):
506
+ if url in visited:
507
+ return
508
+ visited.add(url)
509
+ try:
510
+ req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
511
+ body = urllib.request.urlopen(req, timeout=10).read().decode('utf-8', errors='ignore')
512
+ # Extract subdomains from raw text
513
+ for m in PATTERN.findall(body):
514
+ found.add(m)
515
+ # Parse sitemap index
516
+ try:
517
+ root = ElementTree.fromstring(body)
518
+ ns = {'sm': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
519
+ for loc in root.findall('.//sm:loc', ns):
520
+ if loc.text and '.xml' in loc.text:
521
+ parse_sitemap(loc.text.strip())
522
+ except:
523
+ pass
524
+ except Exception as e:
525
+ print(f"[!] {url}: {e}", file=sys.stderr)
526
+
527
+ for seed in SEEDS:
528
+ parse_sitemap(seed)
529
+
530
+ for s in sorted(found):
531
+ print(s)
532
+ ```
533
+
534
+ ```bash
535
+ python3 sitemap_subdomain.py $TARGET | anew $OUT/manual_sitemap.txt
536
+ ```
537
+
538
+ ### 3.2 App/API Response Subdomain Mining
539
+
540
+ ```python
541
+ # response_mining.py — crawl target API/app responses, extract subdomain refs
542
+ import urllib.request, urllib.error, re, json, sys, collections
543
+
544
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
545
+ BASE_URL = f"https://{TARGET}"
546
+ PATTERN = re.compile(r'([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
547
+
548
+ COMMON_ENDPOINTS = [
549
+ "/", "/api", "/api/v1", "/api/v2", "/health",
550
+ "/status", "/manifest.json", "/asset-manifest.json",
551
+ "/robots.txt", "/.well-known/security.txt",
552
+ "/static/js/main.chunk.js", "/config.js",
553
+ "/env.js", "/runtime-main.js",
554
+ ]
555
+
556
+ found = set()
557
+ headers = {
558
+ 'User-Agent': 'Mozilla/5.0',
559
+ 'Accept': 'text/html,application/json,*/*',
560
+ }
561
+
562
+ for ep in COMMON_ENDPOINTS:
563
+ url = BASE_URL + ep
564
+ try:
565
+ req = urllib.request.Request(url, headers=headers)
566
+ body = urllib.request.urlopen(req, timeout=8).read().decode('utf-8', errors='ignore')
567
+ matches = PATTERN.findall(body)
568
+ if matches:
569
+ new = set(matches) - found
570
+ for m in new:
571
+ print(f"[{ep}] {m}")
572
+ found.update(matches)
573
+ except:
574
+ pass
575
+
576
+ # Also check response headers for domain hints
577
+ for ep in ["/"]:
578
+ url = BASE_URL + ep
579
+ try:
580
+ req = urllib.request.Request(url, headers=headers)
581
+ resp = urllib.request.urlopen(req, timeout=8)
582
+ for h, v in resp.headers.items():
583
+ if h.lower() in ['location', 'set-cookie', 'access-control-allow-origin', 'content-security-policy']:
584
+ for m in PATTERN.findall(v):
585
+ print(f"[HEADER:{h}] {m}")
586
+ found.add(m)
587
+ except:
588
+ pass
589
+ ```
590
+
591
+ ```bash
592
+ python3 response_mining.py $TARGET | anew $OUT/manual_response.txt
593
+ ```
594
+
595
+ ### 3.3 Favicon Hash → Shodan Correlation
596
+
597
+ ```python
598
+ # favicon_enum.py — compute favicon hash, query Shodan for same favicon
599
+ import urllib.request, base64, struct, sys
600
+
601
+ def favicon_hash(url):
602
+ try:
603
+ req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
604
+ data = base64.encodebytes(urllib.request.urlopen(req, timeout=10).read()).decode()
605
+ # MurmurHash3 compatible with Shodan
606
+ h = 0
607
+ for byte in data.encode():
608
+ h ^= byte
609
+ h = ((h << 5) | (h >> 27)) & 0xFFFFFFFF
610
+ h = (h * 0x5bd1e995) & 0xFFFFFFFF
611
+ # Proper mmh3 — install: pip install mmh3
612
+ try:
613
+ import mmh3
614
+ raw = urllib.request.urlopen(urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}), timeout=10).read()
615
+ return mmh3.hash(base64.encodebytes(raw).decode())
616
+ except ImportError:
617
+ pass
618
+ return None
619
+ except Exception as e:
620
+ print(f"[!] {e}", file=sys.stderr)
621
+ return None
622
+
623
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
624
+ urls = [
625
+ f"https://{TARGET}/favicon.ico",
626
+ f"https://www.{TARGET}/favicon.ico",
627
+ f"https://{TARGET}/favicon.png",
628
+ ]
629
+
630
+ for url in urls:
631
+ h = favicon_hash(url)
632
+ if h:
633
+ print(f"[FAVICON HASH] {h}")
634
+ print(f"[SHODAN QUERY] http.favicon.hash:{h}")
635
+ print(f"[FOFA QUERY] icon_hash=\"{h}\"")
636
+ ```
637
+
638
+ ```bash
639
+ python3 favicon_enum.py $TARGET
640
+ # Then search Shodan/FOFA/Censys with the hash to find related infrastructure
641
+ ```
642
+
643
+ ### 3.4 Mobile App Subdomain Extraction
644
+
645
+ ```bash
646
+ # Decompile APK → grep for domain references
647
+ # apktool d target.apk -o /tmp/apk_decompiled
648
+ # grep -rE "[a-zA-Z0-9._-]+\.$TARGET" /tmp/apk_decompiled/
649
+
650
+ # From App Store URL → extract bundle ID → search
651
+ # frida-ps -Ua # list installed apps
652
+ # objection --gadget "com.example.app" explore # dump network calls
653
+ ```
654
+
655
+ ### 3.5 GitHub/GitLab Dorking
656
+
657
+ ```bash
658
+ # GitHub code search — finds hardcoded subdomains in repos
659
+ # Requires: gh auth login
660
+
661
+ gh search code ".$TARGET" --limit 100 --json url,path,textMatches 2>/dev/null \
662
+ | python3 -c "
663
+ import json, sys, re
664
+ TARGET = '$TARGET'
665
+ PATTERN = re.compile(r'([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
666
+ data = json.load(sys.stdin)
667
+ found = set()
668
+ for item in data:
669
+ for m in item.get('textMatches', []):
670
+ for s in PATTERN.findall(m.get('fragment', '')):
671
+ found.add(s)
672
+ for s in sorted(found):
673
+ print(s)
674
+ " | anew $OUT/manual_github.txt
675
+
676
+ # GitLab search
677
+ # curl -s "https://gitlab.com/api/v4/search?scope=blobs&search=$TARGET" \
678
+ # -H "Authorization: Bearer $GITLAB_TOKEN"
679
+ ```
680
+
681
+ ### 3.6 Content Security Policy Mining
682
+
683
+ ```python
684
+ # csp_subdomain.py — parse CSP headers and meta tags to find all approved origins
685
+ import urllib.request, re, sys
686
+
687
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
688
+ URLS = [f"https://{TARGET}/", f"https://www.{TARGET}/", f"https://app.{TARGET}/"]
689
+ PATTERN = re.compile(r'([a-zA-Z0-9._-]+\.' + re.escape(TARGET) + r')')
690
+ CSP_HEADERS = ['content-security-policy', 'content-security-policy-report-only']
691
+
692
+ found = set()
693
+ for url in URLS:
694
+ try:
695
+ req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
696
+ resp = urllib.request.urlopen(req, timeout=8)
697
+ # Check response headers
698
+ for h, v in resp.headers.items():
699
+ if h.lower() in CSP_HEADERS:
700
+ for m in PATTERN.findall(v):
701
+ print(f"[CSP-HEADER] {m}")
702
+ found.add(m)
703
+ # Check meta CSP tags in body
704
+ body = resp.read().decode('utf-8', errors='ignore')
705
+ meta_csp = re.findall(r'<meta[^>]+http-equiv=["\']Content-Security-Policy["\'][^>]+content=["\']([^"\']+)', body, re.I)
706
+ for csp in meta_csp:
707
+ for m in PATTERN.findall(csp):
708
+ print(f"[CSP-META] {m}")
709
+ found.add(m)
710
+ except Exception as e:
711
+ print(f"[!] {url}: {e}", file=sys.stderr)
712
+ ```
713
+
714
+ ```bash
715
+ python3 csp_subdomain.py $TARGET | anew $OUT/manual_csp.txt
716
+ ```
717
+
718
+ ### 3.7 Email Infrastructure Mining
719
+
720
+ ```bash
721
+ # MX → mail server subdomains
722
+ dig MX $TARGET +short | awk '{print $2}' | tr -d '.' | while read mx; do
723
+ echo "[MX] $mx.$TARGET"
724
+ # Try common mail-related subs
725
+ for prefix in mail smtp webmail autodiscover autoconfig owa exchange; do
726
+ dig +short $prefix.$TARGET | grep -v "^$" && echo "[MAIL-SUB] $prefix.$TARGET"
727
+ done
728
+ done | anew $OUT/manual_mail.txt
729
+
730
+ # DMARC/DKIM selectors — often reveal more infra
731
+ dig TXT _dmarc.$TARGET +short | anew $OUT/manual_dmarc.txt
732
+ # Common DKIM selectors
733
+ for sel in default google mail smtp selector1 selector2 k1 dkim; do
734
+ result=$(dig TXT ${sel}._domainkey.$TARGET +short 2>/dev/null)
735
+ if [ -n "$result" ]; then
736
+ echo "[DKIM-SELECTOR] $sel: $result" | anew $OUT/manual_dkim.txt
737
+ fi
738
+ done
739
+ ```
740
+
741
+ ---
742
+
743
+ ## PHASE 4 — POST-PROCESSING & VALIDATION
744
+
745
+ ### 4.1 Merge & Deduplicate
746
+
747
+ ```bash
748
+ # Merge all sources
749
+ cat $OUT/passive_*.txt $OUT/active_*.txt $OUT/manual_*.txt 2>/dev/null \
750
+ | grep -E "^[a-zA-Z0-9._-]+\.${TARGET}$" \
751
+ | sort -u > $OUT/all_subdomains.txt
752
+
753
+ echo "[*] Total unique: $(wc -l < $OUT/all_subdomains.txt)"
754
+ ```
755
+
756
+ ### 4.2 DNS Resolution with IP Capture
757
+
758
+ ```bash
759
+ # Resolve all — capture IPs for ASN/cloud analysis
760
+ dnsx -l $OUT/all_subdomains.txt \
761
+ -a -aaaa -cname -mx -ns \
762
+ -resp -silent \
763
+ -o $OUT/resolved.txt
764
+
765
+ # Extract just resolved hosts
766
+ cat $OUT/resolved.txt | awk '{print $1}' > $OUT/resolved_hosts.txt
767
+
768
+ echo "[*] Resolved: $(wc -l < $OUT/resolved_hosts.txt)"
769
+ ```
770
+
771
+ ### 4.3 Live HTTP Probe
772
+
773
+ ```bash
774
+ httpx -l $OUT/resolved_hosts.txt \
775
+ -title -status-code -ip -tech-detect \
776
+ -content-length -follow-redirects \
777
+ -threads 50 -timeout 10 \
778
+ -o $OUT/live_http.txt
779
+
780
+ echo "[*] Live HTTP: $(wc -l < $OUT/live_http.txt)"
781
+ ```
782
+
783
+ ### 4.4 Subdomain Takeover Detection
784
+
785
+ ```bash
786
+ # nuclei takeover templates
787
+ nuclei -l $OUT/resolved_hosts.txt \
788
+ -t takeovers/ \
789
+ -o $OUT/takeovers.txt \
790
+ -silent
791
+
792
+ # Check dangling CNAMEs
793
+ python3 -c "
794
+ import subprocess, sys
795
+
796
+ with open('$OUT/resolved.txt') as f:
797
+ for line in f:
798
+ if 'CNAME' in line:
799
+ parts = line.split()
800
+ if len(parts) >= 3:
801
+ cname_target = parts[-1]
802
+ # Check if CNAME target resolves
803
+ r = subprocess.run(['dig', '+short', cname_target],
804
+ capture_output=True, text=True, timeout=5)
805
+ if not r.stdout.strip():
806
+ print(f'[DANGLING CNAME] {parts[0]} -> {cname_target}')
807
+ "
808
+ ```
809
+
810
+ ### 4.5 Cloud Asset Detection
811
+
812
+ ```bash
813
+ # Detect S3, Azure Blob, GCS from subdomains/CNAMEs
814
+ python3 - << 'EOF'
815
+ import re, sys
816
+
817
+ CLOUD_PATTERNS = {
818
+ 's3': r'\.s3[.-](?:[a-z0-9-]+\.)?amazonaws\.com',
819
+ 'azure': r'\.(?:azurewebsites\.net|blob\.core\.windows\.net|azurefd\.net|cloudapp\.azure\.com)',
820
+ 'gcs': r'\.storage\.googleapis\.com',
821
+ 'github-pages': r'\.github\.io',
822
+ 'heroku': r'\.herokuapp\.com',
823
+ 'netlify': r'\.netlify\.app',
824
+ 'vercel': r'\.vercel\.app',
825
+ 'fastly': r'\.global\.fastly\.net',
826
+ 'cloudfront': r'\.cloudfront\.net',
827
+ }
828
+
829
+ with open('$OUT/resolved.txt') as f:
830
+ for line in f:
831
+ for provider, pattern in CLOUD_PATTERNS.items():
832
+ if re.search(pattern, line, re.I):
833
+ print(f'[{provider.upper()}] {line.strip()}')
834
+ EOF
835
+ ```
836
+
837
+ ### 4.6 Priority Triage
838
+
839
+ ```bash
840
+ # High-value keyword filter
841
+ grep -iE "admin|api|app|auth|backend|beta|cms|console|dashboard|dev|git|internal|
842
+ jenkins|jira|kibana|ldap|login|mgmt|monitor|ops|panel|portal|prod|secret|
843
+ secure|staging|sso|test|vault|vpn|wiki|staging|preprod|sandbox|legacy|
844
+ grafana|prometheus|elastic|k8s|kube|docker|registry|ci|cd" \
845
+ $OUT/live_http.txt | tee $OUT/priority_targets.txt
846
+
847
+ echo ""
848
+ echo "=== PRIORITY TARGETS ==="
849
+ wc -l $OUT/priority_targets.txt
850
+ cat $OUT/priority_targets.txt
851
+ ```
852
+
853
+ ---
854
+
855
+ ## PHASE 5 — AUTOMATED FULL PIPELINE
856
+
857
+ ```python
858
+ # subdomain_pipeline.py — orchestrate all phases, structured output
859
+ import subprocess, os, sys, json, datetime
860
+
861
+ TARGET = sys.argv[1] if len(sys.argv) > 1 else "example.com"
862
+ OUT = f"/workspace/output/{TARGET}"
863
+ os.makedirs(OUT, exist_ok=True)
864
+
865
+ def run(cmd, output_file=None, shell=True):
866
+ print(f"[*] {cmd[:80]}")
867
+ try:
868
+ result = subprocess.run(cmd, shell=shell, capture_output=True, text=True, timeout=300)
869
+ if output_file and result.stdout:
870
+ with open(output_file, 'a') as f:
871
+ f.write(result.stdout)
872
+ return result.stdout
873
+ except subprocess.TimeoutExpired:
874
+ print(f"[!] Timeout: {cmd[:60]}")
875
+ return ""
876
+ except Exception as e:
877
+ print(f"[!] {e}")
878
+ return ""
879
+
880
+ # Phase 1: Passive
881
+ run(f"subfinder -d {TARGET} -all -silent", f"{OUT}/passive_subfinder.txt")
882
+ run(f"assetfinder --subs-only {TARGET}", f"{OUT}/passive_assetfinder.txt")
883
+ run(f'curl -s "https://crt.sh/?q=%25.{TARGET}&output=json" | python3 -c "import json,sys; [print(e[\'name_value\'].lstrip(\'*.\')) for e in json.load(sys.stdin)]"', f"{OUT}/passive_crtsh.txt")
884
+ run(f"curl -s 'https://api.hackertarget.com/hostsearch/?q={TARGET}' | cut -d, -f1", f"{OUT}/passive_hackertarget.txt")
885
+ run(f"echo {TARGET} | waybackurls | grep -oP '(?:https?://)\\K[^/]+' | grep '\\.{TARGET}$'", f"{OUT}/passive_wayback.txt")
886
+
887
+ # Merge passive
888
+ run(f"cat {OUT}/passive_*.txt | sort -u", f"{OUT}/all_passive.txt")
889
+ print(f"[*] Passive: {len(open(f'{OUT}/all_passive.txt').readlines())} subdomains")
890
+
891
+ # Phase 2: Active
892
+ run(f"puredns bruteforce /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt {TARGET} --write {OUT}/active_bruteforce.txt")
893
+ run(f"cat {OUT}/all_passive.txt | alterx | puredns resolve --write {OUT}/active_permutations.txt")
894
+
895
+ # Merge all
896
+ run(f"cat {OUT}/passive_*.txt {OUT}/active_*.txt | sort -u", f"{OUT}/all_subdomains.txt")
897
+ total = len(open(f"{OUT}/all_subdomains.txt").readlines())
898
+ print(f"[*] Total unique: {total}")
899
+
900
+ # Phase 4: Validation
901
+ run(f"dnsx -l {OUT}/all_subdomains.txt -silent -a -resp", f"{OUT}/resolved.txt")
902
+ run(f"cat {OUT}/resolved.txt | awk '{{print $1}}' | httpx -silent -title -status-code -ip", f"{OUT}/live_http.txt")
903
+
904
+ live = len(open(f"{OUT}/live_http.txt").readlines())
905
+ print(f"[*] Live HTTP: {live}")
906
+
907
+ # Report
908
+ report = {
909
+ "target": TARGET,
910
+ "date": datetime.datetime.now().isoformat(),
911
+ "total_subdomains": total,
912
+ "live_http": live,
913
+ "output_dir": OUT,
914
+ }
915
+ with open(f"{OUT}/summary.json", "w") as f:
916
+ json.dump(report, f, indent=2)
917
+
918
+ print(f"\n[+] Summary written to {OUT}/summary.json")
919
+ ```
920
+
921
+ ```bash
922
+ python3 subdomain_pipeline.py $TARGET
923
+ ```
924
+
925
+ ---
926
+
927
+ ## Summary Table
928
+
929
+ | Phase | Technique | Noise | Coverage |
930
+ |-------|-----------|-------|----------|
931
+ | Passive | subfinder/amass/assetfinder | None | Medium |
932
+ | Passive | CT logs (crt.sh, certspotter) | None | High |
933
+ | Passive | DNS history (VirusTotal, SecurityTrails) | None | Medium |
934
+ | Passive | Web archives (Wayback, CommonCrawl) | None | Low-Medium |
935
+ | Passive | SPF/MX/NS record mining | None | Low |
936
+ | Passive | JS file mining | None | Medium |
937
+ | Passive | GitHub code search | None | Medium |
938
+ | Active | Zone transfer (AXFR) | Low | High (if open) |
939
+ | Active | DNS brute force (puredns) | Medium | High |
940
+ | Active | Permutation/alteration | Medium | High |
941
+ | Active | VHOST fuzzing (ffuf) | High | Medium |
942
+ | Active | TLS SAN probe | Low | Medium |
943
+ | Manual | Sitemap/robots.txt | None | Low |
944
+ | Manual | Response/header mining | Low | Medium |
945
+ | Manual | CSP origin extraction | None | Medium |
946
+ | Manual | Favicon hash → Shodan | None | Low-Medium |
947
+ | Manual | ASN → reverse DNS | Medium | Medium |
948
+ | Manual | Email infra (MX/DKIM) | None | Low |
949
+
950
+ ---
951
+
952
+ indicators: subdomain enumeration, subdomain enum, subfinder, amass, assetfinder, dns brute, subdomain bruteforce, subdomain passive, subdomain active, certificate transparency, crt.sh, ct logs, zone transfer, axfr, dns axfr, wildcard dns, vhost fuzzing, virtual host, permutation subdomain, alterx, gotator, dnsgen, puredns, massdns, dnsx, passive recon subdomain, active recon subdomain, subdomain takeover detection, dangling cname, spf record subdomain, mx record enum, js subdomain, csp subdomain, favicon hash subdomain, asn subdomain, reverse dns, waybackurls subdomain, github dork subdomain, airecon subdomain