aiptx 2.0.2__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.
Potentially problematic release.
This version of aiptx might be problematic. Click here for more details.
- aipt_v2/__init__.py +110 -0
- aipt_v2/__main__.py +24 -0
- aipt_v2/agents/AIPTxAgent/__init__.py +10 -0
- aipt_v2/agents/AIPTxAgent/aiptx_agent.py +211 -0
- aipt_v2/agents/__init__.py +24 -0
- aipt_v2/agents/base.py +520 -0
- aipt_v2/agents/ptt.py +406 -0
- aipt_v2/agents/state.py +168 -0
- aipt_v2/app.py +960 -0
- aipt_v2/browser/__init__.py +31 -0
- aipt_v2/browser/automation.py +458 -0
- aipt_v2/browser/crawler.py +453 -0
- aipt_v2/cli.py +321 -0
- aipt_v2/compliance/__init__.py +71 -0
- aipt_v2/compliance/compliance_report.py +449 -0
- aipt_v2/compliance/framework_mapper.py +424 -0
- aipt_v2/compliance/nist_mapping.py +345 -0
- aipt_v2/compliance/owasp_mapping.py +330 -0
- aipt_v2/compliance/pci_mapping.py +297 -0
- aipt_v2/config.py +288 -0
- aipt_v2/core/__init__.py +43 -0
- aipt_v2/core/agent.py +630 -0
- aipt_v2/core/llm.py +395 -0
- aipt_v2/core/memory.py +305 -0
- aipt_v2/core/ptt.py +329 -0
- aipt_v2/database/__init__.py +14 -0
- aipt_v2/database/models.py +232 -0
- aipt_v2/database/repository.py +384 -0
- aipt_v2/docker/__init__.py +23 -0
- aipt_v2/docker/builder.py +260 -0
- aipt_v2/docker/manager.py +222 -0
- aipt_v2/docker/sandbox.py +371 -0
- aipt_v2/evasion/__init__.py +58 -0
- aipt_v2/evasion/request_obfuscator.py +272 -0
- aipt_v2/evasion/tls_fingerprint.py +285 -0
- aipt_v2/evasion/ua_rotator.py +301 -0
- aipt_v2/evasion/waf_bypass.py +439 -0
- aipt_v2/execution/__init__.py +23 -0
- aipt_v2/execution/executor.py +302 -0
- aipt_v2/execution/parser.py +544 -0
- aipt_v2/execution/terminal.py +337 -0
- aipt_v2/health.py +437 -0
- aipt_v2/intelligence/__init__.py +85 -0
- aipt_v2/intelligence/auth.py +520 -0
- aipt_v2/intelligence/chaining.py +775 -0
- aipt_v2/intelligence/cve_aipt.py +334 -0
- aipt_v2/intelligence/cve_info.py +1111 -0
- aipt_v2/intelligence/rag.py +239 -0
- aipt_v2/intelligence/scope.py +442 -0
- aipt_v2/intelligence/searchers/__init__.py +5 -0
- aipt_v2/intelligence/searchers/exploitdb_searcher.py +523 -0
- aipt_v2/intelligence/searchers/github_searcher.py +467 -0
- aipt_v2/intelligence/searchers/google_searcher.py +281 -0
- aipt_v2/intelligence/tools.json +443 -0
- aipt_v2/intelligence/triage.py +670 -0
- aipt_v2/interface/__init__.py +5 -0
- aipt_v2/interface/cli.py +230 -0
- aipt_v2/interface/main.py +501 -0
- aipt_v2/interface/tui.py +1276 -0
- aipt_v2/interface/utils.py +583 -0
- aipt_v2/llm/__init__.py +39 -0
- aipt_v2/llm/config.py +26 -0
- aipt_v2/llm/llm.py +514 -0
- aipt_v2/llm/memory.py +214 -0
- aipt_v2/llm/request_queue.py +89 -0
- aipt_v2/llm/utils.py +89 -0
- aipt_v2/models/__init__.py +15 -0
- aipt_v2/models/findings.py +295 -0
- aipt_v2/models/phase_result.py +224 -0
- aipt_v2/models/scan_config.py +207 -0
- aipt_v2/monitoring/grafana/dashboards/aipt-dashboard.json +355 -0
- aipt_v2/monitoring/grafana/dashboards/default.yml +17 -0
- aipt_v2/monitoring/grafana/datasources/prometheus.yml +17 -0
- aipt_v2/monitoring/prometheus.yml +60 -0
- aipt_v2/orchestration/__init__.py +52 -0
- aipt_v2/orchestration/pipeline.py +398 -0
- aipt_v2/orchestration/progress.py +300 -0
- aipt_v2/orchestration/scheduler.py +296 -0
- aipt_v2/orchestrator.py +2284 -0
- aipt_v2/payloads/__init__.py +27 -0
- aipt_v2/payloads/cmdi.py +150 -0
- aipt_v2/payloads/sqli.py +263 -0
- aipt_v2/payloads/ssrf.py +204 -0
- aipt_v2/payloads/templates.py +222 -0
- aipt_v2/payloads/traversal.py +166 -0
- aipt_v2/payloads/xss.py +204 -0
- aipt_v2/prompts/__init__.py +60 -0
- aipt_v2/proxy/__init__.py +29 -0
- aipt_v2/proxy/history.py +352 -0
- aipt_v2/proxy/interceptor.py +452 -0
- aipt_v2/recon/__init__.py +44 -0
- aipt_v2/recon/dns.py +241 -0
- aipt_v2/recon/osint.py +367 -0
- aipt_v2/recon/subdomain.py +372 -0
- aipt_v2/recon/tech_detect.py +311 -0
- aipt_v2/reports/__init__.py +17 -0
- aipt_v2/reports/generator.py +313 -0
- aipt_v2/reports/html_report.py +378 -0
- aipt_v2/runtime/__init__.py +44 -0
- aipt_v2/runtime/base.py +30 -0
- aipt_v2/runtime/docker.py +401 -0
- aipt_v2/runtime/local.py +346 -0
- aipt_v2/runtime/tool_server.py +205 -0
- aipt_v2/scanners/__init__.py +28 -0
- aipt_v2/scanners/base.py +273 -0
- aipt_v2/scanners/nikto.py +244 -0
- aipt_v2/scanners/nmap.py +402 -0
- aipt_v2/scanners/nuclei.py +273 -0
- aipt_v2/scanners/web.py +454 -0
- aipt_v2/scripts/security_audit.py +366 -0
- aipt_v2/telemetry/__init__.py +7 -0
- aipt_v2/telemetry/tracer.py +347 -0
- aipt_v2/terminal/__init__.py +28 -0
- aipt_v2/terminal/executor.py +400 -0
- aipt_v2/terminal/sandbox.py +350 -0
- aipt_v2/tools/__init__.py +44 -0
- aipt_v2/tools/active_directory/__init__.py +78 -0
- aipt_v2/tools/active_directory/ad_config.py +238 -0
- aipt_v2/tools/active_directory/bloodhound_wrapper.py +447 -0
- aipt_v2/tools/active_directory/kerberos_attacks.py +430 -0
- aipt_v2/tools/active_directory/ldap_enum.py +533 -0
- aipt_v2/tools/active_directory/smb_attacks.py +505 -0
- aipt_v2/tools/agents_graph/__init__.py +19 -0
- aipt_v2/tools/agents_graph/agents_graph_actions.py +69 -0
- aipt_v2/tools/api_security/__init__.py +76 -0
- aipt_v2/tools/api_security/api_discovery.py +608 -0
- aipt_v2/tools/api_security/graphql_scanner.py +622 -0
- aipt_v2/tools/api_security/jwt_analyzer.py +577 -0
- aipt_v2/tools/api_security/openapi_fuzzer.py +761 -0
- aipt_v2/tools/browser/__init__.py +5 -0
- aipt_v2/tools/browser/browser_actions.py +238 -0
- aipt_v2/tools/browser/browser_instance.py +535 -0
- aipt_v2/tools/browser/tab_manager.py +344 -0
- aipt_v2/tools/cloud/__init__.py +70 -0
- aipt_v2/tools/cloud/cloud_config.py +273 -0
- aipt_v2/tools/cloud/cloud_scanner.py +639 -0
- aipt_v2/tools/cloud/prowler_tool.py +571 -0
- aipt_v2/tools/cloud/scoutsuite_tool.py +359 -0
- aipt_v2/tools/executor.py +307 -0
- aipt_v2/tools/parser.py +408 -0
- aipt_v2/tools/proxy/__init__.py +5 -0
- aipt_v2/tools/proxy/proxy_actions.py +103 -0
- aipt_v2/tools/proxy/proxy_manager.py +789 -0
- aipt_v2/tools/registry.py +196 -0
- aipt_v2/tools/scanners/__init__.py +343 -0
- aipt_v2/tools/scanners/acunetix_tool.py +712 -0
- aipt_v2/tools/scanners/burp_tool.py +631 -0
- aipt_v2/tools/scanners/config.py +156 -0
- aipt_v2/tools/scanners/nessus_tool.py +588 -0
- aipt_v2/tools/scanners/zap_tool.py +612 -0
- aipt_v2/tools/terminal/__init__.py +5 -0
- aipt_v2/tools/terminal/terminal_actions.py +37 -0
- aipt_v2/tools/terminal/terminal_manager.py +153 -0
- aipt_v2/tools/terminal/terminal_session.py +449 -0
- aipt_v2/tools/tool_processing.py +108 -0
- aipt_v2/utils/__init__.py +17 -0
- aipt_v2/utils/logging.py +201 -0
- aipt_v2/utils/model_manager.py +187 -0
- aipt_v2/utils/searchers/__init__.py +269 -0
- aiptx-2.0.2.dist-info/METADATA +324 -0
- aiptx-2.0.2.dist-info/RECORD +165 -0
- aiptx-2.0.2.dist-info/WHEEL +5 -0
- aiptx-2.0.2.dist-info/entry_points.txt +7 -0
- aiptx-2.0.2.dist-info/licenses/LICENSE +21 -0
- aiptx-2.0.2.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
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aiptx
|
|
3
|
+
Version: 2.0.2
|
|
4
|
+
Summary: AI-Powered Penetration Testing Framework - Autonomous security assessment with LLM intelligence
|
|
5
|
+
Author-email: Satyam Rastogi <satyam@aiptx.io>
|
|
6
|
+
Maintainer-email: Satyam Rastogi <satyam@aiptx.io>
|
|
7
|
+
License: MIT License
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2025 Satyam Rastogi
|
|
10
|
+
|
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
in the Software without restriction, including without limitation the rights
|
|
14
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
furnished to do so, subject to the following conditions:
|
|
17
|
+
|
|
18
|
+
The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
copies or substantial portions of the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
SOFTWARE.
|
|
28
|
+
|
|
29
|
+
Project-URL: Homepage, https://github.com/satyamrastogi/aiptx
|
|
30
|
+
Project-URL: Documentation, https://aiptx.io/docs
|
|
31
|
+
Project-URL: Repository, https://github.com/satyamrastogi/aiptx
|
|
32
|
+
Project-URL: Issues, https://github.com/satyamrastogi/aiptx/issues
|
|
33
|
+
Project-URL: Changelog, https://github.com/satyamrastogi/aiptx/blob/main/CHANGELOG.md
|
|
34
|
+
Keywords: security,penetration-testing,pentest,vulnerability-scanner,vulnerability-assessment,security-scanner,security-tools,security-automation,ai,llm,artificial-intelligence,machine-learning,gpt,claude,cybersecurity,infosec,appsec,devsecops,vapt,dast,sast,bug-bounty,ethical-hacking,red-team,offensive-security,web-security,owasp,cve,exploit,nmap,nuclei,sqlmap,burp-suite,acunetix,nessus,zap,reconnaissance,recon,scanning,exploitation,automation,cli,api
|
|
35
|
+
Classifier: Development Status :: 4 - Beta
|
|
36
|
+
Classifier: Environment :: Console
|
|
37
|
+
Classifier: Environment :: Web Environment
|
|
38
|
+
Classifier: Intended Audience :: Developers
|
|
39
|
+
Classifier: Intended Audience :: Information Technology
|
|
40
|
+
Classifier: Intended Audience :: System Administrators
|
|
41
|
+
Classifier: Intended Audience :: Science/Research
|
|
42
|
+
Classifier: Topic :: Security
|
|
43
|
+
Classifier: Topic :: Security :: Cryptography
|
|
44
|
+
Classifier: Topic :: Software Development :: Testing
|
|
45
|
+
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
46
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
47
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
48
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
49
|
+
Classifier: Topic :: System :: Networking
|
|
50
|
+
Classifier: Topic :: System :: Systems Administration
|
|
51
|
+
Classifier: Topic :: System :: Monitoring
|
|
52
|
+
Classifier: Topic :: Utilities
|
|
53
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
54
|
+
Classifier: Operating System :: OS Independent
|
|
55
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
56
|
+
Classifier: Operating System :: MacOS
|
|
57
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
58
|
+
Classifier: Programming Language :: Python :: 3
|
|
59
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
60
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
61
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
62
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
63
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
64
|
+
Classifier: Typing :: Typed
|
|
65
|
+
Classifier: Framework :: FastAPI
|
|
66
|
+
Classifier: Natural Language :: English
|
|
67
|
+
Requires-Python: >=3.9
|
|
68
|
+
Description-Content-Type: text/markdown
|
|
69
|
+
License-File: LICENSE
|
|
70
|
+
Requires-Dist: litellm>=1.50.0
|
|
71
|
+
Requires-Dist: jinja2>=3.1.0
|
|
72
|
+
Requires-Dist: tiktoken>=0.5.0
|
|
73
|
+
Requires-Dist: requests>=2.31.0
|
|
74
|
+
Requires-Dist: httpx>=0.25.0
|
|
75
|
+
Requires-Dist: aiohttp>=3.9.0
|
|
76
|
+
Requires-Dist: fastapi>=0.104.0
|
|
77
|
+
Requires-Dist: uvicorn[standard]>=0.24.0
|
|
78
|
+
Requires-Dist: pydantic>=2.5.0
|
|
79
|
+
Requires-Dist: pydantic-settings>=2.0.0
|
|
80
|
+
Requires-Dist: slowapi>=0.1.9
|
|
81
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
82
|
+
Requires-Dist: alembic>=1.13.0
|
|
83
|
+
Requires-Dist: textual>=0.44.0
|
|
84
|
+
Requires-Dist: rich>=13.7.0
|
|
85
|
+
Requires-Dist: click>=8.1.0
|
|
86
|
+
Requires-Dist: typer>=0.9.0
|
|
87
|
+
Requires-Dist: pyyaml>=6.0
|
|
88
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
89
|
+
Requires-Dist: aiofiles>=23.0.0
|
|
90
|
+
Requires-Dist: structlog>=23.0.0
|
|
91
|
+
Requires-Dist: psutil>=5.9.0
|
|
92
|
+
Provides-Extra: full
|
|
93
|
+
Requires-Dist: sentence-transformers>=2.2.0; extra == "full"
|
|
94
|
+
Requires-Dist: numpy>=1.24.0; extra == "full"
|
|
95
|
+
Requires-Dist: torch>=2.0.0; extra == "full"
|
|
96
|
+
Requires-Dist: playwright>=1.40.0; extra == "full"
|
|
97
|
+
Requires-Dist: mitmproxy>=10.0.0; extra == "full"
|
|
98
|
+
Requires-Dist: docker>=7.0.0; extra == "full"
|
|
99
|
+
Requires-Dist: pexpect>=4.8.0; extra == "full"
|
|
100
|
+
Requires-Dist: paramiko>=3.4.0; extra == "full"
|
|
101
|
+
Requires-Dist: langchain-core>=0.1.0; extra == "full"
|
|
102
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "full"
|
|
103
|
+
Requires-Dist: scipy>=1.11.0; extra == "full"
|
|
104
|
+
Requires-Dist: pandas>=2.0.0; extra == "full"
|
|
105
|
+
Provides-Extra: dev
|
|
106
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
107
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
108
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
109
|
+
Requires-Dist: pytest-mock>=3.12.0; extra == "dev"
|
|
110
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
111
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
112
|
+
Requires-Dist: mypy>=1.7.0; extra == "dev"
|
|
113
|
+
Requires-Dist: bandit>=1.7.0; extra == "dev"
|
|
114
|
+
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
|
|
115
|
+
Requires-Dist: safety>=2.3.0; extra == "dev"
|
|
116
|
+
Dynamic: license-file
|
|
117
|
+
|
|
118
|
+
# AIPTX - AI-Powered Penetration Testing Framework
|
|
119
|
+
|
|
120
|
+
[](https://badge.fury.io/py/aiptx)
|
|
121
|
+
[](https://pepy.tech/project/aiptx)
|
|
122
|
+
[](https://www.python.org/downloads/)
|
|
123
|
+
[](https://opensource.org/licenses/MIT)
|
|
124
|
+
[](https://github.com/psf/black)
|
|
125
|
+
|
|
126
|
+
> **AI-Powered Security Assessment & Vulnerability Discovery Platform**
|
|
127
|
+
|
|
128
|
+
**AIPTX** is an intelligent penetration testing framework that leverages Large Language Models (LLMs) to autonomously conduct security assessments. It orchestrates comprehensive vulnerability discovery through AI-guided decision making, smart prioritization, and automated reporting.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Key Features
|
|
133
|
+
|
|
134
|
+
### AI Intelligence Layer
|
|
135
|
+
- **LLM-Guided Scanning** — AI decides which techniques to apply based on discovered information
|
|
136
|
+
- **Smart Vulnerability Triage** — Prioritizes findings by real-world exploitability, not just severity scores
|
|
137
|
+
- **Attack Chain Detection** — Identifies how multiple findings combine into critical attack paths
|
|
138
|
+
- **Semantic Tool Selection** — RAG-based matching of objectives to optimal assessment techniques
|
|
139
|
+
|
|
140
|
+
### Comprehensive Assessment Capabilities
|
|
141
|
+
- **Reconnaissance** — Subdomain discovery, DNS enumeration, technology fingerprinting, historical data analysis
|
|
142
|
+
- **Vulnerability Scanning** — Web application testing, configuration analysis, secret detection, container security
|
|
143
|
+
- **Exploitation Testing** — SQL injection, XSS, command injection, credential testing (opt-in)
|
|
144
|
+
- **Post-Exploitation** — Privilege escalation detection, credential extraction, process monitoring
|
|
145
|
+
|
|
146
|
+
### Enterprise Integration
|
|
147
|
+
- Native API support for leading commercial security platforms
|
|
148
|
+
- Unified interface for both open-source and enterprise scanning solutions
|
|
149
|
+
- Seamless integration into existing security workflows
|
|
150
|
+
|
|
151
|
+
### Professional Output
|
|
152
|
+
- **HTML Reports** — Executive-ready vulnerability documentation
|
|
153
|
+
- **JSON Export** — CI/CD pipeline integration
|
|
154
|
+
- **REST API** — Programmatic access for automation
|
|
155
|
+
- **Terminal UI** — Real-time progress monitoring
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Installation
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Recommended: Install with pipx
|
|
163
|
+
pipx install aiptx
|
|
164
|
+
|
|
165
|
+
# Or with pip
|
|
166
|
+
pip install aiptx
|
|
167
|
+
|
|
168
|
+
# Full installation (ML features, browser automation, proxy)
|
|
169
|
+
pip install aiptx[full]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Requirements:** Python 3.9+
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Quick Start
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# Basic security scan
|
|
180
|
+
aiptx scan example.com
|
|
181
|
+
|
|
182
|
+
# AI-guided intelligent scanning
|
|
183
|
+
aiptx scan example.com --ai
|
|
184
|
+
|
|
185
|
+
# Comprehensive assessment (all capabilities)
|
|
186
|
+
aiptx scan example.com --full
|
|
187
|
+
|
|
188
|
+
# Container security assessment
|
|
189
|
+
aiptx scan example.com --container
|
|
190
|
+
|
|
191
|
+
# Secret and credential detection
|
|
192
|
+
aiptx scan example.com --secrets
|
|
193
|
+
|
|
194
|
+
# Check configuration
|
|
195
|
+
aiptx status
|
|
196
|
+
|
|
197
|
+
# Start REST API server
|
|
198
|
+
aiptx api
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## How It Works
|
|
204
|
+
|
|
205
|
+
AIPTX operates on a **Think → Select → Execute → Learn** loop:
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
209
|
+
│ AIPTX Framework │
|
|
210
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
211
|
+
│ AI INTELLIGENCE LAYER │
|
|
212
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
213
|
+
│ │ LLM Engine │ │ Scoring │ │Attack Chain │ │
|
|
214
|
+
│ │ (100+ LLMs) │ │ Engine │ │ Detection │ │
|
|
215
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
216
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
217
|
+
│ ASSESSMENT PIPELINE │
|
|
218
|
+
│ RECON ──────► SCAN ──────► EXPLOIT ──────► POST-EXPLOIT │
|
|
219
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
220
|
+
│ OUTPUT │
|
|
221
|
+
│ HTML Reports │ JSON Export │ REST API │ TUI │
|
|
222
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
1. **Think** — AI analyzes target and current findings
|
|
226
|
+
2. **Select** — Chooses appropriate assessment techniques via semantic search
|
|
227
|
+
3. **Execute** — Runs assessments in isolated environments
|
|
228
|
+
4. **Learn** — Extracts findings and determines next steps
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## LLM Configuration
|
|
233
|
+
|
|
234
|
+
AIPTX supports **100+ LLM providers** for AI-guided scanning:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Anthropic Claude
|
|
238
|
+
export ANTHROPIC_API_KEY="your-key"
|
|
239
|
+
|
|
240
|
+
# OpenAI
|
|
241
|
+
export OPENAI_API_KEY="your-key"
|
|
242
|
+
|
|
243
|
+
# Azure OpenAI
|
|
244
|
+
export AZURE_API_KEY="your-key"
|
|
245
|
+
export AZURE_API_BASE="your-endpoint"
|
|
246
|
+
|
|
247
|
+
# Local models (for offline/private use)
|
|
248
|
+
export OLLAMA_API_BASE="http://localhost:11434"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Use Cases
|
|
254
|
+
|
|
255
|
+
| Scenario | Command |
|
|
256
|
+
|----------|---------|
|
|
257
|
+
| **Bug Bounty** | `aiptx scan target.com --ai --full` |
|
|
258
|
+
| **Penetration Testing** | `aiptx scan client.com --full` |
|
|
259
|
+
| **DevSecOps Pipeline** | `aiptx scan app.com --container --secrets --json` |
|
|
260
|
+
| **Red Team Operations** | `aiptx scan target.corp --ai --exploit --full` |
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Command Reference
|
|
265
|
+
|
|
266
|
+
| Command | Description |
|
|
267
|
+
|---------|-------------|
|
|
268
|
+
| `aiptx scan <target>` | Run security assessment |
|
|
269
|
+
| `aiptx scan <target> --ai` | Enable AI-guided scanning |
|
|
270
|
+
| `aiptx scan <target> --full` | Comprehensive assessment |
|
|
271
|
+
| `aiptx scan <target> --quick` | Fast essential checks only |
|
|
272
|
+
| `aiptx scan <target> --exploit` | Enable exploitation testing |
|
|
273
|
+
| `aiptx scan <target> --container` | Container security scanning |
|
|
274
|
+
| `aiptx scan <target> --secrets` | Credential/secret detection |
|
|
275
|
+
| `aiptx status` | Check configuration |
|
|
276
|
+
| `aiptx version` | Show version |
|
|
277
|
+
| `aiptx api` | Start REST API server |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Why AIPTX?
|
|
282
|
+
|
|
283
|
+
| Capability | AIPTX | Traditional Approach |
|
|
284
|
+
|------------|-------|---------------------|
|
|
285
|
+
| AI-Guided Decisions | ✅ | ❌ Manual |
|
|
286
|
+
| Unified Interface | ✅ | ❌ Multiple tools |
|
|
287
|
+
| Attack Chain Analysis | ✅ | ❌ Manual correlation |
|
|
288
|
+
| Smart Prioritization | ✅ | ❌ CVSS only |
|
|
289
|
+
| Professional Reports | ✅ | ❌ Manual documentation |
|
|
290
|
+
| Single Command | ✅ | ❌ Complex scripts |
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Requirements
|
|
295
|
+
|
|
296
|
+
- **Python**: 3.9 or higher
|
|
297
|
+
- **OS**: Linux, macOS, Windows (WSL recommended)
|
|
298
|
+
- **Optional**: Docker for isolated execution
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## License
|
|
303
|
+
|
|
304
|
+
MIT License — Free for commercial and personal use.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Author
|
|
309
|
+
|
|
310
|
+
**Satyam Rastogi** — Security Researcher & Developer
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Links
|
|
315
|
+
|
|
316
|
+
- [PyPI Package](https://pypi.org/project/aiptx/)
|
|
317
|
+
- [GitHub Repository](https://github.com/satyamrastogi/aiptx)
|
|
318
|
+
- [Changelog](https://github.com/satyamrastogi/aiptx/blob/main/CHANGELOG.md)
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
<p align="center">
|
|
323
|
+
<b>Intelligent Security Assessment, Simplified.</b>
|
|
324
|
+
</p>
|