Hanno Böck commited on 2019-12-08 17:54:06
Zeige 1 geänderte Dateien mit 19 Einfügungen und 18 Löschungen.
| ... | ... |
@@ -28,7 +28,7 @@ import configparser |
| 28 | 28 |
import os |
| 29 | 29 |
import glob |
| 30 | 30 |
import re |
| 31 |
-import optparse |
|
| 31 |
+import argparse |
|
| 32 | 32 |
import sys |
| 33 | 33 |
from xml.sax.saxutils import escape |
| 34 | 34 |
|
| ... | ... |
@@ -45,12 +45,12 @@ def versioncompare(safe_version, find_version): |
| 45 | 45 |
|
| 46 | 46 |
|
| 47 | 47 |
def vulnprint(appname, version, safeversion, vuln, vfilename, subdir, |
| 48 |
- style=None): |
|
| 48 |
+ xml): |
|
| 49 | 49 |
appdir = '/'.join(os.path.abspath(vfilename).split('/')[:-1 - subdir])
|
| 50 |
- if not style: |
|
| 50 |
+ if not xml: |
|
| 51 | 51 |
print("%(appname)s %(version)s (%(safeversion)s) %(vuln)s "
|
| 52 | 52 |
"%(appdir)s" % vars()) |
| 53 |
- elif style == 'xml': |
|
| 53 |
+ else: |
|
| 54 | 54 |
state = 'vulnerable' |
| 55 | 55 |
if safeversion == 'ok': |
| 56 | 56 |
state = 'ok' |
| ... | ... |
@@ -65,15 +65,16 @@ def vulnprint(appname, version, safeversion, vuln, vfilename, subdir, |
| 65 | 65 |
|
| 66 | 66 |
|
| 67 | 67 |
# Command-line options |
| 68 |
-parser = optparse.OptionParser(usage="usage: %prog [options] <path>" |
|
| 69 |
- "[<path2> ...]") |
|
| 70 |
-parser.add_option("-a", "--all", action="store_true", dest="ALL",
|
|
| 68 |
+parser = argparse.ArgumentParser() |
|
| 69 |
+parser.add_argument("dirs", nargs="*",
|
|
| 70 |
+ help="Directories to scan") |
|
| 71 |
+parser.add_argument("-a", "--all", action="store_true",
|
|
| 71 | 72 |
help="Show all webapps found, not just vulnerable") |
| 72 |
-parser.add_option("-x", "--xml", action="store_const", dest="OUTPUT",
|
|
| 73 |
- const="xml", help="Output results as XML") |
|
| 74 |
-parser.add_option("-3", "--thirdparty", action="store_true", dest="THIRDPARTY",
|
|
| 73 |
+parser.add_argument("-x", "--xml", action="store_true",
|
|
| 74 |
+ help="Output results as XML") |
|
| 75 |
+parser.add_argument("-3", "--thirdparty", action="store_true",
|
|
| 75 | 76 |
help="Scan for third-party components like jquery") |
| 76 |
-opts, args = parser.parse_args() |
|
| 77 |
+opts = parser.parse_args() |
|
| 77 | 78 |
|
| 78 | 79 |
# Parse vulnerability database |
| 79 | 80 |
config = configparser.ConfigParser() |
| ... | ... |
@@ -90,7 +91,7 @@ for sect in config.sections(): |
| 90 | 91 |
item = {}
|
| 91 | 92 |
|
| 92 | 93 |
if (config.getboolean(sect, 'thirdparty', fallback=False) |
| 93 |
- and not opts.THIRDPARTY): |
|
| 94 |
+ and not opts.thirdparty): |
|
| 94 | 95 |
continue |
| 95 | 96 |
|
| 96 | 97 |
# base options |
| ... | ... |
@@ -128,13 +129,13 @@ for sect in config.sections(): |
| 128 | 129 |
|
| 129 | 130 |
vdb.append(item) |
| 130 | 131 |
|
| 131 |
-if opts.OUTPUT == 'xml': |
|
| 132 |
+if opts.xml: |
|
| 132 | 133 |
print('<?xml version="1.0" ?>')
|
| 133 | 134 |
print('<freewvs>')
|
| 134 | 135 |
|
| 135 | 136 |
# start the search |
| 136 | 137 |
|
| 137 |
-for fdir in args: |
|
| 138 |
+for fdir in opts.dirs: |
|
| 138 | 139 |
for root, NULL, files in os.walk(fdir): |
| 139 | 140 |
for filename in files: |
| 140 | 141 |
for item in vdb: |
| ... | ... |
@@ -170,10 +171,10 @@ for fdir in args: |
| 170 | 171 |
if not (versioncompare(item['safe'].split('.'),
|
| 171 | 172 |
findversion.split('.'))) or \
|
| 172 | 173 |
item['old_safe'].count(findversion) > 0: |
| 173 |
- if opts.ALL: |
|
| 174 |
+ if opts.all: |
|
| 174 | 175 |
vulnprint(item['name'], findversion, |
| 175 | 176 |
"ok", "", mfile, item['subdir'], |
| 176 |
- opts.OUTPUT) |
|
| 177 |
+ opts.xml) |
|
| 177 | 178 |
else: |
| 178 | 179 |
safev = "9999" |
| 179 | 180 |
for ver in item['old_safe']: |
| ... | ... |
@@ -187,7 +188,7 @@ for fdir in args: |
| 187 | 188 |
|
| 188 | 189 |
vulnprint(item['name'], findversion, |
| 189 | 190 |
safev, item['vuln'], |
| 190 |
- mfile, item['subdir'], opts.OUTPUT) |
|
| 191 |
+ mfile, item['subdir'], opts.xml) |
|
| 191 | 192 |
|
| 192 |
-if opts.OUTPUT == 'xml': |
|
| 193 |
+if opts.xml: |
|
| 193 | 194 |
print('</freewvs>')
|
| 194 | 195 |