Files
XSStrike/core/jsContexter.py

35 lines
1.3 KiB
Python
Raw Permalink Normal View History

2018-10-27 18:58:52 +05:30
import re
2018-10-27 18:58:52 +05:30
from core.config import xsschecker
from core.utils import stripper
2018-10-27 18:58:52 +05:30
2018-11-16 21:13:45 +05:30
2018-10-27 18:58:52 +05:30
def jsContexter(script):
broken = script.split(xsschecker)
pre = broken[0]
2018-11-16 21:13:45 +05:30
# remove everything that is between {..}, "..." or '...'
pre = re.sub(r'(?s)\{.*?\}|\(.*?\)|".*?"|\'.*?\'', '', pre)
2018-10-28 23:56:12 +05:30
breaker = ''
2018-10-27 18:58:52 +05:30
num = 0
2018-11-16 21:13:45 +05:30
for char in pre: # iterate over the remaining characters
2018-10-27 18:58:52 +05:30
if char == '{':
2018-10-28 23:56:12 +05:30
breaker += '}'
2018-10-27 18:58:52 +05:30
elif char == '(':
2018-11-16 21:13:45 +05:30
breaker += ';)' # yes, it should be ); but we will invert the whole thing later
2018-10-27 18:58:52 +05:30
elif char == '[':
2018-10-28 23:56:12 +05:30
breaker += ']'
2018-10-27 18:58:52 +05:30
elif char == '/':
try:
if pre[num + 1] == '*':
2018-10-28 23:56:12 +05:30
breaker += '/*'
2018-10-27 18:58:52 +05:30
except IndexError:
pass
2018-11-16 21:13:45 +05:30
elif char == '}': # we encountered a } so we will strip off "our }" because this one does the job
2018-10-28 23:56:12 +05:30
breaker = stripper(breaker, '}')
2018-11-16 21:13:45 +05:30
elif char == ')': # we encountered a ) so we will strip off "our }" because this one does the job
2018-10-28 23:56:12 +05:30
breaker = stripper(breaker, ')')
2018-11-16 21:13:45 +05:30
elif breaker == ']': # we encountered a ] so we will strip off "our }" because this one does the job
2018-10-28 23:56:12 +05:30
breaker = stripper(breaker, ']')
2018-10-27 18:58:52 +05:30
num += 1
2018-11-16 21:13:45 +05:30
return breaker[::-1] # invert the breaker string