Files
CoM-c2itall/modules/attack-box/files/workspace_generator.py
T
Operator 98103466d8 Initial public portfolio release
Sanitized version of red team infrastructure automation platform.
Operational content (implant pipelines, lures, credential capture)
replaced with documented stubs. Architecture and infrastructure
automation code intact.
2026-06-23 16:12:14 -04:00

234 lines
10 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Workspace Structure Generator for Attack Box
Creates trashpanda-style penetration testing directory structure
"""
import os
import time
from pathlib import Path
def create_workspace_structure(base_name="/root/operator", operator="operator"):
"""Create a comprehensive penetration testing directory structure like trashpanda."""
# Main engagement directory
base_dir = os.path.abspath(base_name)
# Primary directories (based on trashpanda structure)
main_dirs = {
"tools": "Downloaded/compiled tools and scripts",
"scans": "All scan results organized by type",
"logs": "Execution logs and debug output",
"loot": "Extracted credentials, hashes, and sensitive data",
"payloads": "Custom payloads and exploit code",
"targets": "Target lists and reconnaissance data",
"screenshots": "Visual evidence and GUI captures",
"reports": "Draft reports and documentation",
"notes": "Manual notes and observations",
"exploits": "Working exploits and proof-of-concepts",
"wordlists": "Custom and downloaded wordlists",
"pcaps": "Network captures and traffic analysis"
}
# Scan subdirectories (comprehensive enumeration structure)
scan_subdirs = {
"nmap": "Network discovery and port scanning",
"dns": "DNS enumeration and zone transfers",
"snmp": "SNMP enumeration and community strings",
"smb": "SMB/NetBIOS enumeration and shares",
"web": "Web application scanning and enumeration",
"ssl": "SSL/TLS certificate and cipher analysis",
"vulns": "Vulnerability scanning and NSE scripts",
"ldap": "LDAP enumeration and directory services",
"ftp": "FTP enumeration and anonymous access",
"ssh": "SSH enumeration and key analysis",
"databases": "Database enumeration (MySQL, MSSQL, etc)",
"custom": "Custom and manual scans",
"reachability": "Network reachability test results"
}
# Loot subdirectories (for extracted data)
loot_subdirs = {
"credentials": "Usernames, passwords, and authentication data",
"hashes": "Password hashes and cracking results",
"keys": "SSH keys, certificates, and crypto material",
"configs": "Configuration files and sensitive data",
"databases": "Extracted database contents",
"files": "Interesting files and documents"
}
print(f"[+] Creating penetration testing structure: {base_dir}")
# Create main directories
for dir_name, description in main_dirs.items():
dir_path = os.path.join(base_dir, dir_name)
Path(dir_path).mkdir(parents=True, exist_ok=True)
# Create README files for documentation
readme_path = os.path.join(dir_path, "README.md")
if not os.path.exists(readme_path):
with open(readme_path, 'w') as f:
f.write(f"# {dir_name.upper()}\n\n")
f.write(f"{description}\n\n")
f.write(f"Created by Attack Box on {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
# Create scan subdirectories
scans_dir = os.path.join(base_dir, "scans")
for subdir, description in scan_subdirs.items():
subdir_path = os.path.join(scans_dir, subdir)
Path(subdir_path).mkdir(parents=True, exist_ok=True)
readme_path = os.path.join(subdir_path, "README.md")
if not os.path.exists(readme_path):
with open(readme_path, 'w') as f:
f.write(f"# {subdir.upper()} SCANS\n\n")
f.write(f"{description}\n\n")
# Create loot subdirectories
loot_dir = os.path.join(base_dir, "loot")
for subdir, description in loot_subdirs.items():
subdir_path = os.path.join(loot_dir, subdir)
Path(subdir_path).mkdir(parents=True, exist_ok=True)
readme_path = os.path.join(subdir_path, "README.md")
if not os.path.exists(readme_path):
with open(readme_path, 'w') as f:
f.write(f"# {subdir.upper()}\n\n")
f.write(f"{description}\n\n")
# Create engagement log
engagement_log = os.path.join(base_dir, "logs", "engagement.log")
with open(engagement_log, 'w') as f:
f.write(f"Attack Box Engagement Log\n")
f.write(f"=========================\n")
f.write(f"Started: {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write(f"Operator: {operator}\n")
f.write(f"Tool: Attack Box Manual Testing Interface\n\n")
# Create initial target file
target_template = os.path.join(base_dir, "targets", "targets.txt")
if not os.path.exists(target_template):
with open(target_template, 'w') as f:
f.write("# Target List\n")
f.write("# Add IPs, ranges, or hostnames (one per line)\n")
f.write("# Examples:\n")
f.write("# 192.168.1.1\n")
f.write("# 192.168.1.0/24\n")
f.write("# 192.168.1.1-50\n")
f.write("# target.domain.com\n\n")
# Create manual commands file
manual_commands = os.path.join(base_dir, "scans", "_manual_commands.txt")
with open(manual_commands, 'w') as f:
f.write("# Manual Commands for Further Enumeration\n")
f.write("# ======================================\n")
f.write(f"# Generated by Attack Box on {time.strftime('%Y-%m-%d %H:%M:%S')}\n\n")
f.write("# Example commands:\n")
f.write("# nmap -sS -T4 --top-ports 1000 <target>\n")
f.write("# gobuster dir -u http://<target> -w /usr/share/wordlists/dirb/common.txt\n")
f.write("# nikto -h http://<target>\n")
f.write("# sqlmap -u http://<target>?id=1 --dbs\n\n")
# Create notes template
notes_template = os.path.join(base_dir, "notes", "engagement_notes.md")
with open(notes_template, 'w') as f:
f.write(f"# Engagement Notes\n\n")
f.write(f"**Date:** {time.strftime('%Y-%m-%d')}\n")
f.write(f"**Operator:** {operator}\n")
f.write(f"**Engagement:** TBD\n\n")
f.write(f"## Scope\n")
f.write(f"- [ ] Define target scope\n")
f.write(f"- [ ] Identify key assets\n")
f.write(f"- [ ] Document rules of engagement\n\n")
f.write(f"## Methodology\n")
f.write(f"1. **Reconnaissance**\n")
f.write(f" - Passive information gathering\n")
f.write(f" - DNS enumeration\n")
f.write(f" - OSINT collection\n\n")
f.write(f"2. **Scanning & Enumeration**\n")
f.write(f" - Network discovery\n")
f.write(f" - Port scanning\n")
f.write(f" - Service enumeration\n\n")
f.write(f"3. **Vulnerability Assessment**\n")
f.write(f" - Automated scanning\n")
f.write(f" - Manual testing\n")
f.write(f" - Vulnerability validation\n\n")
f.write(f"4. **Exploitation**\n")
f.write(f" - Proof of concept development\n")
f.write(f" - Privilege escalation\n")
f.write(f" - Lateral movement\n\n")
f.write(f"## Key Findings\n")
f.write(f"*Document critical findings here*\n\n")
f.write(f"## Timeline\n")
f.write(f"- **{time.strftime('%Y-%m-%d %H:%M')}:** Engagement started\n\n")
# Create wordlist directory with common lists
wordlist_dir = os.path.join(base_dir, "wordlists")
common_wordlists = os.path.join(wordlist_dir, "common_lists.txt")
with open(common_wordlists, 'w') as f:
f.write("# Common Wordlist Locations\n")
f.write("# =========================\n")
f.write("# Directory enumeration:\n")
f.write("/usr/share/wordlists/dirb/common.txt\n")
f.write("/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt\n")
f.write("/usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt\n\n")
f.write("# File enumeration:\n")
f.write("/usr/share/seclists/Discovery/Web-Content/raft-large-files.txt\n")
f.write("/usr/share/seclists/Discovery/Web-Content/common.txt\n\n")
f.write("# Subdomain enumeration:\n")
f.write("/usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt\n")
f.write("/usr/share/seclists/Discovery/DNS/fierce-hostlist.txt\n\n")
f.write("# Password attacks:\n")
f.write("/usr/share/wordlists/rockyou.txt\n")
f.write("/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt\n")
# Create scripts directory with useful scripts
scripts_dir = os.path.join(base_dir, "tools", "scripts")
Path(scripts_dir).mkdir(parents=True, exist_ok=True)
quick_enum_script = os.path.join(scripts_dir, "quick_enum.sh")
with open(quick_enum_script, 'w') as f:
f.write("#!/bin/bash\n")
f.write("# Quick enumeration script\n")
f.write("# Usage: ./quick_enum.sh <target_ip>\n\n")
f.write("if [ $# -eq 0 ]; then\n")
f.write(' echo "Usage: $0 <target_ip>"\n')
f.write(" exit 1\n")
f.write("fi\n\n")
f.write("TARGET=$1\n")
f.write("DATE=$(date +%Y%m%d_%H%M%S)\n")
f.write("SCAN_DIR=\"../../scans\"\n\n")
f.write("echo \"[+] Quick enumeration of $TARGET\"\n")
f.write("echo \"[+] Results will be saved to $SCAN_DIR\"\n\n")
f.write("# Quick nmap scan\n")
f.write("echo \"[+] Running quick nmap scan...\"\n")
f.write("nmap -sS -T4 --top-ports 1000 -oN \"$SCAN_DIR/nmap/quick_scan_${TARGET}_${DATE}.txt\" $TARGET\n\n")
f.write("# Check for web services\n")
f.write("echo \"[+] Checking for web services...\"\n")
f.write("if nmap -p 80,443,8080,8443 --open $TARGET | grep -q open; then\n")
f.write(" echo \"[+] Web services found, running quick web enum...\"\n")
f.write(" gobuster dir -u http://$TARGET -w /usr/share/wordlists/dirb/common.txt -o \"$SCAN_DIR/web/gobuster_${TARGET}_${DATE}.txt\" -q\n")
f.write("fi\n\n")
f.write("echo \"[+] Quick enumeration complete\"\n")
os.chmod(quick_enum_script, 0o755)
print(f"[+] Penetration testing structure created successfully")
print(f"[*] Add targets to: {target_template}")
print(f"[*] Engagement log: {engagement_log}")
print(f"[*] Quick enum script: {quick_enum_script}")
return base_dir
if __name__ == "__main__":
import sys
import getpass
if len(sys.argv) > 1:
workspace_name = sys.argv[1]
else:
workspace_name = f"/root/operator"
operator = getpass.getuser()
create_workspace_structure(workspace_name, operator)