← Mirage demo home · fictional company site

Mirage dashboard

Honeypot persona: Northridge Logistics Group · database: evidence_nebius_final.db · read-only
13sessions
268requests logged
52%answered from cache
59generated live
3.8savg generation time
89528/26764model tokens (in/out)

How requests were answered

cache 140generated 59offsurface 66static 3

Sessions

SessionVisitor (user agent)SourceRequestsPagesGeneratedAnalyst label
1155961eMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)127.0.x.x40400recon
0293f274python-requests/2.31.0 r3127.0.x.x716credential_attack
a20e1677Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:Port Check) r3127.0.x.x30210vuln_scanning
d608577aMozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/127.0.x.x12110vuln_scanning
a147adfeMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)127.0.x.x40400recon
b7bb0367python-requests/2.31.0 r2127.0.x.x716credential_attack
e74a84f5Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:Port Check) r2127.0.x.x30210vuln_scanning
420d2a5cMozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/127.0.x.x12110vuln_scanning
75e0e4a8Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)127.0.x.x404030recon
fd7bd52bpython-requests/2.31.0 r1127.0.x.x716credential_attack
6a7aeb01Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:Port Check) r1127.0.x.x302110vuln_scanning
50d338a4Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/127.0.x.x12111vuln_scanning
c1d34803Python-urllib/3.14127.0.x.x110not analysed

Analyst findings (run 1)

SessionIntentATT&CKConfidenceSummaryCVE mentions (Tavily)
1155961erecon
low
T159270%Visitor systematically enumerated application endpoints including admin panels, shipment records, customer accounts, driver profiles, and vehicle VINs in a 4.5-second automated crawl.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
0293f274credential_attack
medium
T1110.00190%Visitor performed a credential stuffing attack against the login endpoint using a small list of common username/password pairs.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
a20e1677vuln_scanning
medium
T1595.00290%Automated scanner (Nikto) probed for admin panels, sensitive files (.env, git config, backups), and injected SQLi, path traversal, and XSS payloads against login and admin endpoints.CVE-2018-12613, CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-0813, CVE-2022-28330
d608577avuln_scanning
medium
T1595.00290%Visitor used Nmap Scripting Engine to probe for admin panels, sensitive files (.env, .git/config, backup.zip), and phpMyAdmin, receiving 200 responses for root and .env.CVE-2018-12613, CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-0813, CVE-2022-28330
a147adferecon
low
T159270%Visitor systematically enumerated application endpoints including admin panels and specific resource IDs across shipments, customers, drivers, and vehicles in 4.4 seconds.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
b7bb0367credential_attack
medium
T1110.00190%Visitor performed a credential stuffing attack against the login endpoint, trying six common username/password pairs in rapid succession.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
e74a84f5vuln_scanning
medium
T1595.00290%Automated scanner probed for admin panels, sensitive files (.env, config, backups), and injected SQLi, path traversal, and XSS payloads against login and admin endpoints.CVE-2018-12613, CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-0813, CVE-2022-28330
420d2a5cvuln_scanning
medium
T1595.00290%Automated scanner (Nmap NSE) probed for admin panels, sensitive files (.env, .git/config, backup.zip), and phpMyAdmin, retrieving a valid .env file.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
75e0e4a8recon
low
T159275%Visitor systematically enumerated application endpoints including admin panels and specific resource IDs across shipments, customers, drivers, and vehicles, indicating reconnaissance of a logistics management system.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
fd7bd52bcredential_attack
medium
T1110.00190%Visitor used a Python script to perform a credential stuffing attack against the login endpoint, trying six common username/password pairs in rapid succession.CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-28330, CVE-2022-28614, CVE-2022-36760
6a7aeb01vuln_scanning
medium
T1595.00290%Automated scanner probed for admin panels, sensitive files (.env, backups, git config), and API endpoints, then injected SQLi, path traversal, and XSS payloads against discovered endpoints.CVE-2018-12613, CVE-2021-41773, CVE-2021-42013, CVE-2021-44790, CVE-2022-0813, CVE-2022-28330
50d338a4vuln_scanning
medium
T1595.00290%Visitor used Nmap Scripting Engine to probe for admin panels, sensitive files (.env, .git/config, backup.zip), and phpMyAdmin, indicating automated vulnerability scanning.CVE-2013-0156, CVE-2013-6786, CVE-2014-2126, CVE-2014-2127, CVE-2014-2128, CVE-2018-12613

Detection rules (replay-verified)

Credential stuffing with common weak passwords verified caught 18 attack requests, 0 false positives out of 319 replayed requests
nginx
# Credential stuffing with common weak passwords
# Matches POST requests to the login endpoint submitting well-known default or weak credential pairs (admin/admin, admin/password, admin/123456, root/toor, administrator/Welcome1, test/test) which are c
# not expressible in stock nginx (needs request-body inspection); use the ModSecurity rule
modsecurity
# Credential stuffing with common weak passwords
# requires: SecRequestBodyAccess On
SecRule REQUEST_METHOD "@streq POST" "id:1529789,phase:2,deny,status:403,log,msg:'Credential stuffing with common weak passwords',chain"
    SecRule REQUEST_FILENAME "@rx (?i)^/login$" "t:none,chain"
    SecRule REQUEST_BODY "@rx (?i)username=(admin|root|administrator|test)&password=(admin|password|123456|toor|Welcome1|test)" "t:none,t:urlDecodeUni"
sigma
# Credential stuffing with common weak passwords
# Matches POST requests to the login endpoint submitting well-known default or weak credential pairs (admin/admin, admin/password, admin/123456, root/toor, administrator/Welcome1, test/test) which are c
# not expressible as a Sigma web-log rule (web servers do not log request bodies); use the ModSecurity rule
Sensitive file probe verified caught 30 attack requests, 0 false positives out of 319 replayed requests
nginx
# Sensitive file probe
# Attackers request well-known sensitive files at root level (.env, .git/config, backup.zip, db.sql) that legitimate users never access legitimate zip files are under /downloads/.
set $mr_1094923 "";
if ($request_method = GET) { set $mr_1094923 "${mr_1094923}M"; }
if ($uri ~* "^/\\.(env|git/config)$|^/backup\\.zip$|^/db\\.sql$") { set $mr_1094923 "${mr_1094923}P"; }
if ($mr_1094923 = "MP") { return 403; }
modsecurity
# Sensitive file probe
SecRule REQUEST_METHOD "@streq GET" "id:1094923,phase:1,deny,status:403,log,msg:'Sensitive file probe',chain"
    SecRule REQUEST_FILENAME "@rx (?i)^/\.(env|git/config)$|^/backup\.zip$|^/db\.sql$" "t:none"
sigma
title: 'Sensitive file probe'
id: 9c53bd98-ab8c-5ca4-b898-06a898b0ffd2
status: experimental
description: 'Attackers request well-known sensitive files at root level (.env, .git/config, backup.zip, db.sql) that legitimate users never access legitimate zip files are under /downloads/.'
author: Mirage honeypot analyst
logsource:
    category: webserver
detection:
  selection:
    cs-method: GET
    c-uri|re: '(?i)^/\.(env|git/config)$|^/backup\.zip$|^/db\.sql$'
  condition: selection
level: medium
tags:
    - attack.t1595.002
Admin panel enumeration verified caught 48 attack requests, 0 false positives out of 319 replayed requests
nginx
# Admin panel enumeration
# Scanners systematically probe common admin panel paths legitimate traffic uses deeper, application-specific routes like /admin/audit.
set $mr_1536110 "";
if ($request_method = GET) { set $mr_1536110 "${mr_1536110}M"; }
if ($uri ~* "^/(admin|administrator|wp-login\\.php|phpmyadmin|console|server-status|cgi-bin|info\\.php|test)/?$") { set $mr_1536110 "${mr_1536110}P"; }
if ($mr_1536110 = "MP") { return 403; }
modsecurity
# Admin panel enumeration
SecRule REQUEST_METHOD "@streq GET" "id:1536110,phase:1,deny,status:403,log,msg:'Admin panel enumeration',chain"
    SecRule REQUEST_FILENAME "@rx (?i)^/(admin|administrator|wp-login\.php|phpmyadmin|console|server-status|cgi-bin|info\.php|test)/?$" "t:none"
sigma
title: 'Admin panel enumeration'
id: 9981ffd9-0665-5508-a0c4-46163b9509ae
status: experimental
description: 'Scanners systematically probe common admin panel paths legitimate traffic uses deeper, application-specific routes like /admin/audit.'
author: Mirage honeypot analyst
logsource:
    category: webserver
detection:
  selection:
    cs-method: GET
    c-uri|re: '(?i)^/(admin|administrator|wp-login\.php|phpmyadmin|console|server-status|cgi-bin|info\.php|test)/?$'
  condition: selection
level: medium
tags:
    - attack.t1595.002
Injection payloads on auth endpoints verified caught 18 attack requests, 0 false positives out of 319 replayed requests
nginx
# Injection payloads on auth endpoints
# Attackers append SQLi, path traversal, and XSS payloads to login/admin endpoints benign requests only carry harmless paging or tracking parameters.
# note: nginx sees $args URL-encoded, so encoded variants may need extra patterns
set $mr_1283502 "";
if ($request_method = GET) { set $mr_1283502 "${mr_1283502}M"; }
if ($uri ~* "^/(admin|login)/?$") { set $mr_1283502 "${mr_1283502}P"; }
if ($args ~* "(\\b|[?&])(id|file|q)=([^&]*(\\'|\\.\\./|<script|alert\\())") { set $mr_1283502 "${mr_1283502}Q"; }
if ($mr_1283502 = "MPQ") { return 403; }
modsecurity
# Injection payloads on auth endpoints
SecRule REQUEST_METHOD "@streq GET" "id:1283502,phase:1,deny,status:403,log,msg:'Injection payloads on auth endpoints',chain"
    SecRule REQUEST_FILENAME "@rx (?i)^/(admin|login)/?$" "t:none,chain"
    SecRule QUERY_STRING "@rx (?i)(\b|[?&])(id|file|q)=([^&]*(\'|\.\./|<script|alert\())" "t:none,t:urlDecodeUni"
sigma
title: 'Injection payloads on auth endpoints'
id: 6c207e90-f73c-5da3-b81e-142411ce8f40
status: experimental
description: 'Attackers append SQLi, path traversal, and XSS payloads to login/admin endpoints benign requests only carry harmless paging or tracking parameters.'
author: Mirage honeypot analyst
logsource:
    category: webserver
detection:
  selection:
    cs-method: GET
    c-uri|re: '(?i)^/(admin|login)/?$'
    cs-uri-query|re: '(?i)(\b|[?&])(id|file|q)=([^&]*(\''|\.\./|<script|alert\())'
  condition: selection
level: medium
tags:
    - attack.t1190

1 proposed rule(s) were rejected by the replay check.

Static baseline vs Mirage

                                             static    mirage   ratio
---------------------------------------------------------------------
Attacker sessions                                12        12        
Requests the attackers made                     267       267    1.0x
Distinct pages that returned content             54       144    2.7x
Attack payloads sent / answered (not 404)    30 / 0   30 / 24        
Responses that were dead-end 404s               79%       25%        
Responses improvised by the model                0%       22%        
Login POSTs answered (not 404)                   0%      100%        
Model failures (fell back to 404)                 0         0        

Mirage generation: 59 model calls, median 3804 ms, p90 4605 ms, 26764 completion tokens

Distinct pages that returned content, per attacker profile (static -> mirage):
  recon       9 -> 9     payloads answered 0/0 -> 0/0
  scanner    12 -> 12    payloads answered 0/30 -> 24/30
  brute       3 -> 3     payloads answered 0/0 -> 0/0
  crawler    30 -> 120   payloads answered 0/0 -> 0/0

Per run (pages that returned content, static -> mirage):
  run 1: 18 -> 48
  run 2: 18 -> 48
  run 3: 18 -> 48

Note: each attacker profile stops after 40 requests per run. Sessions that hit that cap: static 3, mirage 3. For those sessions the counts above are lower bounds.