Skip to content

Commit

Permalink
add config load & recover
Browse files Browse the repository at this point in the history
  • Loading branch information
LoRexxar committed Aug 14, 2020
1 parent 20ce140 commit 52b0f77
Show file tree
Hide file tree
Showing 22 changed files with 383 additions and 91 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,6 @@ settings.py
# webdriver
bin/*
ghostdriver.log
debug.log
debug.log

#
53 changes: 32 additions & 21 deletions core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ def main():
try:
# arg parse
t1 = time.time()
parser = argparse.ArgumentParser(prog=__title__, description=__introduction__, epilog=__epilog__, formatter_class=argparse.RawDescriptionHelpFormatter, usage=argparse.SUPPRESS)
parser = argparse.ArgumentParser(prog=__title__, description=__introduction__.format(detail="Main Program"), epilog=__epilog__, formatter_class=argparse.RawDescriptionHelpFormatter, usage=argparse.SUPPRESS)

subparsers = parser.add_subparsers()

parser_group_core = subparsers.add_parser('config', help='config for rule&tamper', description='config for rule&tamper', usage=argparse.SUPPRESS, add_help=True)
parser_group_core.add_argument('load', action='store_true', default=False, help='load rule&tamper')
parser_group_core = subparsers.add_parser('config', help='config for rule&tamper', description=__introduction__.format(detail='config for rule&tamper'), formatter_class=argparse.RawDescriptionHelpFormatter, usage=argparse.SUPPRESS, add_help=True)
parser_group_core.add_argument('load', choices=['load', 'recover'], default=False, help='operate for rule&tamper')

parser_group_scan = subparsers.add_parser('scan', help='scan target path', description='scan target path', epilog=__scan_epilog__, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=True)
parser_group_scan = subparsers.add_parser('scan', help='scan target path', description=__introduction__.format(detail='scan target path'), epilog=__scan_epilog__, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=True)
parser_group_scan.add_argument('-t', '--target', dest='target', action='store', default='', metavar='<target>', help='file, folder, compress, or repository address')
parser_group_scan.add_argument('-f', '--format', dest='format', action='store', default='csv', metavar='<format>', choices=['html', 'json', 'csv', 'xml'], help='vulnerability output format (formats: %(choices)s)')
parser_group_scan.add_argument('-o', '--output', dest='output', action='store', default='', metavar='<output>', help='vulnerability output STREAM, FILE')
Expand All @@ -61,10 +61,10 @@ def main():

parser_group_scan.add_argument('-d', '--debug', dest='debug', action='store_true', default=False, help='open debug mode')

parser_group_scan.add_argument('-uc', '--unconfirm', dest='unconfirm', action='store_true', default=False, help='show unconfirmed vuls')
parser_group_scan.add_argument('-upc', '--unprecom', dest='unprecom', action='store_true', default=False, help='without Precompiled')
parser_group_scan.add_argument('-uc', '--unconfirm', dest='unconfirm', action='store_false', default=False, help='show unconfirmed vuls')
parser_group_scan.add_argument('-upc', '--unprecom', dest='unprecom', action='store_false', default=False, help='without Precompiled')

parser_group_show = subparsers.add_parser('show', help='show rule&tamper', description='show rule&tamper', usage=argparse.SUPPRESS, add_help=True)
parser_group_show = subparsers.add_parser('show', help='show rule&tamper', description=__introduction__.format(detail='show rule&tamper'), formatter_class=argparse.RawDescriptionHelpFormatter, usage=argparse.SUPPRESS, add_help=True)

parser_group_show.add_argument('-list', '--list', dest='list', action='store', default=None, help='show all rules')
parser_group_show.add_argument('-listt', '--listtamper', dest='listtamper', action='store', default=None,
Expand All @@ -73,36 +73,47 @@ def main():
args = parser.parse_args()

# log
if args.log:
if hasattr(args, "log") and args.log:
log(logging.INFO, args.log)
else:
log(logging.INFO, str(time.time()))

if args.debug:
if hasattr(args, "debug") and args.debug:
logger.setLevel(logging.DEBUG)
logger.debug('[INIT] set logging level: debug')

RuleCheck().run()
if args.load:
logger.info("[INIT] RuleCheck finished.")
exit()
if hasattr(args, "load"):
if args.load == "load":
logger.info("[INIT] RuleCheck start.")
RuleCheck().load()

if args.list or args.listtamper:
if args.list:
logger.info("Show List:\n{}".format(show_info('rule', args.list.strip(""))))
logger.info("[INIT] RuleCheck finished.")
exit()

if args.listtamper:
logger.info("Show Tamper List:\n{}".format(show_info('tamper', args.listtamper.strip(""))))
elif args.load == "recover":
logger.info("[INIT] RuleRecover start.")
RuleCheck().recover()

exit()
logger.info("[INIT] RuleRecover finished.")
exit()

if hasattr(args, "list"):
if args.list or args.listtamper:
if args.list:
logger.info("Show List:\n{}".format(show_info('rule', args.list.strip(""))))

if args.listtamper:
logger.info("Show Tamper List:\n{}".format(show_info('tamper', args.listtamper.strip(""))))

exit()

if args.target == '' and args.output == '':
if (not hasattr(args, "target") or args.target == '') or (not hasattr(args, "output") or args.output == ''):
parser.print_help()
exit()

logger.debug('[INIT] start scanning...')

if args.sid:
if hasattr(args, "sid") and args.sid:
a_sid = args.sid
else:
a_sid = get_sid(args.target, True)
Expand Down
6 changes: 5 additions & 1 deletion core/__version__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
GitHub: https://github.com/LoRexxar/Kunlun-M
KunLun-M is a static code analysis system that automates the detecting vulnerabilities and security issue.""".format(version=__version__)
KunLun-M is a static code analysis system that automates the detecting vulnerabilities and security issue.
{{detail}}
""".format(version=__version__)
__epilog__ = """Usage:
python {m} scan -t {td}
python {m} scan -t {td} -r 1000, 1001
Expand Down
14 changes: 7 additions & 7 deletions core/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from utils.file import Directory
from utils.utils import ParseArgs
from utils.utils import md5, random_generator
from Kunlun_M.settings import rules_path
from Kunlun_M.settings import RULES_PATH


def get_sid(target, is_a_sid=False):
Expand Down Expand Up @@ -151,32 +151,32 @@ def list_parse(rules_path, istamp=False):

if type == "rule":

rule_lan_list = list_parse(rules_path)
rule_lan_list = list_parse(RULES_PATH)
rule_dict = {}
if key == "all":
# show all
for lan in rule_lan_list:
info_dict[lan] = []
rule_lan_path = os.path.join(rules_path, lan)
rule_lan_path = os.path.join(RULES_PATH, lan)

info_dict[lan] = list_parse(rule_lan_path)

elif key in rule_lan_list:
info_dict[key] = []
rule_lan_path = os.path.join(rules_path, key)
rule_lan_path = os.path.join(RULES_PATH, key)

info_dict[key] = list_parse(rule_lan_path)

elif str(int(key)) == key:
for lan in rule_lan_list:
info_dict[lan] = []
rule_lan_path = os.path.join(rules_path, lan)
rule_lan_path = os.path.join(RULES_PATH, lan)

info_dict[lan] = list_parse(rule_lan_path)

for lan in info_dict:
if "CVI_{}.py".format(key) in info_dict[lan]:
f = codecs.open(os.path.join(rules_path, lan, "CVI_{}.py".format(key)), encoding='utf-8', errors="ignore")
f = codecs.open(os.path.join(RULES_PATH, lan, "CVI_{}.py".format(key)), encoding='utf-8', errors="ignore")
return f.read()

logger.error('[Show] no CVI id {}.'.format(key))
Expand Down Expand Up @@ -214,7 +214,7 @@ def list_parse(rules_path, istamp=False):
table.align = 'l'
i = 0

tamp_path = os.path.join(rules_path, 'tamper/')
tamp_path = os.path.join(RULES_PATH, 'tamper/')
tamp_list = list_parse(tamp_path, True)

if key == "all":
Expand Down
6 changes: 3 additions & 3 deletions core/detection.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import xml.etree.ElementTree as eT
from .dependencies import Dependencies
from utils.log import logger
from Kunlun_M.settings import rules_path
from Kunlun_M.settings import RULES_PATH

try: # for pip >= 10
from pip._internal.req import parse_requirements
Expand All @@ -41,7 +41,7 @@ def __init__(self, target_directory, files):
self.frame_data = {}
self.language_data = {}
self.project_data = []
self.rules_path = rules_path
self.rules_path = RULES_PATH

@property
def language(self):
Expand Down Expand Up @@ -200,7 +200,7 @@ def _read_xml(self, filename):

@staticmethod
def rule():
framework_path = os.path.join(rules_path, 'frameworks.xml')
framework_path = os.path.join(RULES_PATH, 'frameworks.xml')
tree = eT.ElementTree(file=framework_path)
return tree

Expand Down
12 changes: 6 additions & 6 deletions core/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

from rules.autorule import autorule
from Kunlun_M import const
from Kunlun_M.settings import running_path
from Kunlun_M.settings import RUNNING_PATH
from Kunlun_M.const import ext_dict
from Kunlun_M.const import VulnerabilityResult

Expand All @@ -48,7 +48,7 @@ def init_list(self, data=None):
:param data: list or a string
:return:
"""
file_path = os.path.join(running_path, '{sid}_list'.format(sid=self.sid))
file_path = os.path.join(RUNNING_PATH, '{sid}_list'.format(sid=self.sid))
if not os.path.exists(file_path):
if isinstance(data, list):
with open(file_path, 'w') as f:
Expand All @@ -66,7 +66,7 @@ def init_list(self, data=None):
}))

def list(self, data=None):
file_path = os.path.join(running_path, '{sid}_list'.format(sid=self.sid))
file_path = os.path.join(RUNNING_PATH, '{sid}_list'.format(sid=self.sid))
if data is None:
with open(file_path, 'r') as f:
portalocker.lock(f, portalocker.LOCK_EX)
Expand All @@ -86,7 +86,7 @@ def list(self, data=None):
f.write(json.dumps(result))

def status(self, data=None):
file_path = os.path.join(running_path, '{sid}_status'.format(sid=self.sid))
file_path = os.path.join(RUNNING_PATH, '{sid}_status'.format(sid=self.sid))
if data is None:
with open(file_path) as f:
portalocker.lock(f, portalocker.LOCK_EX)
Expand All @@ -100,7 +100,7 @@ def status(self, data=None):

def data(self, data=None):

file_path = os.path.abspath(running_path + '/{sid}_data'.format(sid=self.sid))
file_path = os.path.abspath(RUNNING_PATH + '/{sid}_data'.format(sid=self.sid))

if data is None:
with open(file_path) as f:
Expand All @@ -118,7 +118,7 @@ def is_file(self, is_data=False):
ext = 'data'
else:
ext = 'status'
file_path = os.path.join(running_path, '{sid}_{ext}'.format(sid=self.sid, ext=ext))
file_path = os.path.join(RUNNING_PATH, '{sid}_{ext}'.format(sid=self.sid, ext=ext))
return os.path.isfile(file_path)


Expand Down
Loading

0 comments on commit 52b0f77

Please sign in to comment.