From 0f66017f6fbfe710ba7dbefde45124806449b5a5 Mon Sep 17 00:00:00 2001 From: Shellrent Srl <33652386+shellrent@users.noreply.github.com> Date: Tue, 14 Nov 2017 09:38:24 +0100 Subject: [PATCH 1/2] Update Readme.md with edits to the code --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index 6755779..c7a7e1f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,54 @@ +## Edits + +Added support for Tokens in Cookies in `websocketproxy.py` on `get_target` + + +```python + def get_target(self, target_plugin, path): + """ + Parses the path, extracts a token, and looks up a target + for that token using the token plugin. Sets + target_host and target_port if successful + """ + # The files in targets contain the lines + # in the form of token: host:port + + token = '' + + # Extract the token parameter from cookie + if 'Cookie' in self.headers: + cookiestr = self.headers['Cookie'] + cookiestr.replace( 'Cookie: ', '', 1 ) + cookies = cookiestr.split('; ') + + for cookie in cookies: + cookie = cookie.split('=') + if 'token' in cookie[0]: + token = cookie[1] + break + + # Extract the token parameter from url + if token == '': + args = parse_qs(urlparse(path)[4]) # 4 is the query from url + + if not 'token' in args or not len(args['token']): + raise self.server.EClose("Token not present") + + token = args['token'][0].rstrip('\n') + + if token == '': + raise self.server.EClose( "Empty Token defined" ) + + # Search for the token + result_pair = target_plugin.lookup( token ) + + if result_pair is not None: + return result_pair + else: + raise self.server.EClose( "Token '%s' not found" % token ) +``` + + ## websockify: WebSockets support for any application/server websockify was formerly named wsproxy and was part of the From 4ac567670e533fa2d9b68ebcc87cbc16081aa6d8 Mon Sep 17 00:00:00 2001 From: Tobia Zanarella Date: Tue, 14 Nov 2017 09:58:02 +0100 Subject: [PATCH 2/2] Updated websocketproxy to support Cookies --- websockify/websocketproxy.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) mode change 100644 => 100755 websockify/websocketproxy.py diff --git a/websockify/websocketproxy.py b/websockify/websocketproxy.py old mode 100644 new mode 100755 index 6aa76e6..7d5e66a --- a/websockify/websocketproxy.py +++ b/websockify/websocketproxy.py @@ -140,20 +140,39 @@ Traffic Legend: # The files in targets contain the lines # in the form of token: host:port + token = '' + + # Extract the token parameter from cookie + if 'Cookie' in self.headers: + cookiestr = self.headers['Cookie'] + cookiestr.replace( 'Cookie: ', '', 1 ) + cookies = cookiestr.split('; ') + + for cookie in cookies: + cookie = cookie.split('=') + if 'token' in cookie[0]: + token = cookie[1] + break + # Extract the token parameter from url - args = parse_qs(urlparse(path)[4]) # 4 is the query from url + if token == '': + args = parse_qs(urlparse(path)[4]) # 4 is the query from url - if not 'token' in args or not len(args['token']): - raise self.server.EClose("Token not present") + if not 'token' in args or not len(args['token']): + raise self.server.EClose("Token not present") - token = args['token'][0].rstrip('\n') + token = args['token'][0].rstrip('\n') - result_pair = target_plugin.lookup(token) + if token == '': + raise self.server.EClose( "Empty Token defined" ) + + # Search for the token + result_pair = target_plugin.lookup( token ) if result_pair is not None: return result_pair else: - raise self.server.EClose("Token '%s' not found" % token) + raise self.server.EClose( "Token '%s' not found" % token ) def do_proxy(self, target): """