diff options
author | Malfurious <m@lfurio.us> | 2024-01-13 09:26:09 -0500 |
---|---|---|
committer | Malfurious <m@lfurio.us> | 2024-01-13 17:22:12 -0500 |
commit | d051f6d7daa4e0c025dcb58af392cca47c6019d7 (patch) | |
tree | c10e90326ee2772ced8e9ee7d74d8c9f870cd1d9 /sploit/__main__.py | |
parent | 03e1f242f69903fcd132010228259231301b3f43 (diff) | |
download | nsploit-d051f6d7daa4e0c025dcb58af392cca47c6019d7.tar.gz nsploit-d051f6d7daa4e0c025dcb58af392cca47c6019d7.zip |
Remove extra "main.py" file
The CLI logic is moved to sploit/__main__.py. This file is now the
target of:
- python -m sploit
- sploit.py (via import)
- sploit (installed executable - via pyproject.toml)
A module guard (`if __name__ == "__main__"`) is added to allow the
application to run when this file is invoked directly. And the
entrypoint symlink is no longer necessary.
Signed-off-by: Malfurious <m@lfurio.us>
Diffstat (limited to 'sploit/__main__.py')
-rw-r--r--[l---------] | sploit/__main__.py | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/sploit/__main__.py b/sploit/__main__.py index 98537fc..5b694a2 120000..100644 --- a/sploit/__main__.py +++ b/sploit/__main__.py @@ -1 +1,69 @@ -../sploit.py
\ No newline at end of file +from argparse import ArgumentParser, REMAINDER +import gc +from os.path import isdir +import tempfile +import traceback + +from sploit.comm.comm import * +from sploit.util.log import * +from sploit import __version__ + +def print_banner(color, line1=__version__, line2='', line3=''): + ilog() + ilog(' ░▒█▀▀▀█░▒█▀▀█░▒█░░░░▒█▀▀▀█░▀█▀░▀▀█▀▀ ', end='', color=ALT) + ilog(line1, color=ALT) + ilog(' ░░▀▀▀▄▄░▒█▄▄█░▒█░░░░▒█░░▒█░▒█░░░▒█░░ ', end='', color=color) + ilog(line2, color=ALT) + ilog(' ░▒█▄▄▄█░▒█░░░░▒█▄▄█░▒█▄▄▄█░▄█▄░░▒█░░ ', end='', color=ALT) + ilog(line3, color=ALT) + ilog() + +def main(): + parser = ArgumentParser(description='Execute Sploit script against target') + parser.add_argument('script', help='Exploit script to run') + parser.add_argument('target', nargs=REMAINDER, help='Target cmdline or pipes directory') + args = parser.parse_args() + + if len(args.target) == 0: + with tempfile.TemporaryDirectory() as tmpdir: + pipe(args.script, tmpdir) + elif len(args.target) == 1 and isdir(args.target[0]): + pipe(args.script, args.target[0]) + else: + target(args.script, args.target) + +def pipe(script, tmpdir): + print_banner(ERROR, line3='Pipe Mode') + while True: + try: + p = Pipes(tmpdir) + except KeyboardInterrupt: + break + runscript(script, Comm(p)) + del p + +def target(script, target): + print_banner(STATUS, line3='Subprocess Mode') + runscript(script, Comm(Process(target))) + +def runscript(script, comm): + try: + ilog("Running Script...") + code = compile(open(script).read(), script, 'exec') + exec(code, {'io': comm, 'print': elog}) + ilog("Script Finished!") + return + except KeyboardInterrupt: + pass + except: + ilog(traceback.format_exc(), end='', color=ERROR) + finally: + comm.shutdown() + comm.readall() + gc.collect() + + ilog("Script Ended Early!", color=WARNING) + + +if __name__ == "__main__": + main() |