Hanno Böck commited on 2008-01-13 13:07:39
Zeige 1 geänderte Dateien mit 47 Einfügungen und 24 Löschungen.
| ... | ... |
@@ -26,7 +26,8 @@ import ConfigParser, os, glob, pprint, re, optparse, sys |
| 26 | 26 |
|
| 27 | 27 |
|
| 28 | 28 |
def versioncompare(safe_version, find_version): |
| 29 |
- if safe_version==[""]: return True |
|
| 29 |
+ if safe_version == [""]: |
|
| 30 |
+ return True |
|
| 30 | 31 |
for i in range(min(len(find_version), len(safe_version))): |
| 31 | 32 |
if int(find_version[i])<int(safe_version[i]): |
| 32 | 33 |
return True |
| ... | ... |
@@ -34,9 +35,10 @@ def versioncompare(safe_version,find_version): |
| 34 | 35 |
return False |
| 35 | 36 |
return (len(find_version)<len(safe_version)) |
| 36 | 37 |
|
| 37 |
-def vulnprint(appname,version,safeversion,vuln,filename,subdir): |
|
| 38 |
- appdir='/'.join(os.path.abspath(filename).split('/')[:-1-subdir])
|
|
| 39 |
- print "%(appname)s %(version)s (%(safeversion)s) %(vuln)s %(appdir)s" % vars() |
|
| 38 |
+def vulnprint(appname, version, safeversion, vuln, vfilename, subdir): |
|
| 39 |
+ appdir = '/'.join(os.path.abspath(vfilename).split('/')[:-1-subdir])
|
|
| 40 |
+ print "%(appname)s %(version)s (%(safeversion)s) %(vuln)s %(appdir)s" \ |
|
| 41 |
+ % vars() |
|
| 40 | 42 |
|
| 41 | 43 |
pp = pprint.PrettyPrinter(indent=4) |
| 42 | 44 |
|
| ... | ... |
@@ -45,7 +47,8 @@ parser = optparse.OptionParser() |
| 45 | 47 |
parser.add_option("-a", "--all", action="store_true", dest="ALL",
|
| 46 | 48 |
help="Show all webapps found, not just vulnerable") |
| 47 | 49 |
parser.add_option("-d", "--debug", action="store_true", dest="DEBUG",
|
| 48 |
- help="Show lots of debugging output, mainly useful for development") |
|
| 50 |
+ help="Show lots of debugging output, mainly useful"+ \ |
|
| 51 |
+ "for development") |
|
| 49 | 52 |
opts, args = parser.parse_args() |
| 50 | 53 |
|
| 51 | 54 |
# Parse vulnerability database |
| ... | ... |
@@ -68,24 +71,32 @@ for sect in config.sections(): |
| 68 | 71 |
# match magic |
| 69 | 72 |
item['variable'] = [] |
| 70 | 73 |
for var in config.get(sect,'variable').split(","):
|
| 71 |
- item['variable'].append(re.compile(re.escape(var)+r"[^0-9.]*[.]*([0-9.]*[0-9])[^0-9.]")) |
|
| 74 |
+ item['variable'].append(re.compile(re.escape(var)+ |
|
| 75 |
+ r"[^0-9.]*[.]*([0-9.]*[0-9])[^0-9.]")) |
|
| 72 | 76 |
|
| 73 | 77 |
# optional options |
| 74 |
- if config.has_option(sect,'extra_match'): item['extra_match']=config.get(sect,'extra_match') |
|
| 75 |
- else: item['extra_match']=False |
|
| 76 |
- if config.has_option(sect,'add_minor'): item['add_minor']=config.get(sect,'add_minor') |
|
| 77 |
- else: item['add_minor']=False |
|
| 78 |
- if config.has_option(sect,'old_safe'): item['old_safe']=config.get(sect,'old_safe').split(",")
|
|
| 79 |
- else: item['old_safe']=[] |
|
| 78 |
+ if config.has_option(sect,'extra_match'): |
|
| 79 |
+ item['extra_match'] = config.get(sect,'extra_match') |
|
| 80 |
+ else: |
|
| 81 |
+ item['extra_match'] = False |
|
| 82 |
+ if config.has_option(sect,'add_minor'): |
|
| 83 |
+ item['add_minor'] = config.get(sect,'add_minor') |
|
| 84 |
+ else: |
|
| 85 |
+ item['add_minor'] = False |
|
| 86 |
+ if config.has_option(sect,'old_safe'): |
|
| 87 |
+ item['old_safe'] = config.get(sect,'old_safe').split(",")
|
|
| 88 |
+ else: |
|
| 89 |
+ item['old_safe'] = [] |
|
| 80 | 90 |
|
| 81 | 91 |
vdb.append(item) |
| 82 |
-if opts.DEBUG: pp.pprint(vdb) |
|
| 92 |
+if opts.DEBUG: |
|
| 93 |
+ pp.pprint(vdb) |
|
| 83 | 94 |
|
| 84 | 95 |
|
| 85 | 96 |
# start the search |
| 86 | 97 |
|
| 87 |
-for dir in args: |
|
| 88 |
- for root,NULL,files in os.walk(dir): |
|
| 98 |
+for fdir in args: |
|
| 99 |
+ for root, NULL, files in os.walk(fdir): |
|
| 89 | 100 |
for filename in files: |
| 90 | 101 |
for item in vdb: |
| 91 | 102 |
if filename == item['file']: |
| ... | ... |
@@ -94,8 +105,10 @@ for dir in args: |
| 94 | 105 |
filestr = file.read() |
| 95 | 106 |
file.close() |
| 96 | 107 |
|
| 97 |
- if item['extra_match']: ematch=(filestr.find(item['extra_match'])!=-1) |
|
| 98 |
- else: ematch=True |
|
| 108 |
+ if item['extra_match']: |
|
| 109 |
+ ematch = (filestr.find(item['extra_match']) != -1) |
|
| 110 |
+ else: |
|
| 111 |
+ ematch = True |
|
| 99 | 112 |
|
| 100 | 113 |
findversion = [] |
| 101 | 114 |
for var in item['variable']: |
| ... | ... |
@@ -112,16 +125,26 @@ for dir in args: |
| 112 | 125 |
# Very ugly phpbb workaround |
| 113 | 126 |
if item['add_minor']: |
| 114 | 127 |
findversion = findversion.split('.')
|
| 115 |
- findversion[-1]=str(int(findversion[-1])+int(item['add_minor'])) |
|
| 128 |
+ findversion[-1] = str(int(findversion[-1])+ |
|
| 129 |
+ int(item['add_minor'])) |
|
| 116 | 130 |
findversion = '.'.join(findversion) |
| 117 | 131 |
|
| 118 |
- if not (versioncompare(item['safe'].split('.'),findversion.split('.'))) or item['old_safe'].count(findversion)>0:
|
|
| 132 |
+ if not (versioncompare(item['safe'].split('.'), \
|
|
| 133 |
+ findversion.split('.'))) or \
|
|
| 134 |
+ item['old_safe'].count(findversion)>0: |
|
| 119 | 135 |
if opts.ALL: |
| 120 |
- if opts.DEBUG: print "File "+mfile |
|
| 121 |
- vulnprint(item['name'],findversion,"ok","",mfile,item['subdir']) |
|
| 136 |
+ if opts.DEBUG: |
|
| 137 |
+ print "File "+mfile |
|
| 138 |
+ vulnprint(item['name'], findversion, \ |
|
| 139 |
+ "ok", "", mfile, item['subdir']) |
|
| 122 | 140 |
else: |
| 123 |
- if opts.DEBUG: print "File "+mfile |
|
| 124 |
- vulnprint (item['name'],findversion,item['safe'],item['vuln'],mfile,item['subdir']) |
|
| 141 |
+ if opts.DEBUG: |
|
| 142 |
+ print "File "+mfile |
|
| 143 |
+ vulnprint (item['name'], findversion, \ |
|
| 144 |
+ item['safe'], item['vuln'], \ |
|
| 145 |
+ mfile, item['subdir']) |
|
| 125 | 146 |
|
| 126 | 147 |
else: |
| 127 |
- if opts.DEBUG: print "regexp failed for "+item['name']+" on "+mfile |
|
| 148 |
+ if opts.DEBUG: |
|
| 149 |
+ print "regexp failed for " + \ |
|
| 150 |
+ item['name'] + " on " + mfile |
|
| 128 | 151 |