diff --git a/engine.py b/engine.py index 582bc61..71ca84f 100644 --- a/engine.py +++ b/engine.py @@ -18,6 +18,8 @@ from scapy.utils import wrpcap from scapy.config import conf from scapy.all import send, Raw +from library import LIBRARY + socket.setdefaulttimeout(1) import actions.packet @@ -457,6 +459,7 @@ def get_args(): parser.add_argument('--server-port', type=int, action='store', required=True) parser.add_argument('--environment-id', action='store', help="ID of the current strategy under test. If not provided, one will be generated.") parser.add_argument('--strategy', action='store', help="Strategy to deploy") + parser.add_argument('--strategy-index', action='store', help="Strategy to deploy, specified by index in the library") parser.add_argument('--output-directory', default="trials", action='store', help="Where to output logs, captures, and results. Defaults to trials/.") parser.add_argument('--log', action='store', default="debug", choices=("debug", "info", "warning", "critical", "error"), @@ -471,16 +474,23 @@ def main(args): Kicks off the engine with the given arguments. """ try: + if args["strategy"]: + strategy = args["strategy"] + elif args["strategy-index"]: + strategy = LIBRARY[int(args["strategy-index"])][0] + else: + # Default to first strategy + strategy = LIBRARY[0][0] if WINDOWS: eng = WindowsEngine(args["server_port"], - args["strategy"], + strategy, environment_id=args.get("environment_id"), output_directory = args.get("output_directory"), log_level=args["log"]) eng.initialize_divert() else: eng = LinuxEngine(args["server_port"], - args["strategy"], + strategy, environment_id=args.get("environment_id"), output_directory = args.get("output_directory"), log_level=args["log"]) diff --git a/library.py b/library.py new file mode 100644 index 0000000..f4dab66 --- /dev/null +++ b/library.py @@ -0,0 +1,26 @@ +LIBRARY = [ + ("[TCP:flags:PA]-duplicate(tamper{TCP:dataofs:replace:10}(tamper{TCP:chksum:corrupt},),)-|", 98%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:dataofs:replace:10}(tamper{IP:ttl:replace:10},),)-|", 98%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:dataofs:replace:10}(tamper{TCP:ack:corrupt},),)-|", 94%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:options-wscale:corrupt}(tamper{TCP:dataofs:replace:8},),)-|", 98%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:load:corrupt}(tamper{TCP:chksum:corrupt},),)-|", 80%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:load:corrupt}(tamper{IP:ttl:replace:8},),)-|", 98%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:load:corrupt}(tamper{TCP:ack:corrupt},),)-|", 87%, 100%, 0%), + ("[TCP:flags:S]-duplicate(,tamper{TCP:load:corrupt})-|", 3%, 100%, 0%), + ("[TCP:flags:PA]-duplicate(tamper{IP:len:replace:64},)-|", 3%, 0%, 100%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:R}(tamper{TCP:chksum:corrupt},))-|", 95%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:R}(tamper{IP:ttl:replace:10},))-|", 87%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:options-md5header:corrupt}(tamper{TCP:flags:replace:R},))-|", 86%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:RA}(tamper{TCP:chksum:corrupt},))-|", 80%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:RA}(tamper{IP:ttl:replace:10},))-|", 94%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:options-md5header:corrupt}(tamper{TCP:flags:replace:R},))-|", 94%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:FRAPUEN}(tamper{TCP:chksum:corrupt},))-|", 89%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:FREACN}(tamper{IP:ttl:replace:10},))-|", 96%, 0%, 0%), + ("[TCP:flags:A]-duplicate(,tamper{TCP:flags:replace:FRAPUN}(tamper{TCP:options-md5header:corrupt},))-|", 94%, 0%, 0%), + ("[TCP:flags:PA]-fragment{tcp:8:False}-| [TCP:flags:A]-tamper{TCP:seq:corrupt}-|", 94%, 100%, 100%), + ("[TCP:flags:PA]-fragment{tcp:8:True}(,fragment{tcp:4:True})-|", 98%, 100%, 100%), + ("[TCP:flags:PA]-fragment{tcp:-1:True}-|", 3%, 100%, 100%), + ("[TCP:flags:PA]-duplicate(tamper{TCP:flags:replace:F}(tamper{IP:len:replace:78},),)-|", 53%, 0%, 100%), + ("[TCP:flags:S]-duplicate(tamper{TCP:flags:replace:SA},)-|", 3%, 100%, 0%), + ("[TCP:flags:PA]-tamper{TCP:options-uto:corrupt}-|", 3%, 0%, 100%) +] \ No newline at end of file