{
	"id": "8b1a6808-872a-4cc7-9ecd-6ff08a70792d",
	"created_at": "2026-04-06T01:30:13.00148Z",
	"updated_at": "2026-04-10T13:11:57.34422Z",
	"deleted_at": null,
	"sha1_hash": "aa8994e9777e41653068f292c965b500a907ff18",
	"title": "GitHub - maurosoria/dirsearch: Web path scanner",
	"llm_title": "",
	"authors": "",
	"file_creation_date": "0001-01-01T00:00:00Z",
	"file_modification_date": "0001-01-01T00:00:00Z",
	"file_size": 277674,
	"plain_text": "GitHub - maurosoria/dirsearch: Web path scanner\r\nBy maurosoria\r\nArchived: 2026-04-06 00:09:01 UTC\r\ndirsearch - Web path discovery\r\nBBuuiilltt wwiitthh PPyytthhoonn\r\n lliicceennssee GGNNUU GGeenneerraall PPuubblliicc LLiicceennssee Stars 14k rreelleeaassee vv00..44..33 ssppoonnssoorrss 0\r\nchat 1111 oonnlliinnee\r\n FFoollllooww\r\nAn advanced web path brute-forcer\r\ndirsearch is being actively developed by @maurosoria and @shelld3v\r\nReach to our Discord server to communicate with the team at best\r\nTable of Contents\r\nSupported Platforms\r\nInstallation \u0026 Usage\r\nStandalone Binaries\r\nWordlists\r\nOptions\r\nConfiguration\r\nHow to use\r\nSession Management\r\nSupport Docker\r\nBuilding from Source\r\nCI/CD \u0026 GitHub Workflows\r\nReferences\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 1 of 9\n\nTips\r\nContribution\r\nLicense\r\nSupported Platforms\r\ndirsearch runs on multiple platforms and can be used either via Python or standalone binaries:\r\nPlatform Python Standalone Binary\r\nLinux (x86_64) Python 3.9+ dirsearch-linux-amd64\r\nWindows (x64) Python 3.9+ dirsearch-windows-x64.exe\r\nmacOS (Intel) Python 3.9+ dirsearch-macos-intel\r\nmacOS (Apple Silicon) Python 3.9+ dirsearch-macos-silicon\r\nStandalone binaries are self-contained executables that don't require Python installation.\r\nInstallation \u0026 Usage\r\nRequirement: python 3.9 or higher\r\nChoose one of these installation options:\r\nInstall with git: git clone https://github.com/maurosoria/dirsearch.git --depth 1\r\n(RECOMMENDED)\r\nInstall with ZIP file: Download here\r\nInstall with Docker: docker build -t \"dirsearch:v0.4.3\" . (more information can be found here)\r\nInstall with PyPi: pip3 install dirsearch or pip install dirsearch\r\nInstall with Kali Linux: sudo apt-get install dirsearch (deprecated)\r\nStandalone Binaries\r\nPre-built standalone binaries are available for all major platforms. These don't require Python to be installed.\r\nDownload from Releases\r\nPlatform Binary Name Architecture\r\nLinux dirsearch-linux-amd64 x86_64\r\nWindows dirsearch-windows-x64.exe x64\r\nmacOS Intel dirsearch-macos-intel x86_64\r\nmacOS Apple Silicon dirsearch-macos-silicon ARM64\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 2 of 9\n\nUsage:\r\n# Linux/macOS - make executable first\r\nchmod +x dirsearch-linux-amd64\r\n./dirsearch-linux-amd64 -u https://target\r\n# Windows\r\ndirsearch-windows-x64.exe -u https://target\r\nNote: Standalone binaries include bundled db/ wordlists and config.ini . Session files are stored in\r\n$HOME/.dirsearch/sessions/ when using bundled builds.\r\nWordlists (IMPORTANT)\r\nSummary:\r\nWordlist is a text file, each line is a path.\r\nAbout extensions, unlike other tools, dirsearch only replaces the %EXT% keyword with extensions from -e\r\nflag.\r\nFor wordlists without %EXT% (like SecLists), -f | --force-extensions switch is required to append\r\nextensions to every word in wordlist, as well as the / .\r\nTo apply your extensions to wordlist entries that have extensions already, use -O | --overwrite-extensions\r\n(Note: some extensions are excluded from being overwritted such as .log, .json, .xml, ... or media\r\nextensions like .jpg, .png)\r\nTo use multiple wordlists, you can separate your wordlists with commas. Example:\r\nwordlist1.txt,wordlist2.txt .\r\nBundled wordlist categories live in db/categories/ and can be selected with --wordlist-categories.\r\nAvailable: extensions , conf , vcs , backups , db , logs , keys , web , common (use all to\r\ninclude everything).\r\nWordlist Examples (click to expand)\r\nOptions\r\nFull Options List (click to expand)\r\nConfiguration\r\nConfiguration File Reference (click to expand)\r\nHow to use\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 3 of 9\n\n┌──(admin@Admin )-[ ~/dirsearch ]\r\n└─$ python3 dirsearch.py -e php -u https://example.com --exclude-status 403,401\r\n \r\n _|. _ _ _ _ _ _|_ v0.4.1\r\n (_||| _) (/_(_|| (_| )\r\n \r\nExtensions: php | HTTP method: GET | Threads: 50 | Wordlist size: 8719\r\n \r\nError Log: /home/admin/dirsearch/logs/errors-20-12-19_22-00-35.log\r\n \r\nTarget: https://example.com/\r\n \r\nOutput File: /home/admin/dirsearch/reports/example.com/_20-12-19_22-00-36.txt\r\n \r\n[22:00:36] Starting:\r\n23.53% - Last request to: TechnologySamples/AddressBook/AddressBookServlet\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nSome examples for how to use dirsearch - those are the most common arguments. If you need all, just use the -h\r\nargument.\r\nSimple usage\r\npython3 dirsearch.py -u https://target\r\npython3 dirsearch.py -e php,html,js -u https://target\r\npython3 dirsearch.py -e php,html,js -u https://target -w /path/to/wordlist\r\nMore Usage Examples (click to expand)\r\nSession Management\r\ndirsearch supports saving and resuming scan sessions, allowing you to pause a long-running scan and continue it\r\nlater.\r\nSession Format\r\nSessions are stored in JSON format (directory-based structure) for human readability and easy inspection.\r\nLegacy .pickle / .pkl session files are no longer supported.\r\nSession directory structure:\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 4 of 9\n\nsession_name/\r\n├── meta.json # Version, timestamps, output history\r\n├── controller.json # Scan state (URLs, directories, progress)\r\n├── dictionary.json # Wordlist state and position\r\n└── options.json # Command-line options used\r\nSaving a Session\r\nWhen you pause a scan with CTRL+C, you'll be prompted to save the session:\r\npython3 dirsearch.py -u https://target -e php\r\n# Press CTRL+C during scan\r\n# Select \"save\" and provide a session name\r\nResuming a Session\r\nResume a saved session with the -s / --session flag:\r\npython3 dirsearch.py -s sessions/my_session\r\nListing Available Sessions\r\nView all resumable sessions with --list-sessions:\r\npython3 dirsearch.py --list-sessions\r\nThis displays:\r\nSession path\r\nTarget URL\r\nRemaining targets and directories\r\nJobs processed\r\nError count\r\nLast modified time\r\nCustom Sessions Directory\r\nSpecify a custom directory to search for sessions:\r\npython3 dirsearch.py --list-sessions --sessions-dir /path/to/sessions\r\nDefault session locations:\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 5 of 9\n\nSource install: \u003cdirsearch\u003e/sessions/\r\nBundled binary: $HOME/.dirsearch/sessions/\r\nOutput History\r\nSessions maintain a history of previous scan outputs, allowing you to review results from interrupted scans. Each\r\nresume appends to the output history with timestamps.\r\nSupport Docker\r\nDocker Installation \u0026 Usage (click to expand)\r\nBuilding from Source\r\nYou can build standalone executables using PyInstaller. This creates a single binary file that includes all\r\ndependencies.\r\nRequirements\r\nPython 3.9+\r\nPyInstaller 6.3.0+\r\nAll dependencies from requirements.txt\r\nQuick Build\r\n# Install dependencies\r\npip install -r requirements.txt\r\npip install pyinstaller==6.3.0\r\n# Build using the spec file\r\npyinstaller pyinstaller/dirsearch.spec\r\n# Binary will be in dist/dirsearch\r\n./dist/dirsearch --version\r\nManual Build (Linux/macOS)\r\npyinstaller \\\r\n --onefile \\\r\n --name dirsearch \\\r\n --paths=. \\\r\n --collect-submodules=lib \\\r\n --add-data \"db:db\" \\\r\n --add-data \"config.ini:.\" \\\r\n --add-data \"lib/report:lib/report\" \\\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 6 of 9\n\n--hidden-import=requests \\\r\n --hidden-import=httpx \\\r\n --hidden-import=urllib3 \\\r\n --hidden-import=jinja2 \\\r\n --hidden-import=colorama \\\r\n --strip \\\r\n --clean \\\r\n dirsearch.py\r\nManual Build (Windows)\r\npyinstaller `\r\n --onefile `\r\n --name dirsearch `\r\n --paths=. `\r\n --collect-submodules=lib `\r\n --add-data \"db;db\" `\r\n --add-data \"config.ini;.\" `\r\n --add-data \"lib/report;lib/report\" `\r\n --hidden-import=requests `\r\n --hidden-import=httpx `\r\n --hidden-import=urllib3 `\r\n --hidden-import=jinja2 `\r\n --hidden-import=colorama `\r\n --clean `\r\n dirsearch.py\r\nNote: Windows uses ; instead of : as the path separator in --add-data .\r\nBuild Output\r\nAfter building:\r\nLinux/macOS: dist/dirsearch\r\nWindows: dist/dirsearch.exe\r\nThe binary includes:\r\nAll Python dependencies\r\ndb/ directory (wordlists, blacklists)\r\nconfig.ini (default configuration)\r\nlib/report/ (Jinja2 templates for reports)\r\nCI/CD \u0026 GitHub Workflows\r\ndirsearch uses GitHub Actions for continuous integration and automated builds.\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 7 of 9\n\nAvailable Workflows\r\nWorkflow Trigger Description\r\nInspection (CI) Push, PR\r\nRuns tests, linting, and codespell on Python 3.9/3.11 across\r\nUbuntu and Windows\r\nPyInstaller Linux\r\nManual, Workflow\r\ncall\r\nBuilds dirsearch-linux-amd64 binary\r\nPyInstaller Windows\r\nManual, Workflow\r\ncall\r\nBuilds dirsearch-windows-x64.exe binary\r\nPyInstaller macOS\r\nIntel\r\nManual, Workflow\r\ncall\r\nBuilds dirsearch-macos-intel binary\r\nPyInstaller macOS\r\nSilicon\r\nManual, Workflow\r\ncall\r\nBuilds dirsearch-macos-silicon binary\r\nPyInstaller Draft\r\nRelease\r\nManual Builds all platforms and creates a draft GitHub release\r\nDocker Image Push, PR Builds and tests Docker image\r\nCodeQL Analysis\r\nPush, PR,\r\nSchedule\r\nSecurity scanning with GitHub CodeQL\r\nSemgrep Analysis Push, PR Static analysis with Semgrep\r\nRunning Workflows Manually\r\nPyInstaller builds can be triggered manually from the GitHub Actions tab:\r\n1. Go to Actions \u003e Select workflow (e.g., \"PyInstaller Linux\")\r\n2. Click Run workflow\r\n3. Download artifacts from the completed run\r\nCreating a Release\r\nTo create a new release with all platform binaries:\r\n1. Go to Actions \u003e PyInstaller Draft Release\r\n2. Click Run workflow\r\n3. Enter the tag (e.g., v0.4.4 )\r\n4. Select target branch\r\n5. Optionally mark as prerelease\r\n6. Review and publish the draft release\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 8 of 9\n\nBuild Matrix\r\nThe CI workflow tests on:\r\nPython versions: 3.9, 3.11\r\nOperating systems: Ubuntu (latest), Windows (latest)\r\nReferences\r\nArticles \u0026 Tutorials (click to expand)\r\nTips\r\nThe server has requests limit? That's bad, but feel free to bypass it, by randomizing proxy with --proxy-list\r\nWant to find out config files or backups? Try --suffixes ~ and --prefixes .\r\nWant to find only folders/directories? Why not combine --remove-extensions and --suffixes / !\r\nThe mix of --cidr , -F , -q and will reduce most of noises + false negatives when brute-forcing with a\r\nCIDR\r\nScan a list of URLs, but don't want to see a 429 flood? --skip-on-status 429 will help you to skip a\r\ntarget whenever it returns 429\r\nThe server contains large files that slow down the scan? You might want to use HEAD HTTP method\r\ninstead of GET\r\nBrute-forcing CIDR is slow? Probably you forgot to reduce request timeout and request retries. Suggest: -\r\n-timeout 3 --retries 1\r\nContribution\r\nWe have been receiving a lot of helps from many people around the world to improve this tool. Thanks so much to\r\neveryone who have helped us so far! See CONTRIBUTORS.md to know who they are.\r\nPull requests and feature requests are welcomed\r\nLicense\r\nCopyright (C) Mauro Soria (maurosoria@gmail.com)\r\nLicense: GNU General Public License, version 2\r\nSource: https://github.com/maurosoria/dirsearch\r\nhttps://github.com/maurosoria/dirsearch\r\nPage 9 of 9",
	"extraction_quality": 1,
	"language": "EN",
	"sources": [
		"ETDA"
	],
	"origins": [
		"web"
	],
	"references": [
		"https://github.com/maurosoria/dirsearch"
	],
	"report_names": [
		"dirsearch"
	],
	"threat_actors": [
		{
			"id": "9de1979b-40fc-44dc-855d-193edda4f3b8",
			"created_at": "2025-08-07T02:03:24.92723Z",
			"updated_at": "2026-04-10T02:00:03.755516Z",
			"deleted_at": null,
			"main_name": "GOLD LOCUST",
			"aliases": [
				"Anunak",
				"Carbanak",
				"Carbon Spider ",
				"FIN7 ",
				"Silicon "
			],
			"source_name": "Secureworks:GOLD LOCUST",
			"tools": [
				"Carbanak"
			],
			"source_id": "Secureworks",
			"reports": null
		},
		{
			"id": "cfdd35af-bd12-4c03-8737-08fca638346d",
			"created_at": "2022-10-25T16:07:24.165595Z",
			"updated_at": "2026-04-10T02:00:04.887031Z",
			"deleted_at": null,
			"main_name": "Sea Turtle",
			"aliases": [
				"Cosmic Wolf",
				"Marbled Dust",
				"Silicon",
				"Teal Kurma",
				"UNC1326"
			],
			"source_name": "ETDA:Sea Turtle",
			"tools": [
				"Drupalgeddon"
			],
			"source_id": "ETDA",
			"reports": null
		},
		{
			"id": "33ae2a40-02cd-4dba-8461-d0a50e75578b",
			"created_at": "2023-01-06T13:46:38.947314Z",
			"updated_at": "2026-04-10T02:00:03.155091Z",
			"deleted_at": null,
			"main_name": "Sea Turtle",
			"aliases": [
				"UNC1326",
				"COSMIC WOLF",
				"Marbled Dust",
				"SILICON",
				"Teal Kurma"
			],
			"source_name": "MISPGALAXY:Sea Turtle",
			"tools": [],
			"source_id": "MISPGALAXY",
			"reports": null
		},
		{
			"id": "62b1b01f-168d-42db-afa1-29d794abc25f",
			"created_at": "2025-04-23T02:00:55.22426Z",
			"updated_at": "2026-04-10T02:00:05.358041Z",
			"deleted_at": null,
			"main_name": "Sea Turtle",
			"aliases": [
				"Sea Turtle",
				"Teal Kurma",
				"Marbled Dust",
				"Cosmic Wolf",
				"SILICON"
			],
			"source_name": "MITRE:Sea Turtle",
			"tools": [
				"SnappyTCP"
			],
			"source_id": "MITRE",
			"reports": null
		}
	],
	"ts_created_at": 1775439013,
	"ts_updated_at": 1775826717,
	"ts_creation_date": 0,
	"ts_modification_date": 0,
	"files": {
		"pdf": "https://archive.orkl.eu/aa8994e9777e41653068f292c965b500a907ff18.pdf",
		"text": "https://archive.orkl.eu/aa8994e9777e41653068f292c965b500a907ff18.txt",
		"img": "https://archive.orkl.eu/aa8994e9777e41653068f292c965b500a907ff18.jpg"
	}
}