-
-
Notifications
You must be signed in to change notification settings - Fork 29
/
cypherhound.py
90 lines (81 loc) · 6.28 KB
/
cypherhound.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/python3
# Author: Dylan Evans|fin3ss3g0d
import argparse
import terminal
import readline
import sys
import signal
import log
import json
import atexit
import os
def signal_handler(sig, frame):
log.log_error("Exit program with 'q', 'quit', 'exit', or 'stop'")
print(": ", end="")
banner = """:::::::------::-----::::-------::---------::-----------------=+++*++=++***++===+**######*++++**#####*****+===+===-----=+
:::::::------::------::::-------:-------::::-----------------===++++++****++===+**#%%%%##***+**#######**++==++++==----=+
::::::-------::------::::-------:------::::::---:::::::...:::-==++*++**++*++===+*##%%%%%##*+++**##**#***++==+++++=---==+
:::::--------::------:::::------::---::::::::::::::--==+*###%%%%#*+=+++++++====+**###%###**+++******###**+===+++==---=++
:::::--===---::-------::::------:::-::::::.:-=+***#%@@@%@@@%%@@@@@@*==+++++====+**######*++++**########**+===+++==--==++
::::---===---::--------:::------::::::::.:+#%%%%%%@@@%#+=+*###%%%%%@%+=========**######*+++++*##########*+==++++=====+++
::::---===----:---------:-------:::::::-=######*++**#*==--++##%%%#%%@@#+--====+**#%%%%##*++++*######%###*+++++++==--==++
::::--====---::-----------------::::::-+*=****+=-:=+**+=-====+#%%###%%%@%+=--=+*##%%%%##*++++**####%%%##*+++++++==---=+*
-:-----===---::------------------::::::-:+#*=:..-++=+**+==-::-*####%%%##%@%+=-=**#%%%%#**++=++**##%%%%%#**====+===---=+*
------====----:--------------=---:::::.-**=-. :=**+====-::-:--=*%%%@%###%@%*=+*######*++==++*###%%%%##*++=======---=+*
-----======----------------===----:::-*%#=:. .=*+==-::::=:-**####%#####%%%*+*###**++===++*####%%##**++=======--==+#
-----=======----------------==---::-=%%*-::. ..:-:. -+=-:.:.--:*###%%%%#*########*****+++===++*###%###**+==========-==*#
-----========-------------------=+**++++=::::.::... -+:...:-:*%####%%@%++******###*+*+++===++**###***++===========-==*#
=============---------------=+**++++=====---=-:::::-::+:...::=#####*+*#@%+=+=+*++*##*+++++++++++*****+===--===========+*
=============-------------+**+=::-======-=====---:--::=. . .:-*****++++*%#*+=++++*+##*++++++++++****++===--==========++*
====++=======-----------+*+-::::::--=========+++===---=. ..:+++++*****##++*++*+++*###++++++++++****++===============++
==+++++++===-----------=**+==:....:-====----======++-:=. ..-:-+++++++****+=*****+++=+*##+===++=++****+++================
==+++++++=============-. .:---....::------::-+====++=-=: :-=:==+++++++***=-+****+===++*%%#+====+++++*******+++++====+++=
=======================- .... ::::----===+++++=--=:.-=:-=-=====+++**=-++*#*+==+=+**#%%#*+++++***######**+++======++
========================- ..... ....:::--:-==-==-===-:=..=-.-=-======++-+==*****======+*+*##%%#***##%%%%%##*++++====+++=
====================----=- . ....:.:.::::----=====-:::.-- :-=----==-==:=++#**+==---====+*++++******#%%##********+++*+++
================---------= ..............::---====-:::.:- .:-===+===--=--=+##++=:-=:-:-::--:-========*###*==+*#%%%####*+
============--------------. ............:-----===-::...: .::--=======--=--+++=-::::.::::::::::::=====+++*+===+++*+==+=--
=========------------------ .........::----:-----:...: ..:----=---::.:--:--::......::...:::::::-----==---==--: . .:--==
-==-------------------=====-. ...::::::-:::.:-===-.::-. .:---==---:::-=:.:.............:::::::::--==--:::---. . .---=+-
===------------==--==========:. ....::.:...:-::::---. .:----:::::---+:.::-::::::..:::::::.:::---:::..:---. .::-.--.
**+++++++++++++++++++***+++++++=-:.. ....... .....:--=-: .:---::::::----:--=---::::::::::::::.::::....::--:. ::--=:.:
##**#######********#***********#####+ ... ...:-:--==- .-=--:::::::::::--==+---:-=+=--:--:.::::....:::-: .::-:. :-
######%%%%%#####################%%%%@: .:... .::::--=:.:---:::.::::. ::--+=======+==++=-::-::::..:::::: .:-::. :--
*######%%%%####################%%%%%@#. . .:.::--: :-----::::::. :=--==++=---=+=++=+===--::..:--::. ..::. .::-
#######%########################%%%%%%%+=---:..:..:::-..:-:----:::. .:-:---=------++====++===-:..:::: .:. .:::
########################%%############%%%%@%:.::::::::.::-==+-:. .:::---=---==--===--======+-::::. .. .:::
***************###########################%: .:....:-:::-=-:. ...---=++=============+=++==..::......... ....
++++*****+++++++*************************##+.::... ::::::. .::-==+*+++==+=+===+=*++*=::.:::....:..... .. ...
+++++********++++++++++**+++********+++++**#=.... .-=-::::.. .:-==**+++++**+++**+++=-::---::---:::.:... .
++++*****##**************+++++******++++++++*+-:.:-*##*+-::...... .:=++++====-==---===---::=++++++==----::::. .
++******************++***++++++++++*+++++++*+***+**++++**==-::....:=++==----....:::::-====++***+*++==---:::.... .
++*+++++++++++++++++++++++++++==+++++++++*****+++++++++*******+..:-====-:::.:--::-==++++********++=====----........
=++===========+++++=====+++++++=++++++++++++++++++++++*********=:::-:..:::-------=++****#######**++=-====--.:. .. .
=========++++*****+++++==+++++++========+++++++++++++++********+-::-. .::--++===++******#######**++=-=--==-:.. ..
cypherhound (Author: Dylan Evans|fin3ss3g0d)
"""
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Python terminal app that runs various Neo4j cyphers on BloodHound data sets.")
parser.add_argument("-c", "--config", help="Config file", required=True)
args = parser.parse_args()
try:
with open(args.config) as f:
config = json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
log.log_error(e)
sys.exit(1)
try:
print(f'{log.default}{banner}{log.reset}')
readline.set_completer(terminal.Completer(terminal.OPTIONS).complete)
readline.parse_and_bind('tab: complete')
histfile = ('.history')
if not os.path.exists(histfile):
open(histfile, 'w').close() # Creates an empty file if it doesn't exist
readline.read_history_file(histfile)
atexit.register(readline.write_history_file, histfile)
signal.signal(signal.SIGINT, signal_handler)
term = terminal.Terminal(config["user"], config["pwd"], config["database"])
term.input_loop()
except Exception as e:
log.log_error(e)
sys.exit(1)