> 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 ↗

Back to Articles

Inside a 211MB Wordlist: Engineering Efficient Content Discovery for Web Penetration Testing

[ View on GitHub ]

Inside a 211MB Wordlist: Engineering Efficient Content Discovery for Web Penetration Testing

Hook

A single 211MB text file can scan thousands of potential URLs per second against a web server—but only if you understand the architecture behind HTTP pipelining and how modern bruteforce tools have evolved beyond simple sequential requests.

Context

Web application penetration testing has always involved a fundamental challenge: discovering content that isn't linked or indexed. Hidden admin panels, forgotten backup files, staging directories, and API endpoints often exist on production servers without any visible references. Traditional approaches involved manually guessing paths or using small, generic wordlists with tools that sent one HTTP request at a time—a slow, incomplete process.

The cujanovic/Content-Bruteforcing-Wordlist repository represents a different philosophy: comprehensiveness over minimalism. Rather than providing dozens of specialized wordlists for different scenarios, it offers a massive, consolidated dictionary optimized for modern high-performance scanning tools. The 211MB file contains millions of paths aggregated from real-world web server configurations, framework defaults, common naming patterns, and historical breach data. More importantly, it's designed specifically for Burp Suite's Turbo Intruder extension, which uses HTTP/1.1 pipelining to send multiple requests through a single TCP connection, dramatically reducing the overhead of connection establishment and TLS handshakes that plague traditional scanners.

Technical Insight

Burp Suite Extension

Performance Layer

Wordlist File

211MB paths

Turbo Intruder

Python Script

Request Engine

Pipeline Manager

Connection Pool

5 concurrent TCP

Queue Manager

100 reqs/connection

Target Web Server

Response Handler

Filter non-404

Results Table

Discovered paths

System architecture — auto-generated

The architecture behind effective content discovery isn't just about the wordlist—it's about understanding how HTTP pipelining transforms bruteforce efficiency. Traditional tools like dirb or dirbuster send requests sequentially: open connection, send request, wait for response, close connection, repeat. This approach wastes enormous amounts of time on network round-trips and connection overhead, especially over high-latency connections or HTTPS.

Turbo Intruder, the primary tool this wordlist targets, leverages HTTP/1.1 pipelining to queue multiple requests in a single TCP connection before waiting for responses. The repository includes a Python example script that demonstrates this pattern:

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                          concurrentConnections=5,
                          requestsPerConnection=100,
                          pipeline=True)
    
    for word in open('/path/to/wordlist.txt'):
        engine.queue(target.req, word.rstrip())

def handleResponse(req, interesting):
    if req.status != 404:
        table.add(req)

The key parameters here reveal the performance model: concurrentConnections=5 maintains five persistent TCP connections to the target server, while requestsPerConnection=100 queues 100 HTTP requests through each connection before rotating. The pipeline=True flag enables HTTP pipelining, allowing requests to be sent without waiting for previous responses. This means you can theoretically have 500 requests in-flight simultaneously (5 connections × 100 requests each), compared to traditional scanners that might handle 10-50 concurrent requests with full connection overhead.

The wordlist itself follows a flat structure—one path per line, no categorization or metadata. This simplicity is intentional. Complex hierarchical wordlists require parsing logic that adds CPU overhead during high-speed scanning. The flat format allows tools to stream lines directly into the request engine with minimal processing:

with open('wordlist.txt', 'r', encoding='utf-8', errors='ignore') as f:
    for line in f:
        path = line.strip()
        if path and not path.startswith('#'):
            # Direct injection into URL path
            target_url = f"{base_url}/{path}"
            engine.queue(target_url)

The wordlist composition appears to aggregate paths from multiple sources: common CMS installations (WordPress, Joomla, Drupal), framework defaults (Laravel, Django, Spring), cloud service metadata endpoints (AWS, Azure, GCP), version control artifacts (.git, .svn), backup file patterns (.bak, .old, .backup), and locale-specific paths. The 211MB size suggests approximately 10-15 million unique paths assuming average lengths of 15-20 characters per entry.

Integration with dirsearch, the alternative tool mentioned, follows a different performance model. Dirsearch uses asynchronous I/O rather than HTTP pipelining, creating many concurrent connections with async request handling:

python3 dirsearch.py -u https://target.com \
  -w /path/to/wordlist.txt \
  -t 100 \
  --random-agent \
  --exclude-status 404,403

The -t 100 flag creates 100 worker threads, each handling request/response cycles independently. This approach is more compatible with HTTP/2 and modern load balancers but generates significantly more connection overhead than Turbo Intruder's pipelining approach. For this massive wordlist, Turbo Intruder's pipelining typically provides 3-5x speed improvements on HTTP/1.1 endpoints, though results vary based on server configuration and network conditions.

A critical but undocumented aspect is handling false positives. Web servers often return 200 OK responses for non-existent paths when custom error handlers are configured. The example script's handleResponse function filters by status code, but production use requires additional heuristics—response size comparison, content hash analysis, or title tag extraction to identify genuine discoveries among thousands of responses.

Gotcha

The biggest limitation is resource consumption and practicality. A 211MB wordlist with millions of paths can take hours to complete even with optimized pipelining—you're looking at 4-8 hour scan times for comprehensive coverage on typical web servers. Aggressive scanning will trigger rate limiting, WAF blocks, or IP bans on most production systems, and the repository provides no guidance on scan throttling, jitter injection, or intelligent retry logic. You're expected to implement these safeguards yourself or risk getting blocked mid-scan with no resume capability.

Turbo Intruder requires Burp Suite Professional ($449/year individual license), which isn't mentioned prominently in the documentation. The extension simply isn't available in the free Community Edition. If you're using open-source alternatives like dirsearch or ffuf, you won't achieve the performance characteristics this wordlist was optimized for, since those tools handle HTTP pipelining differently or not at all. The single massive file approach also means you can't easily subset the wordlist for targeted scans—if you only want to test for PHP files or administrative interfaces, you'll need to grep/filter the entire 211MB file first, adding preprocessing time. The lack of documentation about wordlist composition, sources, or update methodology makes it difficult to assess coverage for specific target types or understand what you might be missing.

Verdict

Use if: You're conducting authorized, comprehensive penetration tests on web applications where discovery completeness matters more than scan speed, you have Burp Suite Professional with Turbo Intruder, and you're targeting HTTP/1.1 endpoints where pipelining provides maximum benefit. This wordlist excels at finding forgotten endpoints, backup files, and legacy paths on mature production systems with complex histories. Skip if: You need quick reconnaissance scans (use smaller targeted lists like raft-medium-directories.txt instead), you're working with free/open-source tools only (SecLists provides better-categorized alternatives for dirsearch/ffuf), you're scanning modern cloud-native applications with minimal attack surface (framework-specific wordlists will be more efficient), or you're operating under strict time/bandwidth constraints where the 211MB download and multi-hour scan times aren't justified.