by Jake Miller, on Jul 25, 2019 5:55:46 PM
GitGot is a semi-automated, feedback-driven tool to empower users to rapidly search through troves of public data on GitHub for sensitive secrets.
How GitGot Works
During search sessions, users will provide feedback to GitGot about search results to ignore, and GitGot prunes the set of results. Users can blacklist files by filename, repository name, username, or a fuzzy match of the file contents.
Blacklists generated from previous sessions can be saved and reused against similar queries
Example Org ). Sessions can also be paused and resumed at any time.
Read more about the semi-automated, human-in-the-loop design here.
Go to GitHub for complete tooling.
 Install the
ssdeep dependency for fuzzy hashing.
Ubuntu/Debian (or equivalent for your distro):
apt-get install libfuzzy-dev ssdeep
or, for Mac OSX:
brew install ssdeep
For Windows or *nix distributions without the
ssdeep package, please see the ssdeep installation instructions.
 After installing
ssdeep, install the Python dependencies using
pip3 install -r requirements.txt
gitgot-docker.sh to build the GitGot docker image (if it doesn't already exist) and execute the dockerized version of the GitGot tool.
gitgot-docker.sh will create and mount
states directories from the host's current working directory. If this
gitgot-docker.sh is executed from the GitGot project directory it will update the docker container with changes to
./gitgot-docker.sh -q example.com
gitgot-docker.sh for specific docker commands)
GitHub requires a token for rate-limiting purposes. Create a GitHub API token with no permissions/no scope. This will be equivalent to public GitHub access, but it will allow access to use the GitHub Search API. Set this token at the top of
gitgot.py as shown below:
ACCESS_TOKEN = "<NO-PERMISSION-GITHUB-TOKEN-HERE>"
(Alternatively, this token can be set as the
GITHUB_ACCESS_TOKEN environment variable)
After adding the token, you are ready to go:
# Query for the string "example.com" using the default RegEx list
and logfile location (/logs/<query>.log)
./gitgot.py -q example.com
# Using GitHub advanced search syntax
./gitgot.py -q "org:github cats"
# Custom RegEx List and custom log files location
./gitgot.py -q example.com -f checks/default.list -o example1.log
# Recovery from existing session
./gitgot.py -q example.com -r example.com.state
# Using an existing session (w/blacklists) for a new query
./gitgot.py -q "Example Org" -r example.com.state
GitGot queries are fed directly into the GitHub code search API, so check out GitHub's documentation for more advanced query syntax.
- Ignore similar [c]ontent: Blacklists a fuzzy hash of the file contents to ignore future results that are similar to the selected file
- Ignore [r]epo/[u]ser/[f]ilename: Ignores future results by blacklisting selected strings
- Search [/(mykeyword)]: Provides a custom regex expression with a capture group to searches on-the-fly (e.g.,
- [a]dd to Log: Add RegEx matches to log file, including all on-the-fly search results from search command
- Next[<Enter>], [b]ack: Advances through search results, or returns to previous results
- [s]ave state: Saves the blacklists and progress in the search results from the session
- [q]uit: Quit
Excerpt from GitHub:
Go to https://github.com/BishopFox/GitGot for complete tooling.
If these aren't created beforehand, they will be created with root privs. There might be a cleaner fix with the docker-run line. TBD
|checks||Fix RegEx deprecation warnings|
|Dockerfile||Added Docker Support|
|README.md||Added Docker Support|
|gitgot-docker.sh||Create volume directories in gitgot-docker.sh|
|gitgot.py||Bug Fix (#10): Updated fix to match PR|