Files
XSStrike/core/fuzzer.py

57 lines
2.2 KiB
Python
Raw 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, bad, good, info
from core.config import fuzzes, xsschecker
from core.requester import requester
from core.utils import replacer
2018-10-27 18:58:52 +05:30
def counter(string):
special = '\'"=/:*&)(}{][><'
count = 0
for char in list(string):
if char in special:
count += 1
return count
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)
paramsCopy = copy.deepcopy(params)
try:
if encoding:
fuzz = encoding(unquote(fuzz))
data = replacer(paramsCopy, xsschecker, fuzz)
response = requester(url, data, headers, GET, delay/2, timeout)
2018-10-27 18:58:52 +05:30
except:
print ('\n%s WAF is dropping suspicious requests.' % bad)
if delay == 0:
print ('%s Delay has been increased to %s6%s seconds.' % (info, green, end))
delay += 6
limit = (delay + 1) * 50
timer = -1
while timer < limit:
print ('\r%s Fuzzing will continue after %s%i%s seconds.\t\t' % (info, green, limit, end), end='\r')
limit -= 1
sleep(1)
try:
2018-11-14 23:53:18 +05:30
requester(url, params, headers, GET, 0, 10)
2018-10-27 18:58:52 +05:30
print ('\n%s Pheww! Looks like sleeping for %s%i%s seconds worked!' % (good, green, (delay + 1) * 2), end)
except:
print ('\n%s Looks like WAF has blocked our IP Address. Sorry!' % bad)
break
if encoding:
fuzz = encoding(fuzz)
2018-10-27 18:58:52 +05:30
if fuzz.lower() in response.text.lower(): # if fuzz string is reflected in the response
result = ('%s[passed] %s' % (green, end))
elif str(response.status_code)[:1] != '2': # if the server returned an error (Maybe WAF blocked it)
result = ('%s[blocked] %s' % (red, end))
else: # if the fuzz string was not reflected in the response completely
result = ('%s[filtered]%s' % (yellow, end))
2018-10-27 20:00:29 +05:30
print ('%s %s' % (result, fuzz))