aiptx 2.0.7__py3-none-any.whl

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 (187) hide show
  1. aipt_v2/__init__.py +110 -0
  2. aipt_v2/__main__.py +24 -0
  3. aipt_v2/agents/AIPTxAgent/__init__.py +10 -0
  4. aipt_v2/agents/AIPTxAgent/aiptx_agent.py +211 -0
  5. aipt_v2/agents/__init__.py +46 -0
  6. aipt_v2/agents/base.py +520 -0
  7. aipt_v2/agents/exploit_agent.py +688 -0
  8. aipt_v2/agents/ptt.py +406 -0
  9. aipt_v2/agents/state.py +168 -0
  10. aipt_v2/app.py +957 -0
  11. aipt_v2/browser/__init__.py +31 -0
  12. aipt_v2/browser/automation.py +458 -0
  13. aipt_v2/browser/crawler.py +453 -0
  14. aipt_v2/cli.py +2933 -0
  15. aipt_v2/compliance/__init__.py +71 -0
  16. aipt_v2/compliance/compliance_report.py +449 -0
  17. aipt_v2/compliance/framework_mapper.py +424 -0
  18. aipt_v2/compliance/nist_mapping.py +345 -0
  19. aipt_v2/compliance/owasp_mapping.py +330 -0
  20. aipt_v2/compliance/pci_mapping.py +297 -0
  21. aipt_v2/config.py +341 -0
  22. aipt_v2/core/__init__.py +43 -0
  23. aipt_v2/core/agent.py +630 -0
  24. aipt_v2/core/llm.py +395 -0
  25. aipt_v2/core/memory.py +305 -0
  26. aipt_v2/core/ptt.py +329 -0
  27. aipt_v2/database/__init__.py +14 -0
  28. aipt_v2/database/models.py +232 -0
  29. aipt_v2/database/repository.py +384 -0
  30. aipt_v2/docker/__init__.py +23 -0
  31. aipt_v2/docker/builder.py +260 -0
  32. aipt_v2/docker/manager.py +222 -0
  33. aipt_v2/docker/sandbox.py +371 -0
  34. aipt_v2/evasion/__init__.py +58 -0
  35. aipt_v2/evasion/request_obfuscator.py +272 -0
  36. aipt_v2/evasion/tls_fingerprint.py +285 -0
  37. aipt_v2/evasion/ua_rotator.py +301 -0
  38. aipt_v2/evasion/waf_bypass.py +439 -0
  39. aipt_v2/execution/__init__.py +23 -0
  40. aipt_v2/execution/executor.py +302 -0
  41. aipt_v2/execution/parser.py +544 -0
  42. aipt_v2/execution/terminal.py +337 -0
  43. aipt_v2/health.py +437 -0
  44. aipt_v2/intelligence/__init__.py +194 -0
  45. aipt_v2/intelligence/adaptation.py +474 -0
  46. aipt_v2/intelligence/auth.py +520 -0
  47. aipt_v2/intelligence/chaining.py +775 -0
  48. aipt_v2/intelligence/correlation.py +536 -0
  49. aipt_v2/intelligence/cve_aipt.py +334 -0
  50. aipt_v2/intelligence/cve_info.py +1111 -0
  51. aipt_v2/intelligence/knowledge_graph.py +590 -0
  52. aipt_v2/intelligence/learning.py +626 -0
  53. aipt_v2/intelligence/llm_analyzer.py +502 -0
  54. aipt_v2/intelligence/llm_tool_selector.py +518 -0
  55. aipt_v2/intelligence/payload_generator.py +562 -0
  56. aipt_v2/intelligence/rag.py +239 -0
  57. aipt_v2/intelligence/scope.py +442 -0
  58. aipt_v2/intelligence/searchers/__init__.py +5 -0
  59. aipt_v2/intelligence/searchers/exploitdb_searcher.py +523 -0
  60. aipt_v2/intelligence/searchers/github_searcher.py +467 -0
  61. aipt_v2/intelligence/searchers/google_searcher.py +281 -0
  62. aipt_v2/intelligence/tools.json +443 -0
  63. aipt_v2/intelligence/triage.py +670 -0
  64. aipt_v2/interactive_shell.py +559 -0
  65. aipt_v2/interface/__init__.py +5 -0
  66. aipt_v2/interface/cli.py +230 -0
  67. aipt_v2/interface/main.py +501 -0
  68. aipt_v2/interface/tui.py +1276 -0
  69. aipt_v2/interface/utils.py +583 -0
  70. aipt_v2/llm/__init__.py +39 -0
  71. aipt_v2/llm/config.py +26 -0
  72. aipt_v2/llm/llm.py +514 -0
  73. aipt_v2/llm/memory.py +214 -0
  74. aipt_v2/llm/request_queue.py +89 -0
  75. aipt_v2/llm/utils.py +89 -0
  76. aipt_v2/local_tool_installer.py +1467 -0
  77. aipt_v2/models/__init__.py +15 -0
  78. aipt_v2/models/findings.py +295 -0
  79. aipt_v2/models/phase_result.py +224 -0
  80. aipt_v2/models/scan_config.py +207 -0
  81. aipt_v2/monitoring/grafana/dashboards/aipt-dashboard.json +355 -0
  82. aipt_v2/monitoring/grafana/dashboards/default.yml +17 -0
  83. aipt_v2/monitoring/grafana/datasources/prometheus.yml +17 -0
  84. aipt_v2/monitoring/prometheus.yml +60 -0
  85. aipt_v2/orchestration/__init__.py +52 -0
  86. aipt_v2/orchestration/pipeline.py +398 -0
  87. aipt_v2/orchestration/progress.py +300 -0
  88. aipt_v2/orchestration/scheduler.py +296 -0
  89. aipt_v2/orchestrator.py +2427 -0
  90. aipt_v2/payloads/__init__.py +27 -0
  91. aipt_v2/payloads/cmdi.py +150 -0
  92. aipt_v2/payloads/sqli.py +263 -0
  93. aipt_v2/payloads/ssrf.py +204 -0
  94. aipt_v2/payloads/templates.py +222 -0
  95. aipt_v2/payloads/traversal.py +166 -0
  96. aipt_v2/payloads/xss.py +204 -0
  97. aipt_v2/prompts/__init__.py +60 -0
  98. aipt_v2/proxy/__init__.py +29 -0
  99. aipt_v2/proxy/history.py +352 -0
  100. aipt_v2/proxy/interceptor.py +452 -0
  101. aipt_v2/recon/__init__.py +44 -0
  102. aipt_v2/recon/dns.py +241 -0
  103. aipt_v2/recon/osint.py +367 -0
  104. aipt_v2/recon/subdomain.py +372 -0
  105. aipt_v2/recon/tech_detect.py +311 -0
  106. aipt_v2/reports/__init__.py +17 -0
  107. aipt_v2/reports/generator.py +313 -0
  108. aipt_v2/reports/html_report.py +378 -0
  109. aipt_v2/runtime/__init__.py +53 -0
  110. aipt_v2/runtime/base.py +30 -0
  111. aipt_v2/runtime/docker.py +401 -0
  112. aipt_v2/runtime/local.py +346 -0
  113. aipt_v2/runtime/tool_server.py +205 -0
  114. aipt_v2/runtime/vps.py +830 -0
  115. aipt_v2/scanners/__init__.py +28 -0
  116. aipt_v2/scanners/base.py +273 -0
  117. aipt_v2/scanners/nikto.py +244 -0
  118. aipt_v2/scanners/nmap.py +402 -0
  119. aipt_v2/scanners/nuclei.py +273 -0
  120. aipt_v2/scanners/web.py +454 -0
  121. aipt_v2/scripts/security_audit.py +366 -0
  122. aipt_v2/setup_wizard.py +941 -0
  123. aipt_v2/skills/__init__.py +80 -0
  124. aipt_v2/skills/agents/__init__.py +14 -0
  125. aipt_v2/skills/agents/api_tester.py +706 -0
  126. aipt_v2/skills/agents/base.py +477 -0
  127. aipt_v2/skills/agents/code_review.py +459 -0
  128. aipt_v2/skills/agents/security_agent.py +336 -0
  129. aipt_v2/skills/agents/web_pentest.py +818 -0
  130. aipt_v2/skills/prompts/__init__.py +647 -0
  131. aipt_v2/system_detector.py +539 -0
  132. aipt_v2/telemetry/__init__.py +7 -0
  133. aipt_v2/telemetry/tracer.py +347 -0
  134. aipt_v2/terminal/__init__.py +28 -0
  135. aipt_v2/terminal/executor.py +400 -0
  136. aipt_v2/terminal/sandbox.py +350 -0
  137. aipt_v2/tools/__init__.py +44 -0
  138. aipt_v2/tools/active_directory/__init__.py +78 -0
  139. aipt_v2/tools/active_directory/ad_config.py +238 -0
  140. aipt_v2/tools/active_directory/bloodhound_wrapper.py +447 -0
  141. aipt_v2/tools/active_directory/kerberos_attacks.py +430 -0
  142. aipt_v2/tools/active_directory/ldap_enum.py +533 -0
  143. aipt_v2/tools/active_directory/smb_attacks.py +505 -0
  144. aipt_v2/tools/agents_graph/__init__.py +19 -0
  145. aipt_v2/tools/agents_graph/agents_graph_actions.py +69 -0
  146. aipt_v2/tools/api_security/__init__.py +76 -0
  147. aipt_v2/tools/api_security/api_discovery.py +608 -0
  148. aipt_v2/tools/api_security/graphql_scanner.py +622 -0
  149. aipt_v2/tools/api_security/jwt_analyzer.py +577 -0
  150. aipt_v2/tools/api_security/openapi_fuzzer.py +761 -0
  151. aipt_v2/tools/browser/__init__.py +5 -0
  152. aipt_v2/tools/browser/browser_actions.py +238 -0
  153. aipt_v2/tools/browser/browser_instance.py +535 -0
  154. aipt_v2/tools/browser/tab_manager.py +344 -0
  155. aipt_v2/tools/cloud/__init__.py +70 -0
  156. aipt_v2/tools/cloud/cloud_config.py +273 -0
  157. aipt_v2/tools/cloud/cloud_scanner.py +639 -0
  158. aipt_v2/tools/cloud/prowler_tool.py +571 -0
  159. aipt_v2/tools/cloud/scoutsuite_tool.py +359 -0
  160. aipt_v2/tools/executor.py +307 -0
  161. aipt_v2/tools/parser.py +408 -0
  162. aipt_v2/tools/proxy/__init__.py +5 -0
  163. aipt_v2/tools/proxy/proxy_actions.py +103 -0
  164. aipt_v2/tools/proxy/proxy_manager.py +789 -0
  165. aipt_v2/tools/registry.py +196 -0
  166. aipt_v2/tools/scanners/__init__.py +343 -0
  167. aipt_v2/tools/scanners/acunetix_tool.py +712 -0
  168. aipt_v2/tools/scanners/burp_tool.py +631 -0
  169. aipt_v2/tools/scanners/config.py +156 -0
  170. aipt_v2/tools/scanners/nessus_tool.py +588 -0
  171. aipt_v2/tools/scanners/zap_tool.py +612 -0
  172. aipt_v2/tools/terminal/__init__.py +5 -0
  173. aipt_v2/tools/terminal/terminal_actions.py +37 -0
  174. aipt_v2/tools/terminal/terminal_manager.py +153 -0
  175. aipt_v2/tools/terminal/terminal_session.py +449 -0
  176. aipt_v2/tools/tool_processing.py +108 -0
  177. aipt_v2/utils/__init__.py +17 -0
  178. aipt_v2/utils/logging.py +202 -0
  179. aipt_v2/utils/model_manager.py +187 -0
  180. aipt_v2/utils/searchers/__init__.py +269 -0
  181. aipt_v2/verify_install.py +793 -0
  182. aiptx-2.0.7.dist-info/METADATA +345 -0
  183. aiptx-2.0.7.dist-info/RECORD +187 -0
  184. aiptx-2.0.7.dist-info/WHEEL +5 -0
  185. aiptx-2.0.7.dist-info/entry_points.txt +7 -0
  186. aiptx-2.0.7.dist-info/licenses/LICENSE +21 -0
  187. aiptx-2.0.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,269 @@
1
+ """
2
+ Searcher Utilities for AIPT v2
3
+ ==============================
4
+
5
+ Provides utility functions for intelligence searchers:
6
+ - Domain filtering
7
+ - File extension filtering
8
+ - Repository filtering
9
+ - Directory cleanup
10
+
11
+ These are stub implementations for compatibility with
12
+ intelligence/searchers modules.
13
+ """
14
+
15
+ import os
16
+ import re
17
+ from typing import List, Set
18
+ from pathlib import Path
19
+
20
+ from aipt_v2.utils.logging import logger
21
+
22
+
23
+ # Blocked domains for security/ethical reasons
24
+ BLOCKED_DOMAINS: Set[str] = {
25
+ ".gov",
26
+ ".mil",
27
+ ".edu",
28
+ ".bank",
29
+ ".police",
30
+ }
31
+
32
+ # Allowed web page extensions
33
+ WEB_EXTENSIONS: Set[str] = {
34
+ ".html",
35
+ ".htm",
36
+ ".php",
37
+ ".asp",
38
+ ".aspx",
39
+ ".jsp",
40
+ ".do",
41
+ "", # No extension
42
+ }
43
+
44
+ # Blocked file patterns for GitHub
45
+ BLOCKED_GITHUB_PATTERNS: Set[str] = {
46
+ "README",
47
+ "LICENSE",
48
+ "CHANGELOG",
49
+ "CONTRIBUTING",
50
+ ".md",
51
+ ".txt",
52
+ ".rst",
53
+ ".lock",
54
+ }
55
+
56
+
57
+ class DomainFilter:
58
+ """Filter domains based on security/ethical rules."""
59
+
60
+ def __init__(self, blocked: Set[str] = None, allowed: Set[str] = None):
61
+ self.blocked = blocked or BLOCKED_DOMAINS
62
+ self.allowed = allowed or set()
63
+
64
+ def __call__(self, domain: str) -> bool:
65
+ return self.is_allowed(domain)
66
+
67
+ def is_allowed(self, domain: str) -> bool:
68
+ """
69
+ Check if domain is allowed for scanning.
70
+
71
+ Args:
72
+ domain: Domain to check
73
+
74
+ Returns:
75
+ True if domain is allowed
76
+ """
77
+ domain_lower = domain.lower()
78
+
79
+ # Check blocked list
80
+ for blocked in self.blocked:
81
+ if domain_lower.endswith(blocked):
82
+ logger.debug("Domain blocked", domain=domain, reason=f"ends with {blocked}")
83
+ return False
84
+
85
+ # If allowed list exists, check it
86
+ if self.allowed:
87
+ for allowed in self.allowed:
88
+ if domain_lower.endswith(allowed):
89
+ return True
90
+ return False
91
+
92
+ return True
93
+
94
+
95
+ class ExtensionFilter:
96
+ """Filter files/URLs by extension."""
97
+
98
+ def __init__(self, allowed: Set[str] = None, blocked: Set[str] = None):
99
+ self.allowed = allowed or set()
100
+ self.blocked = blocked or set()
101
+
102
+ def __call__(self, filename: str) -> bool:
103
+ return self.is_allowed(filename)
104
+
105
+ def is_allowed(self, filename: str) -> bool:
106
+ """Check if file extension is allowed."""
107
+ ext = Path(filename).suffix.lower()
108
+
109
+ if self.blocked and ext in self.blocked:
110
+ return False
111
+
112
+ if self.allowed:
113
+ return ext in self.allowed
114
+
115
+ return True
116
+
117
+
118
+ class RepositoryFilter:
119
+ """Filter GitHub repositories."""
120
+
121
+ def __init__(self, blocked_patterns: Set[str] = None):
122
+ self.blocked = blocked_patterns or set()
123
+
124
+ def __call__(self, repo: str) -> bool:
125
+ return self.is_allowed(repo)
126
+
127
+ def is_allowed(self, repo: str) -> bool:
128
+ """Check if repository name is allowed."""
129
+ repo_lower = repo.lower()
130
+
131
+ for pattern in self.blocked:
132
+ if pattern.lower() in repo_lower:
133
+ return False
134
+
135
+ return True
136
+
137
+
138
+ # Pre-configured filter instances
139
+ domain_filter = DomainFilter()
140
+ repository_filter = RepositoryFilter()
141
+
142
+
143
+ def for_google_webpage(extension: str) -> bool:
144
+ """
145
+ Check if extension is valid for web pages.
146
+
147
+ Args:
148
+ extension: File extension (with or without dot)
149
+
150
+ Returns:
151
+ True if valid web page extension
152
+ """
153
+ ext = extension.lower()
154
+ if not ext.startswith("."):
155
+ ext = f".{ext}" if ext else ""
156
+
157
+ return ext in WEB_EXTENSIONS
158
+
159
+
160
+ def for_github_repo_file(filename: str) -> bool:
161
+ """
162
+ Check if file should be included from GitHub repo.
163
+
164
+ Args:
165
+ filename: File name to check
166
+
167
+ Returns:
168
+ True if file should be included
169
+ """
170
+ filename_upper = filename.upper()
171
+
172
+ for pattern in BLOCKED_GITHUB_PATTERNS:
173
+ if pattern.upper() in filename_upper or filename.endswith(pattern):
174
+ return False
175
+
176
+ return True
177
+
178
+
179
+ def remove_empty_directories(path: str) -> int:
180
+ """
181
+ Remove empty directories recursively.
182
+
183
+ Args:
184
+ path: Root path to clean
185
+
186
+ Returns:
187
+ Number of directories removed
188
+ """
189
+ removed = 0
190
+ path_obj = Path(path)
191
+
192
+ if not path_obj.exists():
193
+ return 0
194
+
195
+ for dirpath in sorted(path_obj.rglob("*"), reverse=True):
196
+ if dirpath.is_dir():
197
+ try:
198
+ # Check if directory is empty
199
+ if not any(dirpath.iterdir()):
200
+ dirpath.rmdir()
201
+ removed += 1
202
+ logger.debug("Removed empty directory", path=str(dirpath))
203
+ except OSError as e:
204
+ logger.warning("Failed to remove directory", path=str(dirpath), error=str(e))
205
+
206
+ return removed
207
+
208
+
209
+ def sanitize_filename(filename: str) -> str:
210
+ """
211
+ Sanitize filename for safe filesystem use.
212
+
213
+ Args:
214
+ filename: Original filename
215
+
216
+ Returns:
217
+ Sanitized filename
218
+ """
219
+ # Remove or replace dangerous characters
220
+ sanitized = re.sub(r'[<>:"/\\|?*]', '_', filename)
221
+ sanitized = re.sub(r'\s+', '_', sanitized)
222
+ sanitized = sanitized.strip('._')
223
+
224
+ # Limit length
225
+ if len(sanitized) > 200:
226
+ sanitized = sanitized[:200]
227
+
228
+ return sanitized or "unnamed"
229
+
230
+
231
+ def validate_cve_id(cve_id: str) -> bool:
232
+ """
233
+ Validate CVE ID format.
234
+
235
+ Args:
236
+ cve_id: CVE identifier to validate
237
+
238
+ Returns:
239
+ True if valid CVE format
240
+ """
241
+ pattern = r'^CVE-\d{4}-\d{4,}$'
242
+ return bool(re.match(pattern, cve_id.upper()))
243
+
244
+
245
+ def extract_cve_ids(text: str) -> List[str]:
246
+ """
247
+ Extract CVE IDs from text.
248
+
249
+ Args:
250
+ text: Text to search
251
+
252
+ Returns:
253
+ List of CVE IDs found
254
+ """
255
+ pattern = r'CVE-\d{4}-\d{4,}'
256
+ matches = re.findall(pattern, text.upper())
257
+ return list(set(matches))
258
+
259
+
260
+ # GitHub configuration compatibility
261
+ class GitHubConfig:
262
+ """GitHub API configuration."""
263
+ API_URL = "https://api.github.com"
264
+ SEARCH_URL = f"{API_URL}/search"
265
+ RATE_LIMIT = 30 # requests per minute for unauthenticated
266
+
267
+
268
+ # Alias for backwards compatibility
269
+ c = GitHubConfig