> your AI agent picks dependencies from memory; give it dated facts — try starlog.dev ↗ vet your agent's deps ↗ vibe-coding is fine. vibe-importing isn’t. — try starlog.dev ↗ vibe-importing isn’t fine ↗ your agent has never seen your private packages — try starlog.dev ↗ facts for private packages ↗ a linter for the dependencies your AI agent picks — try starlog.dev ↗ a linter for agent deps ↗ whois is redacted, cdns mask the rest — get the real operator — try whoisgeni.us ↗ who really runs that domain ↗ domain attribution that shows its work — full evidence chain — try whoisgeni.us ↗ domain intel w/ evidence ↗

← Back to Articles

Kraken: The Swiss Army Knife Problem in Brute Force Tooling

[ View on GitHub ]

Kraken: The Swiss Army Knife Problem in Brute Force Tooling

Hook

The most popular brute force tools aren't the most effective—they're just the easiest to remember the syntax for. Kraken bets your entire engagement strategy on that observation.

Context

During penetration tests, red teamers face a context-switching tax: SSH needs Hydra syntax, WordPress requires wpscan flags, FTP wants Medusa arguments, and subdomain enumeration demands completely different tooling. Each protocol-specific tool evolved independently, creating a fragmented ecosystem where remembering incantations wastes more time than the actual reconnaissance. Kraken emerged from this friction, proposing a radical simplification: wrap everything behind numbered menus so you never touch man pages again.

The promise is seductive for junior pentesters and CTF players—launch one script, pick option 7 for WordPress, feed it a wordlist, and watch credentials roll in. No remembering that Hydra's SSH module is 'ssh' but FTP is 'ftp' while HTTP is 'http-post-form' with arcane placeholder syntax. Just navigate menus like it's 1995. This design philosophy trades power-user efficiency for universal accessibility, which works brilliantly until you encounter the first rate-limited login form or IP-banning WAF.

Technical Insight

selects module

spawns

read

create

distribute

attempt login

auth result

success

print

User

kraken.py

Menu Dispatcher

Protocol Module

SSH/FTP/LDAP/etc

Wordlist Files

users/passwords

Task Queue

credential pairs

Thread Pool

10-50 workers

Target Service

SSH/FTP/LDAP/HTTP

Results List

valid credentials

Console Output

System architecture — auto-generated

Kraken's architecture is deliberately primitive: kraken.py presents a text-based menu that dispatches to standalone modules living in subdirectories. There's no shared abstraction layer, no plugin system, no job queue. Each module is an independent Python script that duplicates the same patterns—read wordlist files, spawn threads, iterate credentials, print results. Here's what a typical SSH brute force module looks like under the hood:

import paramiko
import threading
from queue import Queue

def ssh_attempt(host, port, username, password, results):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(host, port=port, username=username, 
                      password=password, timeout=5, 
                      allow_agent=False, look_for_keys=False)
        results.append(f"[+] {username}:{password}")
        client.close()
    except paramiko.AuthenticationException:
        pass
    except Exception as e:
        pass

def brute_ssh(host, port, usernames, passwords, threads=10):
    queue = Queue()
    results = []
    
    for user in usernames:
        for passwd in passwords:
            queue.put((user, passwd))
    
    def worker():
        while not queue.empty():
            user, passwd = queue.get()
            ssh_attempt(host, port, user, passwd, results)
            queue.task_done()
    
    for _ in range(threads):
        t = threading.Thread(target=worker)
        t.daemon = True
        t.start()
    
    queue.join()
    return results

This pattern repeats with minor variations across FTP (using ftplib), LDAP (ldap3), and database protocols. The threading model is naive—no connection pooling, no backpressure handling, no exponential backoff on failures. If you configure 50 threads against a rate-limited target, all 50 attempts fire simultaneously, trip threshold detectors, and your IP gets blacklisted before exhausting even 1% of your wordlist.

The CMS modules follow a different pattern, making HTTP requests to known admin endpoints. WordPress brute forcing targets /wp-login.php with POST requests containing log and pwd parameters, checking responses for the absence of error strings. There's no session handling for CSRF tokens, no cookie jar persistence, and zero consideration for JavaScript-rendered login forms:

import requests

def wordpress_login(url, username, password):
    login_url = f"{url}/wp-login.php"
    data = {
        'log': username,
        'pwd': password,
        'wp-submit': 'Log In'
    }
    try:
        response = requests.post(login_url, data=data, timeout=10)
        if 'wp-admin' in response.url or 'dashboard' in response.text:
            return True
    except:
        pass
    return False

This works against default WordPress installations from 2015 but fails immediately against modern setups with login throttling plugins like Limit Login Attempts, two-factor authentication, or Cloudflare bot protection. The module doesn't parse HTML to extract CSRF nonces, doesn't rotate user agents, and makes no attempt to look like legitimate traffic.

The 'finder' tools for directories and admin panels are essentially Python reimplementations of gobuster, reading wordlists and issuing GET requests while checking status codes. Performance is predictably poor—Python's GIL limits true parallelism, and the code uses threading instead of asyncio, meaning you're bottlenecked by synchronous I/O. A comparable Go-based tool like ffuf processes 10-50x more requests per second with the same thread count.

What makes Kraken interesting isn't technical sophistication but the aggregation strategy itself. By bundling Kubernetes API token brute forcing alongside WiFi WPA3 attacks and Office365 credential spraying, the tool reveals which attack surfaces matter to practitioners right now. The inclusion of modern cloud targets (O365, AWS endpoints) suggests active maintenance, while legacy protocols (FTP, Telnet) indicate comprehensiveness for lab environments. It's a barometer for what red teamers actually encounter during engagements, frozen in Python.

Gotcha

Kraken's fundamental limitation is the absence of evasion capabilities. There's no proxy chain support, no request timing randomization, no user-agent rotation, no CAPTCHA solving hooks. The moment you point it at infrastructure protected by Cloudflare, Akamai, or even basic fail2ban rules, you'll be blacklisted before finishing a 500-line wordlist. Modern authentication systems track velocity, connection patterns, and TLS fingerprints—Kraken's naked HTTP requests and rapid-fire SSH attempts scream 'automated attack' to any competent monitoring solution.

The second critical gap is credential intelligence. Successful authentication is binary—you get 'valid' or 'invalid' but no context about account privileges, password expiration policies, or whether MFA is enforced. In enterprise environments, finding a valid credential is just step one; you need to know if it's a domain admin, service account, or locked-down user. Tools like CrackMapExec provide this context for Windows environments, actually enumerating what you can access post-authentication. Kraken dumps credentials and walks away, leaving you to manually validate their utility. For protocols it claims to support but doesn't (SMB and RDP are in the GitHub topics but absent from the actual codebase), you're better off with specialized tools from the start.

Verdict

Use if: You're learning offensive security fundamentals and need a sandbox-friendly tool to understand protocol authentication mechanisms without drowning in command-line flags. Kraken excels in CTF environments, deliberately vulnerable lab networks (HackTheBox, TryHackMe), or testing your own infrastructure where you control the defensive posture and need quick default credential checks across diverse services. It's legitimately useful when you need to validate that hardening worked—if Kraken with rockyou.txt fails, your authentication is probably reasonable. Skip if: You're conducting professional red team engagements or penetration tests against defended infrastructure. The lack of evasion techniques, poor performance compared to Hydra/Medusa, and missing features like credential spraying strategies make this unsuitable for real-world assessments. Choose specialized tools—Hydra for network protocols, wpscan for CMS work, CrackMapExec for Windows environments, and ffuf for web fuzzing. Kraken's convenience doesn't justify the operational risk of noisy, easily-detected attacks that waste engagement hours and alert SOC teams before you've gained meaningful access.