mirror of https://gitlab.com/bashrc2/epicyon
Check for suspicious headers
parent
ba07e86fec
commit
b05968e9b7
|
@ -78,6 +78,7 @@ from httprequests import request_http
|
||||||
from httpheaders import set_headers
|
from httpheaders import set_headers
|
||||||
from httpheaders import logout_headers
|
from httpheaders import logout_headers
|
||||||
from httpheaders import logout_redirect
|
from httpheaders import logout_redirect
|
||||||
|
from httpheaders import contains_suspicious_headers
|
||||||
from httpcodes import http_200
|
from httpcodes import http_200
|
||||||
from httpcodes import http_402
|
from httpcodes import http_402
|
||||||
from httpcodes import http_403
|
from httpcodes import http_403
|
||||||
|
@ -262,6 +263,12 @@ def daemon_http_get(self) -> None:
|
||||||
http_402(self)
|
http_402(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# suspicious headers
|
||||||
|
if contains_suspicious_headers(self.headers):
|
||||||
|
print('GET HTTP suspicious headers ' + str(self.headers))
|
||||||
|
http_403(self)
|
||||||
|
return
|
||||||
|
|
||||||
if contains_invalid_chars(str(self.headers)):
|
if contains_invalid_chars(str(self.headers)):
|
||||||
print('GET HTTP headers contain invalid characters ' +
|
print('GET HTTP headers contain invalid characters ' +
|
||||||
str(self.headers))
|
str(self.headers))
|
||||||
|
|
|
@ -35,6 +35,7 @@ from httpcodes import http_402
|
||||||
from httpcodes import http_403
|
from httpcodes import http_403
|
||||||
from httpcodes import http_404
|
from httpcodes import http_404
|
||||||
from httpcodes import http_503
|
from httpcodes import http_503
|
||||||
|
from httpheaders import contains_suspicious_headers
|
||||||
from httpheaders import update_headers_catalog
|
from httpheaders import update_headers_catalog
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from daemon_utils import get_user_agent
|
from daemon_utils import get_user_agent
|
||||||
|
@ -99,6 +100,12 @@ def daemon_http_post(self) -> None:
|
||||||
http_402(self)
|
http_402(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# suspicious headers
|
||||||
|
if contains_suspicious_headers(self.headers):
|
||||||
|
print('POST HTTP suspicious headers ' + str(self.headers))
|
||||||
|
http_403(self)
|
||||||
|
return
|
||||||
|
|
||||||
calling_domain = self.server.domain_full
|
calling_domain = self.server.domain_full
|
||||||
if self.headers.get('Host'):
|
if self.headers.get('Host'):
|
||||||
calling_domain = decoded_host(self.headers['Host'])
|
calling_domain = decoded_host(self.headers['Host'])
|
||||||
|
|
|
@ -219,10 +219,23 @@ def update_headers_catalog(base_dir: str, headers_catalog: {},
|
||||||
for fieldname, fieldvalue in headers.items():
|
for fieldname, fieldvalue in headers.items():
|
||||||
if fieldname in headers_catalog:
|
if fieldname in headers_catalog:
|
||||||
continue
|
continue
|
||||||
if fieldname == 'cookie' or fieldname == 'Cookie':
|
if fieldname in ('cookie', 'Cookie'):
|
||||||
fieldvalue = ""
|
fieldvalue = ""
|
||||||
headers_catalog[fieldname] = fieldvalue
|
headers_catalog[fieldname] = fieldvalue
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
if changed:
|
if changed:
|
||||||
save_json(headers_catalog, headers_catalog_fieldname)
|
save_json(headers_catalog, headers_catalog_fieldname)
|
||||||
|
|
||||||
|
|
||||||
|
def contains_suspicious_headers(headers: {}) -> bool:
|
||||||
|
"""returns true if the given headers contain something suspicious
|
||||||
|
"""
|
||||||
|
if 'Shellshock' in headers or \
|
||||||
|
'shellshock' in headers or \
|
||||||
|
'think-lang' in headers or \
|
||||||
|
'Think-lang' in headers:
|
||||||
|
return True
|
||||||
|
if '../../' in str(headers):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in New Issue