Files
XSStrike/core/fuzzer.py

54 lines
2.1 KiB
Python
Raw Permalink Normal View History

2018-10-27 18:58:52 +05:30
import copy
from random import randint
from time import sleep
from urllib.parse import unquote
from core.colors import end, red, green, yellow
from core.config import fuzzes, xsschecker
from core.requester import requester
2018-11-22 13:43:25 +05:30
from core.utils import replaceValue, counter
from core.log import setup_logger
logger = setup_logger(__name__)
2018-10-27 18:58:52 +05:30
2018-11-16 21:13:45 +05:30
def fuzzer(url, params, headers, GET, delay, timeout, WAF, encoding):
2018-10-27 18:58:52 +05:30
for fuzz in fuzzes:
if delay == 0:
delay = 0
2018-10-27 18:58:52 +05:30
t = delay + randint(delay, delay * 2) + counter(fuzz)
sleep(t)
try:
if encoding:
fuzz = encoding(unquote(fuzz))
2018-11-18 22:46:31 +01:00
data = replaceValue(params, xsschecker, fuzz, copy.deepcopy)
response = requester(url, data, headers, GET, delay/2, timeout)
2018-10-27 18:58:52 +05:30
except:
logger.error('WAF is dropping suspicious requests.')
2018-10-27 18:58:52 +05:30
if delay == 0:
logger.info('Delay has been increased to %s6%s seconds.' % (green, end))
2018-10-27 18:58:52 +05:30
delay += 6
limit = (delay + 1) * 50
timer = -1
while timer < limit:
logger.info('\rFuzzing will continue after %s%i%s seconds.\t\t\r' % (green, limit, end))
2018-10-27 18:58:52 +05:30
limit -= 1
sleep(1)
try:
2018-11-14 23:53:18 +05:30
requester(url, params, headers, GET, 0, 10)
logger.good('Pheww! Looks like sleeping for %s%i%s seconds worked!' % (
green, ((delay + 1) * 2), end))
2018-10-27 18:58:52 +05:30
except:
logger.error('\nLooks like WAF has blocked our IP Address. Sorry!')
2018-10-27 18:58:52 +05:30
break
if encoding:
fuzz = encoding(fuzz)
2018-11-16 21:13:45 +05:30
if fuzz.lower() in response.text.lower(): # if fuzz string is reflected in the response
2018-10-27 18:58:52 +05:30
result = ('%s[passed] %s' % (green, end))
2018-11-16 21:13:45 +05:30
# if the server returned an error (Maybe WAF blocked it)
elif str(response.status_code)[:1] != '2':
2018-10-27 18:58:52 +05:30
result = ('%s[blocked] %s' % (red, end))
2018-11-16 21:13:45 +05:30
else: # if the fuzz string was not reflected in the response completely
2018-10-27 18:58:52 +05:30
result = ('%s[filtered]%s' % (yellow, end))
logger.info('%s %s' % (result, fuzz))