Files
XSStrike/modes/bruteforcer.py

40 lines
1.5 KiB
Python
Raw Normal View History

2018-11-17 22:43:09 +05:30
import copy
from urllib.parse import urlparse, unquote
from core.colors import good, green, end
2018-11-17 22:43:09 +05:30
from core.requester import requester
from core.utils import getUrl, getParams
from core.log import setup_logger
logger = setup_logger(__name__)
2018-11-17 22:43:09 +05:30
2019-01-25 12:42:39 +02:00
def bruteforcer(target, paramData, payloadList, encoding, headers, delay, timeout):
2018-11-17 22:43:09 +05:30
GET, POST = (False, True) if paramData else (True, False)
host = urlparse(target).netloc # Extracts host out of the url
logger.debug('Parsed host to bruteforce: {}'.format(host))
2018-11-17 22:43:09 +05:30
url = getUrl(target, GET)
logger.debug('Parsed url to bruteforce: {}'.format(url))
2018-11-17 22:43:09 +05:30
params = getParams(target, paramData, GET)
logger.debug_json('Bruteforcer 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()
for paramName in params.keys():
progress = 1
paramsCopy = copy.deepcopy(params)
for payload in payloadList:
logger.run('Bruteforcing %s[%s%s%s]%s: %i/%i\r' %
(green, end, paramName, green, end, progress, len(payloadList)))
2018-11-17 22:43:09 +05:30
if encoding:
payload = encoding(unquote(payload))
paramsCopy[paramName] = payload
response = requester(url, paramsCopy, headers,
GET, delay, timeout).text
if encoding:
payload = encoding(payload)
if payload in response:
logger.info('%s %s' % (good, payload))
2018-11-17 22:43:09 +05:30
progress += 1
logger.no_format('')