diff --git a/tools/dashboard.php b/tools/dashboard.php index 235e012..0bd8b61 100644 --- a/tools/dashboard.php +++ b/tools/dashboard.php @@ -49,12 +49,16 @@ $countries = []; $hours = []; $creds = []; $ip_details = []; +$last_event_time = ''; +$attack_types = ['login' => 0, 'recon' => 0]; foreach ($entries as $e) { if (($e['type'] ?? '') === 'recon') { $total_recon++; + $attack_types['recon']++; } else { $total_attempts += ($e['attempt'] ?? 0) > 0 ? 1 : 0; + $attack_types['login']++; } $ip = $e['ip'] ?? '?'; @@ -90,6 +94,7 @@ foreach ($entries as $e) { } $ip_details[$ip]['attempts']++; $ip_details[$ip]['last'] = $e['timestamp'] ?? ''; + $last_event_time = $e['timestamp'] ?? $last_event_time; } arsort($usernames); @@ -102,6 +107,23 @@ $unique_ips = count($ips); $top_user = $usernames ? array_key_first($usernames) : '-'; $top_pass = $passwords ? array_key_first($passwords) : '-'; +// Threat level +$threat_level = 'NOMINAL'; +$threat_class = 'nominal'; +if ($total_attempts > 100) { $threat_level = 'ELEVATED'; $threat_class = 'elevated'; } +if ($total_attempts > 500) { $threat_level = 'HIGH'; $threat_class = 'high'; } +if ($total_attempts > 2000) { $threat_level = 'CRITICAL'; $threat_class = 'critical'; } + +// Time since last event +$last_ago = '-'; +if ($last_event_time) { + $diff = time() - strtotime($last_event_time); + if ($diff < 60) $last_ago = $diff . 's ago'; + elseif ($diff < 3600) $last_ago = floor($diff/60) . 'm ago'; + elseif ($diff < 86400) $last_ago = floor($diff/3600) . 'h ago'; + else $last_ago = floor($diff/86400) . 'd ago'; +} + // Active tab $tab = $_GET['tab'] ?? 'overview'; ?> @@ -111,61 +133,636 @@ $tab = $_GET['tab'] ?? 'overview'; -
— log entries
+ +| Username | Attempts |
|---|
| Username | Hits | Distribution |
|---|---|---|
| + | + | + |
| Password | Attempts |
|---|
| Password | Hits | Distribution |
|---|---|---|
| + | + | + |
| Time | IP | CC | Username | Password | # | Delay |
|---|
| Timestamp | Source IP | Origin | Username | Password | Attempt | Tarpit | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | +s | ++ | + | + | + | + | # | ++s |
| Password | Count |
|---|
| Password | Frequency | Distribution |
|---|---|---|
| + | + | + |
| Username | Count |
|---|
| Username | Frequency | Distribution |
|---|---|---|
| + | + | + |
| IP | Country | Hits | First Seen | Last Seen |
|---|
| Source IP | Origin | Hits | First Contact | Last Contact | Activity | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | + | + | + | + | + | + |
| Country | Attempts |
|---|
| Country Code | Events | Distribution |
|---|---|---|
| + | + | + |
| Hour | Events |
|---|
| Hour (UTC) | Events | Activity |
|---|---|---|
| + | + | + |
wp-honeypot dashboard ·
+ + diff --git a/trap/wp-trap.php b/trap/wp-trap.php index 69cafdc..eb62bad 100644 --- a/trap/wp-trap.php +++ b/trap/wp-trap.php @@ -9,7 +9,6 @@ * Real login is at the custom WPS Hide Login slug (or similar). * * Configuration: edit wp-trap-config.php alongside this file. - * Project: https://gitea.cloudforest-basilisk.ts.net/Arcnode.xyz/wp-honeypot */ // --- Load configuration ---