Open-source project
danielmiessler/SecLists avatar
danielmiessler/SecLists

Every documented install gives you master, and the README tells you to whitelist the path

GitHub describes it as SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more.. The repository metadata lists PHP as its primary language. The metadata lists the MIT license. This article stays within the project description and details documented in the GitHub repository README.

73,724 stars25,126 forksPHPMIT

At a glance

What is it?
SecLists is a MIT-licensed collection of wordlists for security assessments, gathered into nine top-level directories so that a tester can clone one repository onto a new box and have every list type to hand. Two details decide whether it fits your workflow. Every install command the README gives resolves to the master branch rather than to a release, and the newest release predates the last commit by about six months. The README also carries an unusually direct warning about antivirus false positives and about keeping these files off a server.
Who is it for?
SecLists suits a tester who wants one repository to clone onto a fresh machine and start from, since that is the stated goal and the install paths deliver it. It does not suit a team that needs reproducible results across time or across machines, because every documented command gives you master, the newest release is 2026.1 from 2026-03-23, and the last commit was 2026-09-25, so two people running the same scan a week apart are not using the same corpus.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly PHP, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Every documented install resolves to master, not to a release

The install section offers five routes, and three of them name the branch explicitly. The zip route fetches `archive/master.zip`, and the fast git route is a shallow clone, which by default takes the default branch:

code
git clone --depth 1 https://github.com/danielmiessler/SecLists.git

The third route is a complete clone, also with no ref and no tag. So there is no documented command that installs a release. Whatever you get is whatever master is at the moment you ran it.

That matters because the release history and the commit history have drifted apart. The three most recent releases are 2025.2 on 2025-04-25, 2025.3 on 2025-09-19 and 2026.1 on 2026-03-23, and the last push to the master branch was 2026-09-25. The newest tag is roughly six months behind the tip, and the releases are calendar-versioned at something like three a year.

The consequence is that a scan result is not reproducible unless you pin a commit. Two testers running the same tool against the same target on different days may be using different wordlists, and the difference in findings has a cause that appears nowhere in the output. Recording the commit hash alongside a result is the only way to tell a real change in coverage from a change in the corpus.

The two distro packages move on a third, slower cadence

Kali Linux and BlackArch both package the collection, and those are the only install routes with a version number attached to them that the maintainers do not control. Kali's route is:

code
apt -y install seclists

and BlackArch's is `sudo pacman -S seclists`. Each is a distribution package, so each is versioned, signed and shipped according to that distribution's release schedule rather than this repository's.

So there are three update cadences on offer, and they are not versions of the same promise. Master moves whenever a list is changed, which is what you want while you are actively maintaining a list and not what you want for a baseline. The calendar release moves three or four times a year. The distribution package moves when the distribution decides to rebuild it, which on a rolling distribution is often and on a fixed release is rarely.

The practical effect is that the same tester on Kali and the same tester with a direct clone can hold materially different lists under the same name, and neither is wrong. For a one-off engagement the direct clone is the better choice because it is current. For anything you intend to repeat, the distribution package is the better choice because the version is fixed, and you should record which one you used.

The README tells you to whitelist the path, because the clone reads as an attack

The licensing section carries a note that is unusual to find and worth reading before you install anything. It says that downloading this repository is likely to cause a false-positive alarm by your anti-virus or anti-malware software, that the filepath should be whitelisted, and that there is nothing in SecLists that can harm your computer as it stands.

The reason is structural rather than accidental. Nine of the top-level directories are lists, and among them are `Web-Shells`, `Payloads` and `Passwords`. A clone therefore places files on your disk whose entire purpose is to be recognised as malicious by a scanner that is doing its job correctly. The detection is a false positive about your intent, not a defect in the detection.

The consequence for an organisation is procedural, and it arrives before any technical work happens. Endpoint protection will flag the clone, the person who ran it may not be the person who can authorise an exception, and the fastest resolution is usually to whitelist a path on one machine and leave the next person to hit the same wall. The README anticipates this by naming the fix, which is the right way round, but it does not tell you how to scope the exception, and scoping it to a whole workstation because a test needs a wordlist is a larger concession than most security teams will make without being asked.

This is also why the direct clone is easier to justify than the distribution package. A package manager install is an auditable action with a known source, while a wget of a branch archive is not.

The README says keep these files off a server, and explains the attack it enables

The same note continues past the antivirus point, and the second half is the more serious one. It says that while nothing in SecLists can harm a computer as it stands, it is not recommended to store these files on a server or other important system, because of the risk of local file include attacks.

That is a specific warning about a specific mechanism, and it is worth being precise about the chain. A local file include bug in an application is normally a limited problem: a crafted path lets an attacker read a file the application can read. If the application's document root or a directory it serves contains a repository holding ready-made web shells, then the include primitive stops being a read and becomes an execution, and the attacker no longer needs to upload anything at all.

So the recommendation is not hygiene. Putting a clone of this repository anywhere inside a path your application can serve converts a class of bug from disclosure into compromise, and the repository hands you the payload you would otherwise have had to write.

The practical rule that follows is narrow and checkable. Keep the clone on a workstation, outside any directory reachable through a web server, outside a static asset path, and outside a container image that also runs an application. A tester who needs the lists on a scanning box should confirm what else on that box serves files, because the risk is not the clone itself but what is pointed at it.

The .bin directory makes the clone executable content, not inert data

Most people picture a wordlist collection as text. This repository is not only that. There is a `.bin` directory at the top level, and the README points at it directly, saying that there are a number of wordlist generators and mutators there.

That changes the character of the clone. A repository you expected to be a few hundred megabytes of lines of text also lands executables on your disk, and it lands them whether or not you intended to use them. There is no install step and no prompt, because there is nothing to install, but the files are present and marked executable.

The surrounding tooling section makes the same point from the other direction. It lists external projects for permuting and combining wordlists, including a generator described as producing up to 17,335,754 combinations per word by mixing case, L33T substitution, reversal, digits, dates and symbols, and a custom word list generator. The point of the `.bin` directory is that some of that is available locally rather than as a separate install.

The consequence for a reviewer is that a diff of this repository is not a diff of a data file. Adding a list and adding a script are different acts with different risk, and they land in the same commit history. If your process treats repository content as inert by default, this is the repository that breaks the assumption, which is another reason the README's advice about where the clone lives matters more than it first appears.

Nine list directories, no index, and no way to tell a fresh list from a stale one

The top level is the whole catalogue: `Ai`, `Discovery`, `Fuzzing`, `Miscellaneous`, `Passwords`, `Pattern-Matching`, `Payloads`, `Usernames` and `Web-Shells`, plus the `.bin` tools and the project files. There is no manifest, no index, no schema, and no per-list metadata.

That is workable if you already know what you are looking for, because a tool takes a path and the path is guessable. It is not workable when you are deciding what to test, because there is nothing to query. Nothing in the repository tells you which lists were touched in the last week, which have been stable for years, or which are duplicates of each other under different names.

Freshness is a real concern for this kind of data, and the repository has no mechanism to express it. A subdomain list is only as good as its last collection run, a list of default credentials goes stale when a product changes its factory password, and a set of dangerous file paths is tied to whatever software was popular when it was assembled. The master branch can absorb those updates, but nothing inside the tree distinguishes a list that was regenerated last month from one that has not moved since it was first added.

The honest workaround is external. Keep your own note of which paths you depend on and when each was last confirmed, and treat an unexplained drop in a tool's hit count as a possible list change rather than a change in the target.

A rival discovery list updates monthly, and this one ships three times a year

The README names its own alternatives, and one line in that list is about update frequency rather than coverage. Assetnote Wordlists is described as high quality wordlists for content and subdomain discovery which are automatically updated every month. The other entries are described by what they contain: fuzz.txt as wordlists of potentially dangerous files, FuzzDB as a dictionary of attack patterns and primitives for black-box fault injection and resource discovery, PayloadsAllTheThings as payloads and bypasses for web application security, SamLists as data-driven wordlists of HTTP parameter names, directory names and filenames, and BiblePass as wordlists compiled from Bible verses.

That last one is a useful reminder that a wordlist is a bet about naming conventions, and that the bets vary. One project bets on a shared corpus for everything; others bet narrowly on files, on parameters, or on a specific source of likely words. The right choice depends on what you are trying to enumerate, and the fact that one of them is generated from Bible verse text is a good argument for reading the source description before assuming any list is a serious research artifact.

For the reader deciding between them, the update frequency is the sharpest difference available. Discovery data is perishable, and a list that is refreshed monthly answers a different question from one that is refreshed three times a year. SecLists does not claim monthly updates, and its release history does not suggest them. If your work is enumeration, check that cadence before you commit, and consider keeping the two side by side rather than choosing once.

Editorial conclusion

SecLists suits a tester who wants one repository to clone onto a fresh machine and start from, since that is the stated goal and the install paths deliver it. It does not suit a team that needs reproducible results across time or across machines, because every documented command gives you master, the newest release is 2026.1 from 2026-03-23, and the last commit was 2026-09-25, so two people running the same scan a week apart are not using the same corpus. Before you wire it into a pipeline, record the commit you tested with, keep the clone off any web root as the README advises, and decide whether a rival list that updates monthly is a better fit for the discovery work than one that ships three releases a year.

Frequently asked questions

What are SecLists?

It is a collection of multiple types of lists used during security assessments, gathered in one place. The stated goal is that a tester can pull the repository onto a new testing machine and have access to every list type that might be needed, with list types including usernames, passwords, URLs, sensitive data patterns, fuzzing payloads and web shells. It is maintained by Daniel Miessler, Jason Haddix, Ignacio Portal and g0tmi1k, and is MIT licensed.

how to install seclists

There are five routes. A zip download, a shallow git clone with --depth 1 for speed, a complete git clone, or the distribution packages, where Kali Linux uses apt -y install seclists and BlackArch uses sudo pacman -S seclists. Every git and zip route resolves to the master branch rather than to a release, so the version you get is whatever master held when you ran the command.

how to install seclists in kali linux

Kali packages the collection, so the install is a single command: apt -y install seclists. Kali has its own tool page for it. Because it is a distribution package, its version is fixed by Kali's schedule rather than by the repository, so it will not track the master branch commit for commit and may be a release behind it.

how to use seclists

You point a testing tool at a file inside one of the nine top-level list directories, and the path you pass is the whole interface. The repository also has a .bin directory holding wordlist generators and mutators, which the README recommends you look at when you need to permute or combine lists rather than write a script yourself. Nothing in the repository documents which tool expects which list, so the mapping is something you establish yourself.

What is a seclist file?

A list of terms, one per line, in a directory named for the list type. The repository groups them into Ai, Discovery, Fuzzing, Miscellaneous, Passwords, Pattern-Matching, Payloads, Usernames and Web-Shells. It does not document a line format, a schema, or per-list metadata, so nothing in the repository tells you the encoding, the sort order, or when an individual list was last regenerated.

What is the difference between SecLists and other lists?

SecLists is broad, covering passwords, usernames, discovery, fuzzing and payloads in one repository, and it releases a few times a year. The alternatives it names each bet more narrowly: Assetnote Wordlists focuses on content and subdomain discovery and is updated every month, fuzz.txt on potentially dangerous files, FuzzDB on black-box fault injection patterns, and SamLists on HTTP parameter names, directory names and filenames. For enumeration work, that update frequency is the difference worth checking.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/danielmiessler-seclists.svg)](https://hysenlabs.com/projects/danielmiessler-seclists)