Files
XSStrike/core/arjun.py
Somdev Sangwan bff5e54b4c stable release
2018-11-10 17:33:48 +05:30

33 lines
1.6 KiB
Python

import re
import concurrent.futures
from core.requester import requester
from core.colors import good, info, green, end
from core.config import blindParams, xsschecker, threadCount
def checky(param, paraNames, url, headers, GET, delay):
if param not in paraNames:
response = requester(url, {param : xsschecker}, headers, GET, delay, timeout).text
if '\'%s\'' % xsschecker in response or '"%s"' % xsschecker in response or ' %s ' % xsschecker in response:
paraNames[param] = ''
print('%s Valid parameter found : %s%s%s' % (good, green, param, end))
def arjun(url, GET, headers, delay):
paraNames = {}
response = requester(url, {}, headers, GET, delay).text
matches = re.findall(r'<input.*?name=\'(.*?)\'.*?>|<input.*?name="(.*?)".*?>', response)
for match in matches:
try:
foundParam = match[1]
except UnicodeDecodeError:
continue
print('%s Heuristics found a potentially valid parameter: %s%s%s. Priortizing it.' % (good, green, foundParam, end))
if foundParam in blindParams:
blindParams.remove(foundParam)
blindParams.insert(0, foundParam)
threadpool = concurrent.futures.ThreadPoolExecutor(max_workers=threadCount)
futures = (threadpool.submit(checky, param, paraNames, url, headers, GET, delay) for param in blindParams)
for i, _ in enumerate(concurrent.futures.as_completed(futures)):
if i + 1 == len(blindParams) or (i + 1) % threadCount == 0:
print('%s Progress: %i/%i' % (info, i + 1, len(blindParams)), end='\r')
return paraNames