command-vault-mcp 0.8.0__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.
- command_vault/__init__.py +3 -0
- command_vault/categories.py +427 -0
- command_vault/cli.py +453 -0
- command_vault/database.py +1557 -0
- command_vault/history_parser.py +452 -0
- command_vault/indexer.py +304 -0
- command_vault/models.py +176 -0
- command_vault/parser.py +901 -0
- command_vault/security.py +190 -0
- command_vault/server.py +623 -0
- command_vault/techniques.py +228 -0
- command_vault/tools.py +545 -0
- command_vault_mcp-0.8.0.dist-info/METADATA +279 -0
- command_vault_mcp-0.8.0.dist-info/RECORD +17 -0
- command_vault_mcp-0.8.0.dist-info/WHEEL +4 -0
- command_vault_mcp-0.8.0.dist-info/entry_points.txt +3 -0
- command_vault_mcp-0.8.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"""Pre-defined categories and tool mappings for Command Vault."""
|
|
2
|
+
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# CATEGORIES
|
|
5
|
+
# =============================================================================
|
|
6
|
+
CATEGORIES = {
|
|
7
|
+
# Core categories (Boxes)
|
|
8
|
+
"recon": "Reconnaissance & Scanning",
|
|
9
|
+
"web": "Web Application Testing",
|
|
10
|
+
"ad": "Active Directory",
|
|
11
|
+
"smb": "SMB/File Shares",
|
|
12
|
+
"wifi": "Wireless Attacks",
|
|
13
|
+
"privesc": "Privilege Escalation",
|
|
14
|
+
"creds": "Credential Attacks",
|
|
15
|
+
"shells": "Shells & Payloads",
|
|
16
|
+
"pivot": "Pivoting & Tunneling",
|
|
17
|
+
"database": "Database Access",
|
|
18
|
+
|
|
19
|
+
# Challenge-specific
|
|
20
|
+
"pwn": "Binary Exploitation",
|
|
21
|
+
"reversing": "Reverse Engineering",
|
|
22
|
+
"crypto_tools": "Cryptographic Analysis",
|
|
23
|
+
"mobile": "Mobile Security",
|
|
24
|
+
"emulation": "CPU Emulation",
|
|
25
|
+
"blockchain": "Smart Contract Analysis",
|
|
26
|
+
"hardware": "Hardware Hacking",
|
|
27
|
+
|
|
28
|
+
# DFIR/Sherlock
|
|
29
|
+
"dfir": "Digital Forensics",
|
|
30
|
+
"log_analysis": "Log Analysis (SIEM)",
|
|
31
|
+
"network_forensics": "Network Forensics",
|
|
32
|
+
"disk_forensics": "Disk Artifact Analysis",
|
|
33
|
+
"memory_forensics": "Memory Forensics",
|
|
34
|
+
"malware": "Malware Analysis",
|
|
35
|
+
"cloud_forensics": "Cloud Investigation",
|
|
36
|
+
|
|
37
|
+
# General
|
|
38
|
+
"osint": "Open Source Intelligence",
|
|
39
|
+
"misc": "Miscellaneous",
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# =============================================================================
|
|
44
|
+
# TOOL TO CATEGORY MAPPING
|
|
45
|
+
# =============================================================================
|
|
46
|
+
TOOL_CATEGORIES = {
|
|
47
|
+
# Recon
|
|
48
|
+
"nmap": "recon",
|
|
49
|
+
"masscan": "recon",
|
|
50
|
+
"rustscan": "recon",
|
|
51
|
+
"ping": "recon",
|
|
52
|
+
"traceroute": "recon",
|
|
53
|
+
"whatweb": "recon",
|
|
54
|
+
"wafw00f": "recon",
|
|
55
|
+
|
|
56
|
+
# Web
|
|
57
|
+
"gobuster": "web",
|
|
58
|
+
"ffuf": "web",
|
|
59
|
+
"feroxbuster": "web",
|
|
60
|
+
"dirb": "web",
|
|
61
|
+
"dirsearch": "web",
|
|
62
|
+
"wfuzz": "web",
|
|
63
|
+
"nikto": "web",
|
|
64
|
+
"sqlmap": "web",
|
|
65
|
+
"curl": "web",
|
|
66
|
+
"wget": "web",
|
|
67
|
+
"httpx": "web",
|
|
68
|
+
"nuclei": "web",
|
|
69
|
+
"burpsuite": "web",
|
|
70
|
+
"wpscan": "web",
|
|
71
|
+
"droopescan": "web",
|
|
72
|
+
"joomscan": "web",
|
|
73
|
+
|
|
74
|
+
# Active Directory
|
|
75
|
+
"bloodhound-python": "ad",
|
|
76
|
+
"bloodhound": "ad",
|
|
77
|
+
"crackmapexec": "ad",
|
|
78
|
+
"cme": "ad",
|
|
79
|
+
"netexec": "ad",
|
|
80
|
+
"nxc": "ad",
|
|
81
|
+
"certipy": "ad",
|
|
82
|
+
"certipy-ad": "ad",
|
|
83
|
+
"rubeus": "ad",
|
|
84
|
+
"mimikatz": "ad",
|
|
85
|
+
"pypykatz": "ad",
|
|
86
|
+
"ldapsearch": "ad",
|
|
87
|
+
"ldapdomaindump": "ad",
|
|
88
|
+
"windapsearch": "ad",
|
|
89
|
+
"adidnsdump": "ad",
|
|
90
|
+
"bloodyad": "ad",
|
|
91
|
+
"ldeep": "ad",
|
|
92
|
+
"petitpotam": "ad",
|
|
93
|
+
"coercer": "ad",
|
|
94
|
+
"krbrelayx": "ad",
|
|
95
|
+
"targetedkerberoast": "ad",
|
|
96
|
+
"gettgtpkinit": "ad",
|
|
97
|
+
"getnthash": "ad",
|
|
98
|
+
"dacledit": "ad",
|
|
99
|
+
"owneredit": "ad",
|
|
100
|
+
"addcomputer": "ad",
|
|
101
|
+
|
|
102
|
+
# Impacket tools
|
|
103
|
+
"impacket-psexec": "ad",
|
|
104
|
+
"impacket-wmiexec": "ad",
|
|
105
|
+
"impacket-smbexec": "ad",
|
|
106
|
+
"impacket-atexec": "ad",
|
|
107
|
+
"impacket-dcomexec": "ad",
|
|
108
|
+
"impacket-secretsdump": "ad",
|
|
109
|
+
"impacket-getTGT": "ad",
|
|
110
|
+
"impacket-getST": "ad",
|
|
111
|
+
"impacket-GetNPUsers": "ad",
|
|
112
|
+
"impacket-GetUserSPNs": "ad",
|
|
113
|
+
"impacket-ticketer": "ad",
|
|
114
|
+
"impacket-ntlmrelayx": "ad",
|
|
115
|
+
"impacket-smbserver": "smb",
|
|
116
|
+
"impacket-mssqlclient": "database",
|
|
117
|
+
"impacket-reg": "ad",
|
|
118
|
+
"impacket-addcomputer": "ad",
|
|
119
|
+
"impacket-rbcd": "ad",
|
|
120
|
+
"impacket-describeTicket": "ad",
|
|
121
|
+
"impacket-changepasswd": "ad",
|
|
122
|
+
"impacket-lookupsid": "ad",
|
|
123
|
+
"impacket-samrdump": "ad",
|
|
124
|
+
|
|
125
|
+
# SMB
|
|
126
|
+
"smbmap": "smb",
|
|
127
|
+
"smbclient": "smb",
|
|
128
|
+
"enum4linux": "smb",
|
|
129
|
+
"enum4linux-ng": "smb",
|
|
130
|
+
"smbget": "smb",
|
|
131
|
+
"rpcclient": "smb",
|
|
132
|
+
"nbtstat": "smb",
|
|
133
|
+
"nbtscan": "smb",
|
|
134
|
+
|
|
135
|
+
# WiFi
|
|
136
|
+
"aircrack-ng": "wifi",
|
|
137
|
+
"airodump-ng": "wifi",
|
|
138
|
+
"aireplay-ng": "wifi",
|
|
139
|
+
"airmon-ng": "wifi",
|
|
140
|
+
"airdecap-ng": "wifi",
|
|
141
|
+
"eaphammer": "wifi",
|
|
142
|
+
"hostapd": "wifi",
|
|
143
|
+
"wpa_supplicant": "wifi",
|
|
144
|
+
"bettercap": "wifi",
|
|
145
|
+
"hcxdumptool": "wifi",
|
|
146
|
+
"hcxpcapngtool": "wifi",
|
|
147
|
+
|
|
148
|
+
# Privilege Escalation
|
|
149
|
+
"linpeas": "privesc",
|
|
150
|
+
"winpeas": "privesc",
|
|
151
|
+
"pspy": "privesc",
|
|
152
|
+
"linux-exploit-suggester": "privesc",
|
|
153
|
+
"windows-exploit-suggester": "privesc",
|
|
154
|
+
"seatbelt": "privesc",
|
|
155
|
+
"sharphound": "privesc",
|
|
156
|
+
"powerup": "privesc",
|
|
157
|
+
"privesccheck": "privesc",
|
|
158
|
+
"sudo": "privesc",
|
|
159
|
+
|
|
160
|
+
# Credentials
|
|
161
|
+
"hashcat": "creds",
|
|
162
|
+
"john": "creds",
|
|
163
|
+
"hydra": "creds",
|
|
164
|
+
"medusa": "creds",
|
|
165
|
+
"patator": "creds",
|
|
166
|
+
"cewl": "creds",
|
|
167
|
+
"crunch": "creds",
|
|
168
|
+
"hash-identifier": "creds",
|
|
169
|
+
"nth": "creds",
|
|
170
|
+
"name-that-hash": "creds",
|
|
171
|
+
"secretsdump": "creds",
|
|
172
|
+
"ansible2john": "creds",
|
|
173
|
+
"ssh2john": "creds",
|
|
174
|
+
"zip2john": "creds",
|
|
175
|
+
"rar2john": "creds",
|
|
176
|
+
"keepass2john": "creds",
|
|
177
|
+
"pfx2john": "creds",
|
|
178
|
+
"office2john": "creds",
|
|
179
|
+
|
|
180
|
+
# Shells & Payloads
|
|
181
|
+
"msfvenom": "shells",
|
|
182
|
+
"msfconsole": "shells",
|
|
183
|
+
"nc": "shells",
|
|
184
|
+
"netcat": "shells",
|
|
185
|
+
"ncat": "shells",
|
|
186
|
+
"socat": "shells",
|
|
187
|
+
"rlwrap": "shells",
|
|
188
|
+
"pwncat": "shells",
|
|
189
|
+
"powercat": "shells",
|
|
190
|
+
|
|
191
|
+
# Pivoting
|
|
192
|
+
"chisel": "pivot",
|
|
193
|
+
"ligolo-ng": "pivot",
|
|
194
|
+
"ligolo": "pivot",
|
|
195
|
+
"sshuttle": "pivot",
|
|
196
|
+
"proxychains": "pivot",
|
|
197
|
+
"proxychains4": "pivot",
|
|
198
|
+
"ssh": "pivot",
|
|
199
|
+
"plink": "pivot",
|
|
200
|
+
"ngrok": "pivot",
|
|
201
|
+
"bore": "pivot",
|
|
202
|
+
|
|
203
|
+
# Database
|
|
204
|
+
"mysql": "database",
|
|
205
|
+
"psql": "database",
|
|
206
|
+
"mssqlclient.py": "database",
|
|
207
|
+
"odat": "database",
|
|
208
|
+
"sqlplus": "database",
|
|
209
|
+
"mongo": "database",
|
|
210
|
+
"redis-cli": "database",
|
|
211
|
+
|
|
212
|
+
# PWN / Binary Exploitation
|
|
213
|
+
"gdb": "pwn",
|
|
214
|
+
"pwndbg": "pwn",
|
|
215
|
+
"gef": "pwn",
|
|
216
|
+
"peda": "pwn",
|
|
217
|
+
"ropper": "pwn",
|
|
218
|
+
"ROPgadget": "pwn",
|
|
219
|
+
"one_gadget": "pwn",
|
|
220
|
+
"checksec": "pwn",
|
|
221
|
+
"patchelf": "pwn",
|
|
222
|
+
"pwn": "pwn",
|
|
223
|
+
"pwntools": "pwn",
|
|
224
|
+
|
|
225
|
+
# Reversing
|
|
226
|
+
"ghidra": "reversing",
|
|
227
|
+
"ida": "reversing",
|
|
228
|
+
"radare2": "reversing",
|
|
229
|
+
"r2": "reversing",
|
|
230
|
+
"rizin": "reversing",
|
|
231
|
+
"cutter": "reversing",
|
|
232
|
+
"strings": "reversing",
|
|
233
|
+
"file": "reversing",
|
|
234
|
+
"objdump": "reversing",
|
|
235
|
+
"readelf": "reversing",
|
|
236
|
+
"nm": "reversing",
|
|
237
|
+
"ltrace": "reversing",
|
|
238
|
+
"strace": "reversing",
|
|
239
|
+
"binwalk": "reversing",
|
|
240
|
+
"upx": "reversing",
|
|
241
|
+
"uncompyle6": "reversing",
|
|
242
|
+
"pycdc": "reversing",
|
|
243
|
+
"dnspy": "reversing",
|
|
244
|
+
"ilspy": "reversing",
|
|
245
|
+
"jd-gui": "reversing",
|
|
246
|
+
"jadx": "reversing",
|
|
247
|
+
"jadx-gui": "reversing",
|
|
248
|
+
"dex2jar": "reversing",
|
|
249
|
+
"apktool": "mobile",
|
|
250
|
+
"die": "reversing",
|
|
251
|
+
|
|
252
|
+
# Mobile
|
|
253
|
+
"frida": "mobile",
|
|
254
|
+
"objection": "mobile",
|
|
255
|
+
"adb": "mobile",
|
|
256
|
+
"aapt": "mobile",
|
|
257
|
+
|
|
258
|
+
# Emulation
|
|
259
|
+
"unicorn": "emulation",
|
|
260
|
+
"keystone": "emulation",
|
|
261
|
+
"capstone": "emulation",
|
|
262
|
+
"qemu": "emulation",
|
|
263
|
+
|
|
264
|
+
# Crypto Tools
|
|
265
|
+
"openssl": "crypto_tools",
|
|
266
|
+
"gpg": "crypto_tools",
|
|
267
|
+
"ansible-vault": "crypto_tools",
|
|
268
|
+
"cyberchef": "crypto_tools",
|
|
269
|
+
"hashpump": "crypto_tools",
|
|
270
|
+
"rsactftool": "crypto_tools",
|
|
271
|
+
|
|
272
|
+
# DFIR
|
|
273
|
+
"volatility": "memory_forensics",
|
|
274
|
+
"volatility3": "memory_forensics",
|
|
275
|
+
"vol": "memory_forensics",
|
|
276
|
+
"vol3": "memory_forensics",
|
|
277
|
+
"rekall": "memory_forensics",
|
|
278
|
+
"aeskeyfind": "memory_forensics",
|
|
279
|
+
|
|
280
|
+
# Disk Forensics
|
|
281
|
+
"autopsy": "disk_forensics",
|
|
282
|
+
"sleuthkit": "disk_forensics",
|
|
283
|
+
"fls": "disk_forensics",
|
|
284
|
+
"icat": "disk_forensics",
|
|
285
|
+
"mmls": "disk_forensics",
|
|
286
|
+
"MFTECmd": "disk_forensics",
|
|
287
|
+
"PECmd": "disk_forensics",
|
|
288
|
+
"AmcacheParser": "disk_forensics",
|
|
289
|
+
"AppCompatCacheParser": "disk_forensics",
|
|
290
|
+
"ShellBagsExplorer": "disk_forensics",
|
|
291
|
+
"RegistryExplorer": "disk_forensics",
|
|
292
|
+
"KAPE": "disk_forensics",
|
|
293
|
+
"plaso": "disk_forensics",
|
|
294
|
+
"log2timeline": "disk_forensics",
|
|
295
|
+
|
|
296
|
+
# Network Forensics
|
|
297
|
+
"wireshark": "network_forensics",
|
|
298
|
+
"tshark": "network_forensics",
|
|
299
|
+
"tcpdump": "network_forensics",
|
|
300
|
+
"NetworkMiner": "network_forensics",
|
|
301
|
+
"zeek": "network_forensics",
|
|
302
|
+
"bro": "network_forensics",
|
|
303
|
+
"snort": "network_forensics",
|
|
304
|
+
|
|
305
|
+
# Log Analysis
|
|
306
|
+
"splunk": "log_analysis",
|
|
307
|
+
"chainsaw": "log_analysis",
|
|
308
|
+
"hayabusa": "log_analysis",
|
|
309
|
+
"evtxecmd": "log_analysis",
|
|
310
|
+
"logparser": "log_analysis",
|
|
311
|
+
"zircolite": "log_analysis",
|
|
312
|
+
|
|
313
|
+
# Malware Analysis
|
|
314
|
+
"pestudio": "malware",
|
|
315
|
+
"peview": "malware",
|
|
316
|
+
"x64dbg": "malware",
|
|
317
|
+
"x32dbg": "malware",
|
|
318
|
+
"ollydbg": "malware",
|
|
319
|
+
"procmon": "malware",
|
|
320
|
+
"process-monitor": "malware",
|
|
321
|
+
"yara": "malware",
|
|
322
|
+
"capa": "malware",
|
|
323
|
+
"floss": "malware",
|
|
324
|
+
|
|
325
|
+
# Cloud
|
|
326
|
+
"aws": "cloud_forensics",
|
|
327
|
+
"az": "cloud_forensics",
|
|
328
|
+
"gcloud": "cloud_forensics",
|
|
329
|
+
"kubectl": "cloud_forensics",
|
|
330
|
+
|
|
331
|
+
# OSINT
|
|
332
|
+
"theHarvester": "osint",
|
|
333
|
+
"sherlock": "osint",
|
|
334
|
+
"maltego": "osint",
|
|
335
|
+
"spiderfoot": "osint",
|
|
336
|
+
"recon-ng": "osint",
|
|
337
|
+
"amass": "osint",
|
|
338
|
+
"subfinder": "osint",
|
|
339
|
+
"assetfinder": "osint",
|
|
340
|
+
"sublist3r": "osint",
|
|
341
|
+
|
|
342
|
+
# Misc
|
|
343
|
+
"git": "misc",
|
|
344
|
+
"docker": "misc",
|
|
345
|
+
"python": "misc",
|
|
346
|
+
"python3": "misc",
|
|
347
|
+
"php": "misc",
|
|
348
|
+
"base64": "misc",
|
|
349
|
+
"xxd": "misc",
|
|
350
|
+
"hexdump": "misc",
|
|
351
|
+
"exiftool": "misc",
|
|
352
|
+
"steghide": "misc",
|
|
353
|
+
"stegseek": "misc",
|
|
354
|
+
"zsteg": "misc",
|
|
355
|
+
"foremost": "misc",
|
|
356
|
+
"evil-winrm": "shells",
|
|
357
|
+
"xfreerdp": "misc",
|
|
358
|
+
"rdesktop": "misc",
|
|
359
|
+
"vncviewer": "misc",
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
# =============================================================================
|
|
364
|
+
# TOOL ALIASES
|
|
365
|
+
# =============================================================================
|
|
366
|
+
TOOL_ALIASES = {
|
|
367
|
+
"cme": "crackmapexec",
|
|
368
|
+
"nxc": "netexec",
|
|
369
|
+
"bh": "bloodhound-python",
|
|
370
|
+
"vol": "volatility",
|
|
371
|
+
"vol3": "volatility3",
|
|
372
|
+
"r2": "radare2",
|
|
373
|
+
"nc": "netcat",
|
|
374
|
+
"ncat": "netcat",
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
# =============================================================================
|
|
379
|
+
# IMPACKET PREFIX DETECTION
|
|
380
|
+
# =============================================================================
|
|
381
|
+
TOOL_PREFIXES = [
|
|
382
|
+
"impacket-",
|
|
383
|
+
"aircrack-",
|
|
384
|
+
"airodump-",
|
|
385
|
+
"aireplay-",
|
|
386
|
+
"airmon-",
|
|
387
|
+
]
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def get_tool_category(tool_name: str) -> str:
|
|
391
|
+
"""
|
|
392
|
+
Get category for a tool, handling aliases and prefixes.
|
|
393
|
+
|
|
394
|
+
Args:
|
|
395
|
+
tool_name: The tool name (e.g., 'nmap', 'impacket-psexec')
|
|
396
|
+
|
|
397
|
+
Returns:
|
|
398
|
+
Category name or 'misc' if unknown
|
|
399
|
+
"""
|
|
400
|
+
# Normalize
|
|
401
|
+
tool_lower = tool_name.lower().strip()
|
|
402
|
+
|
|
403
|
+
# Check aliases first
|
|
404
|
+
if tool_lower in TOOL_ALIASES:
|
|
405
|
+
tool_lower = TOOL_ALIASES[tool_lower]
|
|
406
|
+
|
|
407
|
+
# Direct lookup
|
|
408
|
+
if tool_lower in TOOL_CATEGORIES:
|
|
409
|
+
return TOOL_CATEGORIES[tool_lower]
|
|
410
|
+
|
|
411
|
+
# Check prefixes
|
|
412
|
+
for prefix in TOOL_PREFIXES:
|
|
413
|
+
if tool_lower.startswith(prefix):
|
|
414
|
+
# Try full name first
|
|
415
|
+
if tool_lower in TOOL_CATEGORIES:
|
|
416
|
+
return TOOL_CATEGORIES[tool_lower]
|
|
417
|
+
# Otherwise use prefix category
|
|
418
|
+
prefix_tool = prefix.rstrip("-")
|
|
419
|
+
if prefix_tool in TOOL_CATEGORIES:
|
|
420
|
+
return TOOL_CATEGORIES[prefix_tool]
|
|
421
|
+
|
|
422
|
+
return "misc"
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
def get_category_description(category: str) -> str:
|
|
426
|
+
"""Get description for a category."""
|
|
427
|
+
return CATEGORIES.get(category, "Miscellaneous")
|