Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Viper C2 Module Builder</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<script> | |
tailwind.config = { | |
theme: { | |
extend: { | |
colors: { | |
viper: { | |
primary: '#dc2626', | |
secondary: '#1e293b', | |
accent: '#7c3aed', | |
dark: '#0f172a', | |
light: '#f8fafc' | |
} | |
}, | |
animation: { | |
'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite', | |
'spin-slow': 'spin 2s linear infinite' | |
} | |
} | |
} | |
} | |
</script> | |
<style> | |
@keyframes float { | |
0%, 100% { transform: translateY(0); } | |
50% { transform: translateY(-5px); } | |
} | |
.float-animation { | |
animation: float 3s ease-in-out infinite; | |
} | |
.sidebar { | |
transition: all 0.3s ease; | |
box-shadow: 4px 0 6px -1px rgba(0, 0, 0, 0.1); | |
} | |
.sidebar.collapsed { | |
width: 70px; | |
} | |
.sidebar.collapsed .sidebar-text, | |
.sidebar.collapsed .logo-text, | |
.sidebar.collapsed .quick-actions-title { | |
display: none; | |
} | |
.sidebar.collapsed .nav-item { | |
justify-content: center; | |
} | |
.main-content { | |
transition: all 0.3s ease; | |
} | |
.main-content.expanded { | |
margin-left: 70px; | |
} | |
.json-viewer { | |
font-family: 'Fira Code', monospace; | |
white-space: pre; | |
background-color: #0f172a; | |
color: #e2e8f0; | |
padding: 1rem; | |
border-radius: 0.5rem; | |
max-height: 300px; | |
overflow-y: auto; | |
border: 1px solid #1e293b; | |
font-size: 0.875rem; | |
line-height: 1.5; | |
} | |
.status-valid { | |
background-color: #10b981; | |
} | |
.status-invalid { | |
background-color: #ef4444; | |
} | |
.status-deployed { | |
background-color: #3b82f6; | |
} | |
.status-pending { | |
background-color: #f59e0b; | |
} | |
.module-card:hover { | |
transform: translateY(-2px); | |
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); | |
} | |
.notification-badge { | |
position: absolute; | |
top: -0.25rem; | |
right: -0.25rem; | |
width: 1.25rem; | |
height: 1.25rem; | |
border-radius: 50%; | |
background-color: #dc2626; | |
color: white; | |
font-size: 0.75rem; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
.dropdown-menu { | |
opacity: 0; | |
visibility: hidden; | |
transform: translateY(-10px); | |
transition: all 0.3s ease; | |
} | |
.dropdown-menu.active { | |
opacity: 1; | |
visibility: visible; | |
transform: translateY(0); | |
} | |
.nav-item.active { | |
background-color: #1e293b; | |
border-left: 3px solid #dc2626; | |
} | |
.search-input:focus + .search-icon { | |
color: #dc2626; | |
} | |
.terminal { | |
background-color: #0f172a; | |
color: #e2e8f0; | |
font-family: 'Fira Code', monospace; | |
border-radius: 0.5rem; | |
padding: 1rem; | |
height: 300px; | |
overflow-y: auto; | |
} | |
.terminal-line { | |
margin-bottom: 0.5rem; | |
line-height: 1.5; | |
} | |
.terminal-prompt { | |
color: #10b981; | |
} | |
.terminal-command { | |
color: #60a5fa; | |
} | |
.terminal-output { | |
color: #e2e8f0; | |
} | |
.terminal-error { | |
color: #ef4444; | |
} | |
.glow-effect { | |
box-shadow: 0 0 10px rgba(220, 38, 38, 0.5); | |
} | |
@media (max-width: 768px) { | |
.sidebar { | |
position: absolute; | |
z-index: 50; | |
height: 100%; | |
} | |
.sidebar.collapsed { | |
transform: translateX(-100%); | |
} | |
.main-content.expanded { | |
margin-left: 0; | |
} | |
} | |
</style> | |
</head> | |
<body class="bg-viper-light"> | |
<div class="flex h-screen overflow-hidden"> | |
<!-- Sidebar --> | |
<div id="sidebar" class="sidebar bg-viper-dark text-white w-64 flex flex-col z-10"> | |
<div class="p-4 flex items-center space-x-2 border-b border-gray-700"> | |
<div class="relative"> | |
<i class="fas fa-bug text-viper-primary text-2xl float-animation"></i> | |
<div class="absolute -bottom-1 -right-1 w-3 h-3 bg-green-500 rounded-full border-2 border-viper-dark"></div> | |
</div> | |
<span class="logo-text text-xl font-bold bg-gradient-to-r from-viper-primary to-viper-accent bg-clip-text text-transparent">Viper C2</span> | |
</div> | |
<div class="flex-1 overflow-y-auto"> | |
<nav class="p-4 space-y-1"> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700 active"> | |
<i class="fas fa-tachometer-alt text-gray-300"></i> | |
<span class="sidebar-text font-medium">Dashboard</span> | |
</a> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700"> | |
<i class="fas fa-plus-circle text-gray-300"></i> | |
<span class="sidebar-text font-medium">Create Module</span> | |
</a> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700"> | |
<i class="fas fa-rocket text-gray-300"></i> | |
<span class="sidebar-text font-medium">Deployments</span> | |
<span class="ml-auto bg-viper-primary text-xs px-2 py-1 rounded-full">3</span> | |
</a> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700"> | |
<i class="fas fa-history text-gray-300"></i> | |
<span class="sidebar-text font-medium">Execution History</span> | |
</a> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700"> | |
<i class="fas fa-server text-gray-300"></i> | |
<span class="sidebar-text font-medium">Listeners</span> | |
</a> | |
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700"> | |
<i class="fas fa-cog text-gray-300"></i> | |
<span class="sidebar-text font-medium">Settings</span> | |
</a> | |
</nav> | |
<div class="p-4 border-t border-gray-700"> | |
<h3 class="quick-actions-title text-xs uppercase font-semibold text-gray-400 mb-2">Quick Actions</h3> | |
<div class="space-y-2"> | |
<button onclick="showCreateModuleModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1"> | |
<i class="fas fa-plus text-green-400"></i> | |
<span class="sidebar-text">New Module</span> | |
</button> | |
<button onclick="showTestModuleModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1"> | |
<i class="fas fa-play text-blue-400"></i> | |
<span class="sidebar-text">Test Module</span> | |
</button> | |
<button onclick="showDeployModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1"> | |
<i class="fas fa-paper-plane text-purple-400"></i> | |
<span class="sidebar-text">Quick Deploy</span> | |
</button> | |
</div> | |
</div> | |
</div> | |
<div class="p-4 border-t border-gray-700 flex items-center justify-between"> | |
<div class="flex items-center space-x-3"> | |
<div class="relative"> | |
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-viper-primary to-viper-accent flex items-center justify-center"> | |
<span class="text-white font-bold text-xs">AD</span> | |
</div> | |
<div class="absolute bottom-0 right-0 w-3 h-3 bg-green-500 rounded-full border-2 border-viper-dark"></div> | |
</div> | |
<div class="sidebar-text"> | |
<div class="font-medium">Admin User</div> | |
<div class="text-xs text-gray-400">admin@viper.local</div> | |
</div> | |
</div> | |
<button onclick="toggleSidebar()" class="text-gray-400 hover:text-white transition-transform hover:rotate-180 duration-300"> | |
<i class="fas fa-chevron-left"></i> | |
</button> | |
</div> | |
</div> | |
<!-- Main Content --> | |
<div id="main-content" class="main-content flex-1 overflow-auto bg-gray-50"> | |
<!-- Top Navigation --> | |
<header class="bg-white shadow-sm sticky top-0 z-10"> | |
<div class="px-4 py-3 flex items-center justify-between"> | |
<div class="flex items-center space-x-4"> | |
<button onclick="toggleSidebar()" class="text-gray-600 hover:text-gray-900 md:hidden"> | |
<i class="fas fa-bars"></i> | |
</button> | |
<h1 class="text-xl font-semibold text-gray-800 flex items-center"> | |
<span>Module Builder</span> | |
<span class="ml-2 text-xs bg-viper-primary text-white px-2 py-1 rounded-full">BETA</span> | |
</h1> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="relative hidden md:block"> | |
<input type="text" placeholder="Search modules..." class="search-input pl-10 pr-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-viper-primary w-64 transition-all duration-300"> | |
<i class="fas fa-search search-icon absolute left-3 top-3 text-gray-400 transition-colors duration-300"></i> | |
</div> | |
<div class="relative"> | |
<button id="notification-btn" class="p-2 text-gray-600 hover:text-gray-900 relative"> | |
<i class="fas fa-bell"></i> | |
<div class="notification-badge">3</div> | |
</button> | |
<div id="notification-dropdown" class="dropdown-menu absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg py-1 z-20 border border-gray-200"> | |
<div class="px-4 py-2 border-b border-gray-200"> | |
<h3 class="text-sm font-medium text-gray-800">Notifications</h3> | |
</div> | |
<div class="max-h-60 overflow-y-auto"> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 border-b border-gray-100"> | |
<div class="flex items-center"> | |
<div class="flex-shrink-0"> | |
<i class="fas fa-check-circle text-green-500 mr-2"></i> | |
</div> | |
<div> | |
<p class="font-medium">Module validated</p> | |
<p class="text-xs text-gray-500">New module "persistence" is ready</p> | |
</div> | |
</div> | |
</a> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 border-b border-gray-100"> | |
<div class="flex items-center"> | |
<div class="flex-shrink-0"> | |
<i class="fas fa-exclamation-triangle text-yellow-500 mr-2"></i> | |
</div> | |
<div> | |
<p class="font-medium">Deployment warning</p> | |
<p class="text-xs text-gray-500">Listener "aws-east" has low uptime</p> | |
</div> | |
</div> | |
</a> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100"> | |
<div class="flex items-center"> | |
<div class="flex-shrink-0"> | |
<i class="fas fa-server text-blue-500 mr-2"></i> | |
</div> | |
<div> | |
<p class="font-medium">New agent connected</p> | |
<p class="text-xs text-gray-500">Agent "win10-prod" is now active</p> | |
</div> | |
</div> | |
</a> | |
</div> | |
<div class="px-4 py-2 border-t border-gray-200 text-center"> | |
<a href="#" class="text-xs font-medium text-viper-primary hover:text-viper-accent">View all notifications</a> | |
</div> | |
</div> | |
</div> | |
<div class="relative"> | |
<button id="user-menu-btn" class="flex items-center space-x-2 focus:outline-none"> | |
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-viper-primary to-viper-accent flex items-center justify-center"> | |
<span class="text-white font-bold text-xs">AD</span> | |
</div> | |
<span class="hidden md:inline text-sm font-medium text-gray-700">Admin</span> | |
<i class="fas fa-chevron-down hidden md:inline text-xs text-gray-500"></i> | |
</button> | |
<div id="user-menu-dropdown" class="dropdown-menu absolute right-0 mt-2 w-48 bg-white rounded-md shadow-lg py-1 z-20 border border-gray-200"> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Your Profile</a> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Settings</a> | |
<div class="border-t border-gray-200"></div> | |
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Sign out</a> | |
</div> | |
</div> | |
</div> | |
</div> | |
</header> | |
<!-- Content --> | |
<main class="p-6"> | |
<!-- Dashboard Overview --> | |
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6"> | |
<div class="bg-white rounded-lg shadow p-6 flex items-center"> | |
<div class="p-3 rounded-full bg-green-100 text-green-600 mr-4"> | |
<i class="fas fa-check-circle text-xl"></i> | |
</div> | |
<div> | |
<p class="text-sm text-gray-500">Valid Modules</p> | |
<p class="text-2xl font-bold">24</p> | |
</div> | |
</div> | |
<div class="bg-white rounded-lg shadow p-6 flex items-center"> | |
<div class="p-3 rounded-full bg-blue-100 text-blue-600 mr-4"> | |
<i class="fas fa-rocket text-xl"></i> | |
</div> | |
<div> | |
<p class="text-sm text-gray-500">Active Deployments</p> | |
<p class="text-2xl font-bold">8</p> | |
</div> | |
</div> | |
<div class="bg-white rounded-lg shadow p-6 flex items-center"> | |
<div class="p-3 rounded-full bg-yellow-100 text-yellow-600 mr-4"> | |
<i class="fas fa-exclamation-triangle text-xl"></i> | |
</div> | |
<div> | |
<p class="text-sm text-gray-500">Pending Tests</p> | |
<p class="text-2xl font-bold">3</p> | |
</div> | |
</div> | |
<div class="bg-white rounded-lg shadow p-6 flex items-center"> | |
<div class="p-3 rounded-full bg-purple-100 text-purple-600 mr-4"> | |
<i class="fas fa-server text-xl"></i> | |
</div> | |
<div> | |
<p class="text-sm text-gray-500">Active Listeners</p> | |
<p class="text-2xl font-bold">5</p> | |
</div> | |
</div> | |
</div> | |
<!-- Recent Modules --> | |
<div class="bg-white rounded-lg shadow overflow-hidden mb-6"> | |
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between"> | |
<h2 class="text-lg font-semibold text-gray-800">Recent Modules</h2> | |
<button onclick="showCreateModuleModal()" class="text-sm bg-viper-primary text-white px-4 py-2 rounded-md hover:bg-red-700 transition-colors flex items-center"> | |
<i class="fas fa-plus mr-2"></i> New Module | |
</button> | |
</div> | |
<div class="divide-y divide-gray-200"> | |
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card"> | |
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center"> | |
<div class="p-2 rounded-full bg-blue-100 text-blue-600 mr-4"> | |
<i class="fas fa-network-wired"></i> | |
</div> | |
<div> | |
<p class="font-medium">Network Scanner</p> | |
<p class="text-sm text-gray-500">v1.2.0</p> | |
</div> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Type</p> | |
<p class="font-medium">Recon</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Status</p> | |
<span class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">Validated</span> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Last Modified</p> | |
<p class="font-medium">2 hours ago</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2"> | |
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100"> | |
<i class="fas fa-play"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-edit"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-trash"></i> | |
</button> | |
</div> | |
</div> | |
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card"> | |
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center"> | |
<div class="p-2 rounded-full bg-purple-100 text-purple-600 mr-4"> | |
<i class="fas fa-user-secret"></i> | |
</div> | |
<div> | |
<p class="font-medium">Credential Dumper</p> | |
<p class="text-sm text-gray-500">v2.1.3</p> | |
</div> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Type</p> | |
<p class="font-medium">Post-Exploit</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Status</p> | |
<span class="px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800">Deployed</span> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Last Modified</p> | |
<p class="font-medium">1 day ago</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2"> | |
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100"> | |
<i class="fas fa-play"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-edit"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-trash"></i> | |
</button> | |
</div> | |
</div> | |
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card"> | |
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center"> | |
<div class="p-2 rounded-full bg-red-100 text-red-600 mr-4"> | |
<i class="fas fa-lock"></i> | |
</div> | |
<div> | |
<p class="font-medium">Persistence</p> | |
<p class="text-sm text-gray-500">v1.0.0</p> | |
</div> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Type</p> | |
<p class="font-medium">Privilege</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Status</p> | |
<span class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">Testing</span> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2"> | |
<p class="text-sm text-gray-500">Last Modified</p> | |
<p class="font-medium">3 days ago</p> | |
</div> | |
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2"> | |
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100"> | |
<i class="fas fa-play"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-edit"></i> | |
</button> | |
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100"> | |
<i class="fas fa-trash"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
<div class="px-6 py-3 border-t border-gray-200 text-center"> | |
<a href="#" class="text-sm font-medium text-viper-primary hover:text-viper-accent">View all modules</a> | |
</div> | |
</div> | |
<!-- Recent Activity and Terminal --> | |
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6"> | |
<!-- Recent Activity --> | |
<div class="bg-white rounded-lg shadow overflow-hidden"> | |
<div class="px-6 py-4 border-b border-gray-200"> | |
<h2 class="text-lg font-semibold text-gray-800">Recent Activity</h2> | |
</div> | |
<div class="divide-y divide-gray-200"> | |
<div class="p-4 flex items-start"> | |
<div class="flex-shrink-0"> | |
<div class="p-2 rounded-full bg-green-100 text-green-600"> | |
<i class="fas fa-check"></i> | |
</div> | |
</div> | |
<div class="ml-3"> | |
<p class="text-sm font-medium text-gray-900">Module validation complete</p> | |
<p class="text-sm text-gray-500">"Network Scanner" passed all tests</p> | |
<p class="text-xs text-gray-400 mt-1">10 minutes ago</p> | |
</div> | |
</div> | |
<div class="p-4 flex items-start"> | |
<div class="flex-shrink-0"> | |
<div class="p-2 rounded-full bg-blue-100 text-blue-600"> | |
<i class="fas fa-rocket"></i> | |
</div> | |
</div> | |
<div class="ml-3"> | |
<p class="text-sm font-medium text-gray-900">New deployment</p> | |
<p class="text-sm text-gray-500">"Credential Dumper" deployed to 3 agents</p> | |
<p class="text-xs text-gray-400 mt-1">2 hours ago</p> | |
</div> | |
</div> | |
<div class="p-4 flex items-start"> | |
<div class="flex-shrink-0"> | |
<div class="p-2 rounded-full bg-yellow-100 text-yellow-600"> | |
<i class="fas fa-exclamation-triangle"></i> | |
</div> | |
</div> | |
<div class="ml-3"> | |
<p class="text-sm font-medium text-gray-900">Test warning</p> | |
<p class="text-sm text-gray-500">"Persistence" module has compatibility issues</p> | |
<p class="text-xs text-gray-400 mt-1">1 day ago</p> | |
</div> | |
</div> | |
<div class="p-4 flex items-start"> | |
<div class="flex-shrink-0"> | |
<div class="p-2 rounded-full bg-purple-100 text-purple-600"> | |
<i class="fas fa-server"></i> | |
</div> | |
</div> | |
<div class="ml-3"> | |
<p class="text-sm font-medium text-gray-900">New agent connected</p> | |
<p class="text-sm text-gray-500">Agent "win10-dev" from 192.168.1.45</p> | |
<p class="text-xs text-gray-400 mt-1">2 days ago</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Terminal Output --> | |
<div class="bg-white rounded-lg shadow overflow-hidden"> | |
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between"> | |
<h2 class="text-lg font-semibold text-gray-800">Terminal</h2> | |
<div class="flex space-x-2"> | |
<button class="p-1 text-gray-400 hover:text-green-500"> | |
<i class="fas fa-play"></i> | |
</button> | |
<button class="p-1 text-gray-400 hover:text-red-500"> | |
<i class="fas fa-stop"></i> | |
</button> | |
<button class="p-1 text-gray-400 hover:text-blue-500"> | |
<i class="fas fa-redo"></i> | |
</button> | |
</div> | |
</div> | |
<div class="terminal"> | |
<div class="terminal-line"> | |
<span class="terminal-prompt">$</span> <span class="terminal-command">viper --validate persistence</span> | |
</div> | |
<div class="terminal-line terminal-output"> | |
Starting validation for module: persistence | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Syntax check passed | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Dependencies verified | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Security checks completed | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Test environment initialized | |
</div> | |
<div class="terminal-line terminal-output"> | |
Running functional tests... | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Test 1: Registry key creation | |
</div> | |
<div class="terminal-line terminal-output"> | |
[✓] Test 2: Scheduled task setup | |
</div> | |
<div class="terminal-line terminal-output"> | |
[!] Warning: Test 3: Service creation - requires admin | |
</div> | |
<div class="terminal-line terminal-output"> | |
Validation complete: 2/3 tests passed | |
</div> | |
<div class="terminal-line"> | |
<span class="terminal-prompt">$</span> <span class="terminal-command">_</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</main> | |
</div> | |
</div> | |
<!-- Create Module Modal --> | |
<div id="create-module-modal" class="fixed inset-0 z-50 hidden overflow-y-auto"> | |
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> | |
<div class="fixed inset-0 transition-opacity" aria-hidden="true"> | |
<div class="absolute inset-0 bg-gray-500 opacity-75"></div> | |
</div> | |
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span> | |
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full"> | |
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4"> | |
<div class="sm:flex sm:items-start"> | |
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-viper-primary sm:mx-0 sm:h-10 sm:w-10"> | |
<i class="fas fa-plus text-white"></i> | |
</div> | |
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | |
<h3 class="text-lg leading-6 font-medium text-gray-900">Create New Module</h3> | |
<div class="mt-2"> | |
<p class="text-sm text-gray-500">Fill in the details below to create a new C2 module.</p> | |
</div> | |
</div> | |
</div> | |
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6"> | |
<div class="sm:col-span-3"> | |
<label for="module-name" class="block text-sm font-medium text-gray-700">Module Name</label> | |
<input type="text" name="module-name" id="module-name" class="mt-1 focus:ring-viper-primary focus:border-viper-primary block w-full shadow-sm sm:text-sm border-gray-300 rounded-md"> | |
</div> | |
<div class="sm:col-span-3"> | |
<label for="module-type" class="block text-sm font-medium text-gray-700">Module Type</label> | |
<select id="module-type" name="module-type" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-viper-primary focus:border-viper-primary sm:text-sm"> | |
<option>Reconnaissance</option> | |
<option>Privilege Escalation</option> | |
<option>Lateral Movement</option> | |
<option>Post-Exploitation</option> | |
<option>Persistence</option> | |
<option>Evasion</option> | |
</select> | |
</div> | |
<div class="sm:col-span-6"> | |
<label for="module-description" class="block text-sm font-medium text-gray-700">Description</label> | |
<textarea id="module-description" name="module-description" rows="3" class="mt-1 shadow-sm focus:ring-viper-primary focus:border-viper-primary block w-full sm:text-sm border border-gray-300 rounded-md"></textarea> | |
</div> | |
<div class="sm:col-span-6"> | |
<label for="module-code" class="block text-sm font-medium text-gray-700">Module Code</label> | |
<div class="mt-1"> | |
<textarea id="module-code" name="module-code" rows="10" class="shadow-sm focus:ring-viper-primary focus:border-viper-primary block w-full sm:text-sm border border-gray-300 rounded-md font-mono text-sm"></textarea> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse"> | |
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-viper-primary text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-viper-primary sm:ml-3 sm:w-auto sm:text-sm"> | |
Create Module | |
</button> | |
<button type="button" onclick="hideCreateModuleModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-viper-primary sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"> | |
Cancel | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Test Module Modal --> | |
<div id="test-module-modal" class="fixed inset-0 z-50 hidden overflow-y-auto"> | |
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> | |
<div class="fixed inset-0 transition-opacity" aria-hidden="true"> | |
<div class="absolute inset-0 bg-gray-500 opacity-75"></div> | |
</div> | |
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span> | |
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full"> | |
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4"> | |
<div class="sm:flex sm:items-start"> | |
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-500 sm:mx-0 sm:h-10 sm:w-10"> | |
<i class="fas fa-play text-white"></i> | |
</div> | |
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | |
<h3 class="text-lg leading-6 font-medium text-gray-900">Test Module</h3> | |
<div class="mt-2"> | |
<p class="text-sm text-gray-500">Select a module to test in the sandbox environment.</p> | |
</div> | |
</div> | |
</div> | |
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6"> | |
<div class="sm:col-span-6"> | |
<label for="test-module-select" class="block text-sm font-medium text-gray-700">Module to Test</label> | |
<select id="test-module-select" name="test-module-select" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"> | |
<option>Network Scanner</option> | |
<option>Credential Dumper</option> | |
<option>Persistence</option> | |
<option>Keylogger</option> | |
<option>Process Injector</option> | |
</select> | |
</div> | |
<div class="sm:col-span-6"> | |
<label for="test-environment" class="block text-sm font-medium text-gray-700">Test Environment</label> | |
<select id="test-environment" name="test-environment" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"> | |
<option>Windows 10 (x64)</option> | |
<option>Windows Server 2019</option> | |
<option>Ubuntu 20.04</option> | |
<option>Custom Sandbox</option> | |
</select> | |
</div> | |
<div class="sm:col-span-6"> | |
<label class="block text-sm font-medium text-gray-700">Test Options</label> | |
<div class="mt-2 space-y-2"> | |
<div class="flex items-center"> | |
<input id="full-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300" checked> | |
<label for="full-test" class="ml-3 block text-sm font-medium text-gray-700">Full Test (All checks)</label> | |
</div> | |
<div class="flex items-center"> | |
<input id="quick-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300"> | |
<label for="quick-test" class="ml-3 block text-sm font-medium text-gray-700">Quick Test (Basic validation only)</label> | |
</div> | |
<div class="flex items-center"> | |
<input id="custom-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300"> | |
<label for="custom-test" class="ml-3 block text-sm font-medium text-gray-700">Custom Test</label> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse"> | |
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-500 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"> | |
Run Test | |
</button> | |
<button type="button" onclick="hideTestModuleModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"> | |
Cancel | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Deploy Module Modal --> | |
<div id="deploy-modal" class="fixed inset-0 z-50 hidden overflow-y-auto"> | |
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> | |
<div class="fixed inset-0 transition-opacity" aria-hidden="true"> | |
<div class="absolute inset-0 bg-gray-500 opacity-75"></div> | |
</div> | |
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span> | |
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full"> | |
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4"> | |
<div class="sm:flex sm:items-start"> | |
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-purple-500 sm:mx-0 sm:h-10 sm:w-10"> | |
<i class="fas fa-paper-plane text-white"></i> | |
</div> | |
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | |
<h3 class="text-lg leading-6 font-medium text-gray-900">Deploy Module</h3> | |
<div class="mt-2"> | |
<p class="text-sm text-gray-500">Select a module and target agents for deployment.</p> | |
</div> | |
</div> | |
</div> | |
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6"> | |
<div class="sm:col-span-6"> | |
<label for="deploy-module-select" class="block text-sm font-medium text-gray-700">Module to Deploy</label> | |
<select id="deploy-module-select" name="deploy-module-select" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-purple-500 focus:border-purple-500 sm:text-sm"> | |
<option>Network Scanner</option> | |
<option>Credential Dumper</option> | |
<option>Persistence</option> | |
<option>Keylogger</option> | |
<option>Process Injector</option> | |
</select> | |
</div> | |
<div class="sm:col-span-6"> | |
<label class="block text-sm font-medium text-gray-700">Target Agents</label> | |
<div class="mt-2 space-y-2 max-h-40 overflow-y-auto border border-gray-200 rounded-md p-2"> | |
<div class="flex items-center"> | |
<input id="agent1" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded"> | |
<label for="agent1" class="ml-3 block text-sm font-medium text-gray-700">win10-prod (192.168.1.10)</label> | |
</div> | |
<div class="flex items-center"> | |
<input id="agent2" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded"> | |
<label for="agent2" class="ml-3 block text-sm font-medium text-gray-700">win10-dev (192.168.1.45)</label> | |
</div> | |
<div class="flex items-center"> | |
<input id="agent3" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded"> | |
<label for="agent3" class="ml-3 block text-sm font-medium text-gray-700">ws2019-dc (192.168.1.100)</label> | |
</div> | |
<div class="flex items-center"> | |
<input id="agent4" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded"> | |
<label for="agent4" class="ml-3 block text-sm font-medium text-gray-700">ubuntu-web (192.168.1.150)</label> | |
</div> | |
</div> | |
</div> | |
<div class="sm:col-span-6"> | |
<label for="deploy-options" class="block text-sm font-medium text-gray-700">Deployment Options</label> | |
<select id="deploy-options" name="deploy-options" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-purple-500 focus:border-purple-500 sm:text-sm"> | |
<option>Standard Deployment</option> | |
<option>Stealth Mode</option> | |
<option>High Priority</option> | |
<option>Delayed Execution</option> | |
</select> | |
</div> | |
<div class="sm:col-span-6"> | |
<label for="deploy-params" class="block text-sm font-medium text-gray-700">Parameters (JSON)</label> | |
<div class="mt-1"> | |
<textarea id="deploy-params" name="deploy-params" rows="4" class="shadow-sm focus:ring-purple-500 focus:border-purple-500 block w-full sm:text-sm border border-gray-300 rounded-md font-mono text-sm"></textarea> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse"> | |
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-purple-500 text-base font-medium text-white hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:ml-3 sm:w-auto sm:text-sm"> | |
Deploy Now | |
</button> | |
<button type="button" onclick="hideDeployModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"> | |
Cancel | |
</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script> | |
// Toggle sidebar | |
function toggleSidebar() { | |
const sidebar = document.getElementById('sidebar'); | |
const mainContent = document.getElementById('main-content'); | |
sidebar.classList.toggle('collapsed'); | |
mainContent.classList.toggle('expanded'); | |
// Change the chevron icon direction | |
const toggleBtn = sidebar.querySelector('button'); | |
const icon = toggleBtn.querySelector('i'); | |
if (sidebar.classList.contains('collapsed')) { | |
icon.classList.remove('fa-chevron-left'); | |
icon.classList.add('fa-chevron-right'); | |
} else { | |
icon.classList.remove('fa-chevron-right'); | |
icon.classList.add('fa-chevron-left'); | |
} | |
} | |
// Show modals | |
function showCreateModuleModal() { | |
document.getElementById('create-module-modal').classList.remove('hidden'); | |
} | |
function showTestModuleModal() { | |
document.getElementById('test-module-modal').classList.remove('hidden'); | |
} | |
function showDeployModal() { | |
document.getElementById('deploy-modal').classList.remove('hidden'); | |
} | |
// Hide modals | |
function hideCreateModuleModal() { | |
document.getElementById('create-module-modal').classList.add('hidden'); | |
} | |
function hideTestModuleModal() { | |
document.getElementById('test-module-modal').classList.add('hidden'); | |
} | |
function hideDeployModal() { | |
document.getElementById('deploy-modal').classList.add('hidden'); | |
} | |
// Close modals when clicking outside | |
window.addEventListener('click', function(event) { | |
if (event.target.classList.contains('fixed')) { | |
event.target.classList.add('hidden'); | |
} | |
}); | |
// Dropdown menus | |
document.addEventListener('DOMContentLoaded', function() { | |
// Notification dropdown | |
const notificationBtn = document.getElementById('notification-btn'); | |
const notificationDropdown = document.getElementById('notification-dropdown'); | |
notificationBtn.addEventListener('click', function(e) { | |
e.stopPropagation(); | |
notificationDropdown.classList.toggle('active'); | |
userMenuDropdown.classList.remove('active'); | |
}); | |
// User menu dropdown | |
const userMenuBtn = document.getElementById('user-menu-btn'); | |
const userMenuDropdown = document.getElementById('user-menu-dropdown'); | |
userMenuBtn.addEventListener('click', function(e) { | |
e.stopPropagation(); | |
userMenuDropdown.classList.toggle('active'); | |
notificationDropdown.classList.remove('active'); | |
}); | |
// Close dropdowns when clicking outside | |
document.addEventListener('click', function() { | |
notificationDropdown.classList.remove('active'); | |
userMenuDropdown.classList.remove('active'); | |
}); | |
// Prevent dropdown from closing when clicking inside | |
notificationDropdown.addEventListener('click', function(e) { | |
e.stopPropagation(); | |
}); | |
userMenuDropdown.addEventListener('click', function(e) { | |
e.stopPropagation(); | |
}); | |
}); | |
// Terminal animation | |
function animateTerminal() { | |
const terminal = document.querySelector('.terminal'); | |
if (!terminal) return; | |
const lines = terminal.querySelectorAll('.terminal-line'); | |
let delay = 0; | |
lines.forEach(line => { | |
setTimeout(() => { | |
line.style.opacity = '1'; | |
}, delay); | |
delay += 100; | |
}); | |
} | |
// Initialize terminal animation | |
setTimeout(animateTerminal, 500); | |
// Module card hover effect | |
const moduleCards = document.querySelectorAll('.module-card'); | |
moduleCards.forEach(card => { | |
card.style.transition = 'all 0.3s ease'; | |
}); | |
// Mobile menu toggle | |
function toggleMobileMenu() { | |
const sidebar = document.getElementById('sidebar'); | |
sidebar.classList.toggle('hidden'); | |
} | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=S-Dreamer/module-builder" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |