forked from p15670423/monkey
Agent: Use threading.Event() in ExploitClassHTTPServer instead of bool
This commit is contained in:
parent
a3cc641101
commit
176177b8cb
|
@ -1,5 +1,6 @@
|
||||||
import http.server
|
import http.server
|
||||||
import logging
|
import logging
|
||||||
|
import threading
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -9,24 +10,16 @@ HTTP_TOO_MANY_REQUESTS_ERROR_CODE = 429
|
||||||
class HTTPHandler(http.server.BaseHTTPRequestHandler):
|
class HTTPHandler(http.server.BaseHTTPRequestHandler):
|
||||||
|
|
||||||
java_class: bytes
|
java_class: bytes
|
||||||
class_downloaded = False
|
class_downloaded: threading.Event
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def reset(cls):
|
|
||||||
cls.class_downloaded = False
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _set_class_downloaded(cls):
|
|
||||||
cls.class_downloaded = True
|
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
if HTTPHandler.class_downloaded:
|
if HTTPHandler.class_downloaded.is_set():
|
||||||
self.send_error(
|
self.send_error(
|
||||||
HTTP_TOO_MANY_REQUESTS_ERROR_CODE, "Java exploit class has already been downloaded"
|
HTTP_TOO_MANY_REQUESTS_ERROR_CODE, "Java exploit class has already been downloaded"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
HTTPHandler._set_class_downloaded()
|
HTTPHandler.class_downloaded.set()
|
||||||
logger.info("Java class servergot a GET request!")
|
logger.info("Java class servergot a GET request!")
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header("Content-type", "application/octet-stream")
|
self.send_header("Content-type", "application/octet-stream")
|
||||||
|
@ -38,16 +31,17 @@ class HTTPHandler(http.server.BaseHTTPRequestHandler):
|
||||||
class ExploitClassHTTPServer:
|
class ExploitClassHTTPServer:
|
||||||
def __init__(self, ip: str, port: int, java_class: bytes, poll_interval: float = 0.5):
|
def __init__(self, ip: str, port: int, java_class: bytes, poll_interval: float = 0.5):
|
||||||
logger.debug(f"The Java Exploit class will be served at {ip}:{port}")
|
logger.debug(f"The Java Exploit class will be served at {ip}:{port}")
|
||||||
|
self._class_downloaded = threading.Event()
|
||||||
|
|
||||||
HTTPHandler.java_class = java_class
|
HTTPHandler.java_class = java_class
|
||||||
HTTPHandler.reset()
|
HTTPHandler.class_downloaded = self._class_downloaded
|
||||||
|
|
||||||
self._server = http.server.HTTPServer((ip, port), HTTPHandler)
|
self._server = http.server.HTTPServer((ip, port), HTTPHandler)
|
||||||
self._poll_interval = poll_interval
|
self._poll_interval = poll_interval
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
logger.debug("Starting ExploitClassHTTPServer")
|
logger.debug("Starting ExploitClassHTTPServer")
|
||||||
HTTPHandler.reset()
|
self._class_downloaded.clear()
|
||||||
|
|
||||||
self._server.serve_forever(self._poll_interval)
|
self._server.serve_forever(self._poll_interval)
|
||||||
logger.debug("The Java Exploit class HTTP server has stopped")
|
logger.debug("The Java Exploit class HTTP server has stopped")
|
||||||
|
@ -57,4 +51,4 @@ class ExploitClassHTTPServer:
|
||||||
self._server.shutdown()
|
self._server.shutdown()
|
||||||
|
|
||||||
def exploit_class_downloaded(self) -> bool:
|
def exploit_class_downloaded(self) -> bool:
|
||||||
return HTTPHandler.class_downloaded
|
return self._class_downloaded.is_set()
|
||||||
|
|
Loading…
Reference in New Issue