def applyConfig(self): try: print("Connecting to '%s', index '%s'" % (self.confESHost, self.confESIndex)) res = connections.create_connection(hosts=[self.confESHost]) idx = Index(self.confESIndex) idx.doc_type(DocHTTPRequestResponse) DocHTTPRequestResponse.init() try: idx.create() except: pass except Exception as e: JOptionPane.showMessageDialog(self.panel, "<html><p style='width: 300px'>Error while initializing ElasticSearch: %s</p></html>" % (str(e)), "Error", JOptionPane.ERROR_MESSAGE)
def applyConfig(self): try: print("Connecting to '%s', index '%s'" % (self.confESHost, self.confESIndex)) res = connections.create_connection(hosts=[self.confESHost]) idx = Index(self.confESIndex) idx.doc_type(DocHTTPRequestResponse) DocHTTPRequestResponse.init() try: idx.create() except: pass except Exception as e: JOptionPane.showMessageDialog( self.panel, "<html><p style='width: 300px'>Error while initializing ElasticSearch: %s</p></html>" % (str(e)), "Error", JOptionPane.ERROR_MESSAGE)
def mitm_request(self, data): # Initialize ES connection and index res = connections.create_connection(hosts=[args.elasticsearch]) idx = Index(args.index) idx.doc_type(DocHTTPRequestResponse) try: DocHTTPRequestResponse.init() idx.create() except: pass r = HTTPRequest(data) # determine url if self.is_connect: scheme = "https" else: scheme = "http" url = scheme + "://" + self.hostname if scheme == "http" and int( self.port) != 80 or scheme == "https" and int( self.port) != 443: url += ":" + self.port url += self.path if args.verbose: print(url) self.doc = DocHTTPRequestResponse(host=self.hostname, port=int(self.port), protocol=scheme) self.doc.meta.index = args.index self.doc.request.url = url self.doc.request.requestline = r.requestline self.doc.request.method = r.command self.doc.host = self.hostname self.doc.port = int(self.port) self.doc.protocol = scheme return data
def mitm_request(self, data): # Initialize ES connection and index res = connections.create_connection(hosts=[args.elasticsearch]) idx = Index(args.index) idx.doc_type(DocHTTPRequestResponse) try: DocHTTPRequestResponse.init() idx.create() except: pass r = HTTPRequest(data) # determine url if self.is_connect: scheme = "https" else: scheme = "http" url = scheme + "://" + self.hostname if scheme == "http" and int(self.port) != 80 or scheme == "https" and int(self.port) != 443: url += ":" + str(self.port) url += self.path if args.verbose: print(url) self.doc = DocHTTPRequestResponse(host=self.hostname, port=int(self.port), protocol=scheme) self.doc.meta.index = args.index self.doc.request.url = url self.doc.request.requestline = r.requestline self.doc.request.method = r.command self.doc.host = self.hostname self.doc.port = int(self.port) self.doc.protocol = scheme return data
argparser = argparse.ArgumentParser(description="Intercepting HTTP(S) proxy that forwards data into ElasticSearch WASE datastructure") argparser.add_argument("--listenaddr", "-l", default="localhost", help="IP/hostname the server binds to (default: %(default)s)") argparser.add_argument("--port", "-p", type=int, default=8080, help="Port the proxy server listens to (default: %(default)s)") argparser.add_argument("--elasticsearch", "-e", default="localhost", help="ElasticSearch instance (default: %(default)s)") argparser.add_argument("--index", "-i", default="wase-proxy", help="ElasticSearch index (default: %(default)s)") argparser.add_argument("--no-response-body", "-n", action="store_true", help="Don't store response body in ElasticSearch") argparser.add_argument("--charset", "-c", default="utf-8", help="Character set used for decoding of bytes responses into string passed to ES (default: %(default)s)") argparser.add_argument("--encodingerrors", "-E", default="ignore", choices=["ignore", "replace", "strict"], help="Behavior when encoding errors occur, must be ignore, replace or strict (default: %(default)s)") argparser.add_argument("--verbose", "-v", action="store_true", help="Be verbose") args = argparser.parse_args() if args.no_response_body: storeResponseBody = False # Initialize ES connection and index res = connections.create_connection(hosts=[args.elasticsearch]) idx = Index(args.index) idx.doc_type(DocHTTPRequestResponse) try: DocHTTPRequestResponse.init() idx.create() except: pass # run proxy proxy = AsyncMitmProxy(RequestHandlerClass=WASEProxyHandler, server_address=(args.listenaddr, args.port)) try: proxy.serve_forever() except KeyboardInterrupt: proxy.server_close()
from doc_HttpRequestResponse import DocHTTPRequestResponse from elasticsearch_dsl.connections import connections from elasticsearch_dsl import Index from datetime import datetime connections.create_connection(hosts=["localhost"]) idx = Index("test") idx.doc_type(DocHTTPRequestResponse) #idx.create() DocHTTPRequestResponse.init() d = DocHTTPRequestResponse( protocol="http", host="foobar.com", port=80 ) d.add_request_header("User-Agent: foobar") d.add_request_parameter("url", "id", "123") d.add_request_parameter("url", "doc", "234") d.add_response_header("X-Content-Type-Options: nosniff") d.add_response_header("X-Frame-Options: DENY") d.add_response_header("X-XSS-Protection: 1; mode=block") d.add_response_cookie("SESSIONID", "foobar1234") d.add_response_cookie("foo", "bar", "foobar.com", "/foo", datetime.now()) d.response.body = "This is a test!" d.request.method = "GET" d.save() d = DocHTTPRequestResponse(