Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
message += "{0} {1}\n".format(i, desensitization(ip) if conf.ppt else ip)
data_to_stdout(message)
while True:
choose = None
choose = input('Choose>: ').strip()
if not choose:
continue
try:
if choose.isdigit():
choose = int(choose)
conf.connect_back_host = kb.data.local_ips[choose]
data_to_stdout("you choose {0}\n".format(
desensitization(conf.connect_back_host) if conf.ppt else conf.connect_back_host))
break
except Exception:
data_to_stdout("wrong number, choose again\n")
def get_client(cmd):
try:
target = cmd.replace("select ", "")
target = int(target)
client = kb.data.clients[target] # Connect to the selected clients
data_to_stdout("Now Connected: {0}\n".format(
desensitization(client.address[0] if conf.ppt else client.address[0])))
return client
except Exception:
data_to_stdout("Invalid Client\n")
return None
def send_shell_commands_for_console(client):
module_prompt_default_template = "\001\033[4m\002SHELL\001\033[0m\002 (\001\033[91m\002{hostname}\001\033[0m\002) > "
while True:
cmd = None
try:
address = client.address[0]
cmd = input(module_prompt_default_template.format(hostname=address))
if not cmd:
continue
elif cmd.lower() == "clear":
clear_history()
data_to_stdout("[i] history cleared\n")
elif cmd.lower() in ("x", "q", "exit", "quit", "bye"):
break
client.conn.send(str.encode(cmd + '\n'))
resp = poll_cmd_execute(client)
data_to_stdout(resp)
except Exception as ex:
logger.error(str(ex))
data_to_stdout("Connection Lost\n")
break
return True
elif cmd.lower() == "clear":
clear_history()
data_to_stdout("[i] history cleared\n")
save_history(AUTOCOMPLETE_TYPE.POCSUITE)
elif cmd.lower() in ("x", "q", "exit", "quit"):
raise PocsuiteShellQuitException
elif cmd == "list":
list_clients()
elif "select" in cmd:
client = get_client(cmd)
if client is not None:
send_shell_commands(client)
else:
save_history(AUTOCOMPLETE_TYPE.POCSUITE)
load_history(AUTOCOMPLETE_TYPE.POCSUITE)
data_to_stdout("Command Not Found... type ? for help.")
def command_list(self, *args, **kwargs):
# 展现所有可用的poc
search_result = []
tb = prettytable.PrettyTable(["Index", "Path", "Name"])
index = 0
for tmp_module in self.main_modules_dirs:
found = os.path.join(paths.POCSUITE_ROOT_PATH, tmp_module + ".py")
with open(found, encoding='utf-8') as f:
code = f.read()
name = get_poc_name(code)
tb.add_row([str(index), tmp_module, name])
search_result.append(tmp_module)
index += 1
data_to_stdout("\n" + tb.get_string() + "\n")
self.last_search = search_result
def _show_options(self, *args, **kwargs):
global_options = self.current_module.global_options
module_options = self.current_module.options
payload_options = self.current_module.payload_options
tb2 = prettytable.PrettyTable(["Name", "Current settings", "Type", "Descript"])
for name, opt in global_options.items():
value = opt.value
if opt.require and value == "":
value = colored("*require*", "red")
tb2.add_row([name, value, opt.type, opt.description])
data_to_stdout("\nTarget options:\n")
data_to_stdout(tb2.get_string())
data_to_stdout("\n")
if module_options:
tb = prettytable.PrettyTable(["Name", "Current settings", "Type", "Descript"])
# add target option
for name, opt in module_options.items():
value = opt.value
if opt.require and value == "":
value = colored("*require*", "red")
tb.add_row([name, value, opt.type, opt.description])
data_to_stdout("\nModule options:\n")
data_to_stdout(tb.get_string())
data_to_stdout("\n")
# exploit payload
if payload_options:
tb3 = prettytable.PrettyTable(["Name", "Current settings", "Type", "Descript"])
p.unregister(client.conn)
else:
count = 0
ret = ''
while True:
ready = select.select([client.conn], [], [], 0.1)
if ready[0]:
ret += get_unicode(client.conn.recv(0x10000))
# ret += str(client.conn.recv(0x10000), "utf-8")
else:
if ret:
break
elif count > timeout:
ret = "execute command timeout\n"
else:
data_to_stdout('.')
time.sleep(1)
count += 1
if ret and not ret.startswith('\r'):
ret = "\r{0}".format(ret)
if ret and not ret.endswith('\n'):
ret = "{0}\n".format(ret)
return ret
if line[2:] not in CMD_PARSE_WHITELIST:
diy.add_argument(line)
args = parser.parse_args()
if not any((args.url, args.url_file, args.update_all, args.plugins, args.dork, args.dork_shodan, args.dork_fofa,
args.dork_censys, args.dork_zoomeye, args.configFile, args.show_version)):
err_msg = "missing a mandatory option (-u, --url-file, --update). "
err_msg += "Use -h for basic and -hh for advanced help\n"
parser.error(err_msg)
return args
except SystemExit:
# Protection against Windows dummy double clicking
if IS_WIN:
data_to_stdout("\nPress Enter to continue...")
input()
raise
def _show_info(self, *args, **kwargs):
fields = ["name", "VulID", "version", "author", "vulDate", "createDate", "updateDate", "references",
"appPowerLink", "appName", "appVersion", "vulType", "desc"]
msg = ""
for field in fields:
value = getattr(self.current_module, field, None)
if value:
value = str(value).strip()
# for name highlight
if field == "name":
value = colored(value, "green")
msg = msg + "%-20s %-10s\n" % (field, value)
data_to_stdout("\n")
data_to_stdout(msg)
data_to_stdout("\n")