-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathoptblid.py
75 lines (65 loc) · 1.95 KB
/
optblid.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import requests
import pyparsing as pp
from pprint import pprint
def parse_verbs():
get = pp.Literal("GET")
post = pp.Literal("POST")
options = pp.Literal("OPTIONS")
put=pp.Literal("PUT")
patch=pp.Literal("PATCH")
delete=pp.Literal("DELETE")
connect=pp.Literal("CONNECT")
trace=pp.Literal("TRACE")
track=pp.Literal("TRACK")
head = pp.Literal("HEAD")
crappaton = pp.Word(pp.printables).setResultsName('bleed')
headers = pp.ZeroOrMore(get|post|head|options|put|patch|delete|connect|trace|track).setResultsName('headers')
verb = pp.Dict(pp.Group((headers+pp.ZeroOrMore(crappaton))).setResultsName('results'))
return verb
def get_verbs(url):
try:
requests.packages.urllib3.disable_warnings()
res=requests.options(url,verify=False)
if "allow" in res.headers:
verbs = res.headers['allow']+"PAPAPAPA"
if verbs is "":
return "EMPTY"
else:
return verbs.replace(',', '')
else:
return "ERROR"
except Exception as e:
print "ERROR "+url+" : "+str(e)
return "ERROR"
def check_bleeding(url,retests):
for i in range(retests):
print str(i+1),
verbs=get_verbs(url)
if (verbs == "EMPTY"):
return url+" : ERROR EMPTY"
else:
parsed_verbs = (parse_verbs().parseString(verbs)).asDict()
if "bleed" in parsed_verbs["results"]:
if parsed_verbs["results"]["bleed"] is "":
return url+" : EMPTY"
elif "ERROR" in parsed_verbs["results"]["bleed"]:
return url+" : ERROR"
else:
return 'BLEEDING: '+parsed_verbs["results"]["bleed"]
return url+" : NO BLEEDING "
def http_url(url):
return "http://"+url.rstrip()+"/"
def https_url(url):
return "https://"+url.rstrip()+"/"
def main():
with open("input.txt","r") as input,open("output.txt","w") as output:
progress=""
iters = 1
for line in input.readlines():
checked=check_bleeding(http_url(line),iters)+"\n"
checked+=check_bleeding(https_url(line),iters)+"\n"
print checked
progress+=checked
output.write(progress)
if __name__ == "__main__":
main()