Files
XSStrike/modes/singleFuzz.py

48 lines
1.7 KiB
Python
Raw Normal View History

2018-11-17 22:43:09 +05:30
import copy
from urllib.parse import urlparse
from core.colors import green, end
2018-11-17 22:43:09 +05:30
from core.config import xsschecker
from core.fuzzer import fuzzer
from core.requester import requester
from core.utils import getUrl, getParams
2018-11-17 22:43:09 +05:30
from core.wafDetector import wafDetector
from core.log import setup_logger
2018-11-17 22:43:09 +05:30
logger = setup_logger(__name__)
def singleFuzz(target, paramData, encoding, headers, delay, timeout):
2018-11-17 22:43:09 +05:30
GET, POST = (False, True) if paramData else (True, False)
# If the user hasn't supplied the root url with http(s), we will handle it
if not target.startswith('http'):
try:
response = requester('https://' + target, {},
headers, GET, delay, timeout)
target = 'https://' + target
except:
target = 'http://' + target
logger.debug('Single Fuzz target: {}'.format(target))
2018-11-17 22:43:09 +05:30
host = urlparse(target).netloc # Extracts host out of the url
logger.debug('Single fuzz host: {}'.format(host))
2018-11-17 22:43:09 +05:30
url = getUrl(target, GET)
logger.debug('Single fuzz url: {}'.format(url))
2018-11-17 22:43:09 +05:30
params = getParams(target, paramData, GET)
logger.debug_json('Single fuzz params:', params)
2018-11-17 22:43:09 +05:30
if not params:
logger.error('No parameters to test.')
2018-11-17 22:43:09 +05:30
quit()
WAF = wafDetector(
url, {list(params.keys())[0]: xsschecker}, headers, GET, delay, timeout)
if WAF:
logger.error('WAF detected: %s%s%s' % (green, WAF, end))
2018-11-17 22:43:09 +05:30
else:
logger.good('WAF Status: %sOffline%s' % (green, end))
2018-11-17 22:43:09 +05:30
for paramName in params.keys():
logger.info('Fuzzing parameter: %s' % paramName)
2018-11-17 22:43:09 +05:30
paramsCopy = copy.deepcopy(params)
paramsCopy[paramName] = xsschecker
fuzzer(url, paramsCopy, headers, GET,
delay, timeout, WAF, encoding)