bumped version and fixed typos
This commit is contained in:
68
bolt.py
68
bolt.py
@@ -1,9 +1,11 @@
|
|||||||
from core.colors import green, yellow, end, run, good, info, bad, white
|
from core.colors import green, yellow, end, run, good, info, bad, white
|
||||||
|
|
||||||
|
lightning = '\033[93;5m⚡\033[0m'
|
||||||
|
|
||||||
def banner():
|
def banner():
|
||||||
print ('''%s
|
print ('''
|
||||||
⚡ %sBOLT%s ⚡ v0.1.2-alpha
|
%s %sBOLT%s %s v0.1.3-bolt
|
||||||
%s''' % (yellow, white, yellow, end))
|
''' % (lightning, white, end, lightning))
|
||||||
|
|
||||||
banner()
|
banner()
|
||||||
|
|
||||||
@@ -27,6 +29,7 @@ import re
|
|||||||
import statistics
|
import statistics
|
||||||
|
|
||||||
import core.config
|
import core.config
|
||||||
|
from modules.erfc import erfc
|
||||||
from core.config import token
|
from core.config import token
|
||||||
from core.datanize import datanize
|
from core.datanize import datanize
|
||||||
from core.prompt import prompt
|
from core.prompt import prompt
|
||||||
@@ -36,7 +39,7 @@ from core.evaluate import evaluate
|
|||||||
from core.ranger import ranger
|
from core.ranger import ranger
|
||||||
from core.zetanize import zetanize
|
from core.zetanize import zetanize
|
||||||
from core.requester import requester
|
from core.requester import requester
|
||||||
from core.utils import extractHeaders, entropy, isProtected
|
from core.utils import extractHeaders, entropy, isProtected, monobit
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('-u', help='target url', dest='target')
|
parser.add_argument('-u', help='target url', dest='target')
|
||||||
@@ -67,14 +70,16 @@ weakTokens = []
|
|||||||
tokenDatabase = []
|
tokenDatabase = []
|
||||||
insecureForms = []
|
insecureForms = []
|
||||||
|
|
||||||
print ('%s Phase: Crawling %s[%s1/5%s]%s' % (run, green, end, green, end))
|
print (' %s Phase: Crawling %s[%s1/6%s]%s' % (lightning, green, end, green, end))
|
||||||
dataset = photon(target, headers, level, threadCount)
|
dataset = photon(target, headers, level, threadCount)
|
||||||
allForms = dataset[0]
|
allForms = dataset[0]
|
||||||
print ('\r%s Crawled %i URL(s) and found %i form(s).%-10s' % (info, dataset[1], len(allForms), ' '))
|
print ('\r%s Crawled %i URL(s) and found %i form(s).%-10s' % (info, dataset[1], len(allForms), ' '))
|
||||||
print ('%s Phase: Evaluating %s[%s2/5%s]%s' % (run, green, end, green, end))
|
print (' %s Phase: Evaluating %s[%s2/6%s]%s' % (lightning, green, end, green, end))
|
||||||
|
|
||||||
evaluate(allForms, weakTokens, tokenDatabase, allTokens, insecureForms)
|
evaluate(allForms, weakTokens, tokenDatabase, allTokens, insecureForms)
|
||||||
|
|
||||||
|
print (''.join(format(ord(x), 'b') for x in ''.join(allTokens)))
|
||||||
|
quit()
|
||||||
if weakTokens:
|
if weakTokens:
|
||||||
print ('%s Weak token(s) found' % good)
|
print ('%s Weak token(s) found' % good)
|
||||||
for weakToken in weakTokens:
|
for weakToken in weakTokens:
|
||||||
@@ -106,7 +111,7 @@ if matches:
|
|||||||
for name in matches:
|
for name in matches:
|
||||||
print (' %s>%s %s' % (yellow, end, name))
|
print (' %s>%s %s' % (yellow, end, name))
|
||||||
|
|
||||||
print ('%s Phase: Comparing %s[%s3/5%s]%s' % (run, green, end, green, end))
|
print (' %s Phase: Comparing %s[%s3/6%s]%s' % (lightning, green, end, green, end))
|
||||||
uniqueTokens = set(allTokens)
|
uniqueTokens = set(allTokens)
|
||||||
if len(uniqueTokens) < len(allTokens):
|
if len(uniqueTokens) < len(allTokens):
|
||||||
print ('%s Potential Replay Attack condition found' % good)
|
print ('%s Potential Replay Attack condition found' % good)
|
||||||
@@ -145,7 +150,7 @@ except statistics.StatisticsError:
|
|||||||
|
|
||||||
simTokens = []
|
simTokens = []
|
||||||
|
|
||||||
print ('%s Phase: Observing %s[%s4/5%s]%s' % (run, green, end, green, end))
|
print (' %s Phase: Observing %s[%s4/6%s]%s' % (lightning, green, end, green, end))
|
||||||
print ('%s 100 simultaneous requests are being made, please wait.' % info)
|
print ('%s 100 simultaneous requests are being made, please wait.' % info)
|
||||||
|
|
||||||
def extractForms(url):
|
def extractForms(url):
|
||||||
@@ -180,7 +185,7 @@ if simTokens:
|
|||||||
else:
|
else:
|
||||||
print ('%s Different tokens were issued for simultaneous requests.' % info)
|
print ('%s Different tokens were issued for simultaneous requests.' % info)
|
||||||
|
|
||||||
print ('%s Phase: Testing %s[%s5/5%s]%s' % (good, green, end, green, end))
|
print (' %s Phase: Testing %s[%s5/6%s]%s' % (lightning, green, end, green, end))
|
||||||
|
|
||||||
parsed = ''
|
parsed = ''
|
||||||
print ('%s Finding a suitable form for further testing. It may take a while.' % run)
|
print ('%s Finding a suitable form for further testing. It may take a while.' % run)
|
||||||
@@ -229,6 +234,7 @@ else:
|
|||||||
print ('%s CSRF protection isn\'t enabled for mobile browsers.' % good)
|
print ('%s CSRF protection isn\'t enabled for mobile browsers.' % good)
|
||||||
|
|
||||||
print ('%s Making a request without CSRF token parameter.' % run)
|
print ('%s Making a request without CSRF token parameter.' % run)
|
||||||
|
|
||||||
data = tweaker(origData, 'remove')
|
data = tweaker(origData, 'remove')
|
||||||
response = requester(origUrl, data, headers, origGET, 0)
|
response = requester(origUrl, data, headers, origGET, 0)
|
||||||
if response.status_code == originalCode:
|
if response.status_code == originalCode:
|
||||||
@@ -240,22 +246,10 @@ if response.status_code == originalCode:
|
|||||||
print ('%s It worked!' % good)
|
print ('%s It worked!' % good)
|
||||||
else:
|
else:
|
||||||
print ('%s It didn\'t work' % bad)
|
print ('%s It didn\'t work' % bad)
|
||||||
|
|
||||||
print ('%s Making a request without CSRF token parameter value.' % run)
|
print ('%s Making a request without CSRF token parameter value.' % run)
|
||||||
data = tweaker(origData, 'clear')
|
data = tweaker(origData, 'clear')
|
||||||
response = requester(origUrl, data, headers, origGET, 0)
|
|
||||||
if response.status_code == originalCode:
|
|
||||||
if str(originalCode)[0] in ['4', '5']:
|
|
||||||
print ('%s It didn\'t work' % bad)
|
|
||||||
else:
|
|
||||||
difference = abs(originalLength - len(response.text))
|
|
||||||
if difference <= tolerableDifference:
|
|
||||||
print ('%s It worked!' % good)
|
|
||||||
else:
|
|
||||||
print ('%s It didn\'t work' % bad)
|
|
||||||
seeds = ranger(allTokens)
|
|
||||||
print ('%s Generating a fake token.' % run)
|
|
||||||
data = tweaker(origData, 'generate', seeds=seeds)
|
|
||||||
print ('%s Making a request with the self generated token.' % run)
|
|
||||||
response = requester(origUrl, data, headers, origGET, 0)
|
response = requester(origUrl, data, headers, origGET, 0)
|
||||||
if response.status_code == originalCode:
|
if response.status_code == originalCode:
|
||||||
if str(originalCode)[0] in ['4', '5']:
|
if str(originalCode)[0] in ['4', '5']:
|
||||||
@@ -267,7 +261,27 @@ if response.status_code == originalCode:
|
|||||||
else:
|
else:
|
||||||
print ('%s It didn\'t work' % bad)
|
print ('%s It didn\'t work' % bad)
|
||||||
|
|
||||||
print ('%s Making requests with various tweaks to the token. It may take a while.' % run)
|
seeds = ranger(allTokens)
|
||||||
# data = datanize(goodCandidate, headers)[1]
|
print ('%s Generating a fake token.' % run)
|
||||||
# data = tweaker(data, 'remove')
|
|
||||||
# response = requester(origUrl, data, headers, origGET, 0)
|
data = tweaker(origData, 'generate', seeds=seeds)
|
||||||
|
print ('%s Making a request with the self generated token.' % run)
|
||||||
|
|
||||||
|
response = requester(origUrl, data, headers, origGET, 0)
|
||||||
|
if response.status_code == originalCode:
|
||||||
|
if str(originalCode)[0] in ['4', '5']:
|
||||||
|
print ('%s It didn\'t work' % bad)
|
||||||
|
else:
|
||||||
|
difference = abs(originalLength - len(response.text))
|
||||||
|
if difference <= tolerableDifference:
|
||||||
|
print ('%s It worked!' % good)
|
||||||
|
else:
|
||||||
|
print ('%s It didn\'t work' % bad)
|
||||||
|
|
||||||
|
print (' %s Phase: Analysing %s[%s6/6%s]%s' % (lightning, green, end, green, end))
|
||||||
|
|
||||||
|
bitDistribution = monobit(''.join(allTokens))
|
||||||
|
if bitDistribution < 1:
|
||||||
|
print ('%s The raito of 0\'s and 1\'s is very high which indicates the tokens are pseudo-random' % good)
|
||||||
|
else:
|
||||||
|
print ('%s The ')
|
||||||
|
|||||||
Reference in New Issue
Block a user