mirror of
https://github.com/hashcat/hashcat.git
synced 2025-03-06 18:16:12 +00:00
Add gitea2hashcat.py
This commit is contained in:
parent
08514edd22
commit
faa680fbab
75
tools/gitea2hashcat.py
Executable file
75
tools/gitea2hashcat.py
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
# Converts gitea PBKDF2-HMAC-SHA256 hashes into a format hashcat can use
|
||||||
|
# written by unix-ninja
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import base64
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def convert_hash(hash_string):
|
||||||
|
"""Converts a SALT+HASH string to a hashcat compatible format,
|
||||||
|
ensuring the smaller input is treated as the salt.
|
||||||
|
Use : or | as delimeters.
|
||||||
|
"""
|
||||||
|
hash_string = hash_string.replace('|', ':')
|
||||||
|
try:
|
||||||
|
part1, part2 = hash_string.split(":")
|
||||||
|
except ValueError:
|
||||||
|
print(f"[-] Invalid input format: {hash_string}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
bytes1 = bytes.fromhex(part1)
|
||||||
|
bytes2 = bytes.fromhex(part2)
|
||||||
|
except ValueError:
|
||||||
|
print(f"[-] Invalid hex input: {hash_string}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
# If lengths are equal, we will maintain the original order
|
||||||
|
if len(bytes1) > len(bytes2):
|
||||||
|
salt_bytes = bytes2
|
||||||
|
hash_bytes = bytes1
|
||||||
|
else:
|
||||||
|
salt_bytes = bytes1
|
||||||
|
hash_bytes = bytes2
|
||||||
|
|
||||||
|
|
||||||
|
salt_b64 = base64.b64encode(salt_bytes).decode('utf-8')
|
||||||
|
hash_b64 = base64.b64encode(hash_bytes).decode('utf-8')
|
||||||
|
|
||||||
|
return f"sha256:50000:{salt_b64}:{hash_b64}"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Convert Gitea SALT+HASH strings to a hashcat-compatible format.",
|
||||||
|
formatter_class=argparse.RawTextHelpFormatter,
|
||||||
|
epilog="""Example:
|
||||||
|
gitea2hashcat.py <salt1>:<hash1> <hash2>|<salt2> ... or pipe input from stdin.
|
||||||
|
|
||||||
|
You can also dump output straight from sqlite into this script:
|
||||||
|
sqlite3 gitea.db 'select salt,passwd from user;' | gitea2hashcat.py""")
|
||||||
|
parser.add_argument('hashes', nargs='*', help='SALT+HASH strings to convert')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# ... (rest of the main function remains the same)
|
||||||
|
print("[+] Run the output hashes through hashcat mode 10900 (PBKDF2-HMAC-SHA256)")
|
||||||
|
print()
|
||||||
|
|
||||||
|
if args.hashes:
|
||||||
|
# Process command-line arguments
|
||||||
|
for hash_string in args.hashes:
|
||||||
|
converted_hash = convert_hash(hash_string)
|
||||||
|
if converted_hash:
|
||||||
|
print(converted_hash)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Process input from stdin
|
||||||
|
for line in sys.stdin:
|
||||||
|
hash_string = line.strip() # Remove leading/trailing whitespace
|
||||||
|
converted_hash = convert_hash(hash_string)
|
||||||
|
if converted_hash:
|
||||||
|
print(converted_hash)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user