⚠️ Authorized Use Only: This system is designed for authorized security testing and penetration testing. Always obtain proper written authorization before conducting any phishing simulation.
In Sauron, slugs are unique identifiers that create isolated phishing operations. Each slug generates a unique URL path that tracks victims and captures credentials separately.
sales-q1
(4-16 characters)test_2024
(alphanumeric with _ -)a1b2c3d4-e5f6-7890-abcd-1234567890ab
(UUID)https://yourdomain.com/sales-q1
https://yourdomain.com/test_2024
https://yourdomain.com/uuid-slug
Sauron extracts the slug from the URL path, query parameter, or cookie
Validates slug format and checks if it exists in the database
Adds slug to request context and sets cookie for subsequent requests
All captured data (credentials, 2FA, cookies) is tagged with the slug
test
, sales-2024
team_1
123e4567-e89b-12d3-a456-426614174000
ab
(less than 4 chars)verylongslugname123
(over 16 chars)test@slug
, slug%20
test slug
Slugs are stored in the SQLite database in the user_links
table, mapped to user IDs for multi-tenant support.
# Access SQLite database directly sqlite3 config.db # View existing slugs SELECT * FROM user_links; # Add a new slug for user INSERT INTO user_links (user_id, slug) VALUES ('user123', 'new-slug'); # Remove a slug DELETE FROM user_links WHERE slug = 'old-slug';
The WebSocket dashboard provides real-time slug management through the admin interface.
Connect to: wss://yourdomain.com/ws
Authenticate with your admin key
Use the dashboard interface to generate new slugs
Automatically validates format and uniqueness
Real-time statistics for visits, logs, valid/invalid attempts
Total number of unique visitors to the slug URL
Incremented via: configdb.IncVisit(slug)
Number of actions/events logged for this slug
Incremented via: configdb.IncLog(slug)
Successful credential captures or valid interactions
Incremented via: configdb.IncValid(slug)
Failed attempts or invalid submissions
Incremented via: configdb.IncInvalid(slug)
GET /stats?slug=your-slug-here Response: { "visits": 150, "logs": 89, "valid": 23, "invalid": 12 }
// Connect to WebSocket and receive real-time updates { "type": "slug_stats", "slug": "sales-q1", "data": { "visits": 151, "logs": 90, "valid": 24, "invalid": 12 } }
Slug statistics are automatically synced to Google Firestore for persistent storage and multi-instance synchronization.
Understanding how the slug middleware works internally can help with troubleshooting and custom implementations.
/slug-name/rest/of/path
?slug=slug-name
o365_slug=slug-name
Each slug is associated with a specific user ID, enabling multi-tenant deployments where different users can have isolated operations.
Note: User ID mapping is handled automatically by the system. Manual user management requires direct database access.