⚠️ 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-q1https://yourdomain.com/test_2024https://yourdomain.com/uuid-slugSauron 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-2024team_1123e4567-e89b-12d3-a456-426614174000ab (less than 4 chars)verylongslugname123 (over 16 chars)test@slug, slug%20test 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-nameo365_slug=slug-nameEach 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.