{"id":23989584,"url":"https://github.com/cyberroute/bruter","last_synced_at":"2025-11-07T06:03:53.268Z","repository":{"id":137361840,"uuid":"612262210","full_name":"CyberRoute/bruter","owner":"CyberRoute","description":"Bruter is an OSINT tooling, an experiment to build a reconnaissance simple app to have fun 🕵️‍♂️","archived":false,"fork":false,"pushed_at":"2024-09-17T08:47:13.000Z","size":8939,"stargazers_count":57,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-27T09:42:47.041Z","etag":null,"topics":["bruteforce","dir-buster","dirbuster","directory-brute-forcing","dirsearch","enumeration","fuzzing","golang","grabber","information-gathering","osint","reconnaissance","security","security-audit","security-tools","web-enumeration","wordlist"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CyberRoute.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-10T14:50:45.000Z","updated_at":"2025-08-04T19:39:09.000Z","dependencies_parsed_at":"2024-02-15T16:50:15.040Z","dependency_job_id":"d1bdd786-3f16-414f-8da9-e64b6f29512f","html_url":"https://github.com/CyberRoute/bruter","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/CyberRoute/bruter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberRoute%2Fbruter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberRoute%2Fbruter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberRoute%2Fbruter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberRoute%2Fbruter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CyberRoute","download_url":"https://codeload.github.com/CyberRoute/bruter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberRoute%2Fbruter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283136761,"owners_count":26785489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-07T02:00:06.343Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bruteforce","dir-buster","dirbuster","directory-brute-forcing","dirsearch","enumeration","fuzzing","golang","grabber","information-gathering","osint","reconnaissance","security","security-audit","security-tools","web-enumeration","wordlist"],"created_at":"2025-01-07T17:32:05.942Z","updated_at":"2025-11-07T06:03:53.226Z","avatar_url":"https://github.com/CyberRoute.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![go build](https://github.com/CyberRoute/bruter/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/CyberRoute/bruter/actions/workflows/go.yml)\n[![golangci-lint](https://github.com/CyberRoute/bruter/actions/workflows/golangci-lint.yml/badge.svg?branch=main)](https://github.com/CyberRoute/bruter/actions/workflows/golangci-lint.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/CyberRoute/bruter)](https://goreportcard.com/report/github.com/CyberRoute/bruter)\n\n# Bruter\nBruter is a simple app that was built as an experiment while learning Go. It is indeed very much inspired by [Xray](https://github.com/evilsocket/xray) git  (but hey not copied ;)). The tooling can be used to test webservers and validate webservers configurations, but not just!\n\nWhat does it do?\n- It grabs HostInfo data from Shodan APIs, so you will need a Token to try this out\n- It collects banners for various services FTP, SSH, MYSQL, IRC, SMTP\n- It collects HTTP headers\n- It collects WHOIS query information\n- It brute force directories on WebServers and reports results (200)\n- It provides info from crt.sh about SSL certificates\n- It supports custom wordlists\n- It produces a Web UI for presentation\n\n## Usage\n```\n   Usage of /tmp/go-build3838391229/b001/exe/concurrency:\n  -address string\n    \tIP address to bind the web UI server to. (default \"127.0.0.1\")\n  -dictionary string\n    \tFile to use for enumeration. (default \"db/apache-list\")\n  -domain string\n    \tdomain to scan\n  -extension string\n    \tFile extension. (default \"js\")\n  -shodan string\n    \tshodan API key\n  -verbose\n    \tVerbosity\n  -workers int\n    \tDefault is 0, if workers is less than or equal than zero, it will be auto scaled to the number of logical CPUs usable by the current process.\n```\n\n## Running in Docker\n```\ndocker build -t bruter .\ndocker run --rm -it -p 8080:8080 bruter -domain example.com -shodan [shodanapikey] -verbose\n```\n\n\n## Example\n    go run cmd/bruter/* -domain example.com -shodan [SHODANTOKEN] -verbose\n    12:41PM INF Scanning IP 93.184.216.34 OK\n    12:41PM INF UI running on http://127.0.0.1:8080/\n    12:41PM INF http://example.com/.htaccess.bak =\u003e 404 Not Found\n    12:41PM INF http://example.com/httpd/logs/access_log =\u003e 404 Not Found\n    12:41PM INF http://example.com/logs/error.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/cgi =\u003e 404 Not Found\n    12:41PM INF http://example.com/apache/logs/access_log =\u003e 404 Not Found\n    12:41PM INF http://example.com/apache/logs/access.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/logs/access.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/logs/error_log =\u003e 404 Not Found\n    12:41PM INF http://example.com/httpd/logs/error.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/logs/access.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/cgi-bin =\u003e 404 Not Found\n    12:41PM INF http://example.com/httpd/logs/error_log =\u003e 404 Not Found\n    12:41PM INF http://example.com/.web =\u003e 404 Not Found\n    12:41PM INF http://example.com/httpd/logs/access.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/.meta =\u003e 404 Not Found\n    12:41PM INF http://example.com/apache/logs/error.log =\u003e 404 Not Found\n    12:41PM INF http://example.com/apache/logs/error_log =\u003e 404 Not Found   \n\n## Example of the Web UI\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"/img/bruter.png\" width=\"800px\"\u003c/img\u003e \n\u003c/div\u003e\n\n## Contribute\nFork the repo and send PRs\n\n```\nmake all\n\nCleaning up\nrm -rf build\nRunning tests...\ngo test ./... -v -cover -race\n?   \tgithub.com/CyberRoute/bruter/cmd/bruter\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/config\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/grabber\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/handlers\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/models\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/render\t[no test files]\n?   \tgithub.com/CyberRoute/bruter/pkg/shodan\t[no test files]\n=== RUN   TestUrlJoin\n--- PASS: TestUrlJoin (0.00s)\n=== RUN   TestAuth\n{\"level\":\"info\",\"time\":\"2023-03-10T14:25:36+01:00\",\"message\":\"http://127.0.0.1:36983/ =\u003e 200 OK\"}\n{\"level\":\"info\",\"time\":\"2023-03-10T14:25:36+01:00\",\"message\":\"http://127.0.0.1:44337/ =\u003e 403 Forbidden\"}\n{\"level\":\"info\",\"time\":\"2023-03-10T14:25:36+01:00\",\"message\":\"http://127.0.0.1:45357/ =\u003e 500 Internal Server Error\"}\n--- PASS: TestAuth (0.01s)\nPASS\n\tgithub.com/CyberRoute/bruter/pkg/fuzzer\tcoverage: 71.0% of statements\nok  \tgithub.com/CyberRoute/bruter/pkg/fuzzer\t0.044s\tcoverage: 71.0% of statements\n=== RUN   TestResolveByName\n=== RUN   TestResolveByName/valid_domain\n=== RUN   TestResolveByName/invalid_domain\n--- PASS: TestResolveByName (0.14s)\n    --- PASS: TestResolveByName/valid_domain (0.00s)\n    --- PASS: TestResolveByName/invalid_domain (0.13s)\nPASS\n\tgithub.com/CyberRoute/bruter/pkg/network\tcoverage: 26.7% of statements\nok  \tgithub.com/CyberRoute/bruter/pkg/network\t0.165s\tcoverage: 26.7% of statements\nRunning lint...\ngo list ./... | golangci-lint run \nFormatting...\ngofmt -s -w .\nBuilding...\ngo build -o build/bruter cmd/bruter/*.go\n\n```\n\n\n\n## License\nBruter is developed by Alessandro Bresciani with some help from various projects and released with GPL license.\n\n## Acknowledgments\n[DB file](https://github.com/CyberRoute/bruter/blob/main/db/dict.txt) has been borrowed from [dirsearch](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberroute%2Fbruter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyberroute%2Fbruter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberroute%2Fbruter/lists"}