#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-30 # @File : mysql_plugin.py # @Desc : "" import socket import MySQLdb from multiprocessing import Pool from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from instance import config_name config_db = db_name_conf()['config_db'] class MySQLPlugin: def __init__(self, target_list, username_list, password_list): self.target_list = target_list self.username_list = username_list self.password_list = password_list self.mysql_target = [] self.result = [] self.result_check = [] self.result_auth = [] self.processes = connectiondb(config_db).find_one( {"config_name": config_name})['auth_tester_thread'] def mysql_scan(self): pool_1 = Pool(processes=self.processes) for target in self.target_list:
# @Author : jeffzhang # @Time : 18-5-19 # @File : domain_brute.py # @Desc : "" import dns.resolver from multiprocessing import Pool, Lock from datetime import datetime from random import sample from string import digits, ascii_lowercase from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.get_title import get_title from instance import config_name lock = Lock() domain_db = db_name_conf()['domain_db'] config_db = db_name_conf()['config_db'] subdomain_db = db_name_conf()['subdomain_db'] def resolution(domain): _result = {} record_a = [] record_cname = [] try: respond = dns.resolver.query(domain.strip()) for record in respond.response.answer: for i in record.items: if i.rdtype == dns.rdatatype.from_text('A'): record_a.append(str(i)) _result[domain] = record_a
# -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-22 # @File : acunetix_scanner.py # @Desc : "" import time from bson import ObjectId from flask import Blueprint, render_template, request, jsonify from fuxi.views.lib.parse_target import parse_target from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.authenticate import login_check from fuxi.views.modules.acunetix_scanner.awvs_api import AcunetixScanner acunetix_scanner = Blueprint('acunetix_scanner', __name__) acunetix_db = db_name_conf()['acunetix_db'] @acunetix_scanner.route('/acunetix-scanner', methods=['GET', 'POST']) @login_check def acunetix_view(): # scanner view if request.method == "GET": acunetix_task = connectiondb(acunetix_db).find() return render_template('acunetix-scanner.html', acunetix_task=acunetix_task) else: if request.form.get('source') == "new_scan": target_id = [] task_name = request.form.get('task_name') target_list = request.form.get('target_addr').split("\n") scan_type = request.form.get('scan_type')
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-30 # @File : asset_discovery.py # @Desc : "" import nmap import time from multiprocessing import Pool from apscheduler.schedulers.blocking import BlockingScheduler from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.parse_target import parse_target from instance import config_name config_db = db_name_conf()['config_db'] asset_db = db_name_conf()['asset_db'] server_db = db_name_conf()['server_db'] class AssetDiscovery: def __init__(self, asset_id): self.asset_id = asset_id self.result_tmp = [] self.result = [] self.port_list = connectiondb(config_db).find_one( {"config_name": config_name})['port_list'] self.processes = connectiondb(config_db).find_one( {"config_name": config_name})['discovery_thread'] self.asset_name = connectiondb(asset_db).find_one( {"_id": self.asset_id})['asset_name']
# @File : poc_scanner.py # @Desc : =_=!! import sched import time import datetime from multiprocessing import Pool, Lock from threading import RLock from pocsuite.api.cannon import Cannon from apscheduler.schedulers.blocking import BlockingScheduler from bson.objectid import ObjectId from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.parse_target import parse_target from instance import config_name config_db = db_name_conf()['config_db'] tasks_db = db_name_conf()['tasks_db'] vul_db = db_name_conf()['vul_db'] plugin_db = db_name_conf()['plugin_db'] schedule = sched.scheduler(time.time, time.sleep) lock = Lock() thread_lock = RLock() def verify_poc(scan_data): plugin_name = scan_data['plugin_name'] plugin_filename = scan_data['plugin_filename'] target = scan_data['target'] info = {"pocname": plugin_name, "pocstring": open(plugin_filename, 'r').read(),
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-30 # @File : asset_discovery.py # @Desc : "" import nmap import time from multiprocessing import Pool from apscheduler.schedulers.blocking import BlockingScheduler from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.parse_target import parse_target from instance import config_name config_db = db_name_conf()['config_db'] asset_db = db_name_conf()['asset_db'] search_db = db_name_conf()['search_db'] server_db = db_name_conf()['server_db'] class AssetDiscovery: def __init__(self, asset_id): self.asset_id = asset_id self.result_tmp = [] self.result = [] self.port_list = connectiondb(config_db).find_one({"config_name": config_name})['port_list'] self.processes = connectiondb(config_db).find_one({"config_name": config_name})['discovery_thread'] self.asset_name = connectiondb(asset_db).find_one({"_id": self.asset_id})['asset_name'] self.host_list = parse_target(connectiondb(asset_db).find_one({"_id": self.asset_id})['asset_host'])
# @Author : jeffzhang # @Time : 18-6-19 # @File : auth_scanner.py # @Desc : "" import time from threading import Thread from datetime import datetime from multiprocessing import Pool from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.modules.auth_tester.hydra_plugin import HydraScanner from fuxi.views.lib.parse_target import parse_target from apscheduler.schedulers.blocking import BlockingScheduler from instance import config_name config_db = db_name_conf()['config_db'] weekpasswd_db = db_name_conf()['weekpasswd_db'] auth_db = db_name_conf()['auth_db'] def hydra_scanner(args): start = HydraScanner(args) result = start.scanner() return result def host_check(args): start = HydraScanner(args) result = start.host_check() return result
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-7-10 # @File : dev_drop_db.py # @Desc : "Drop all databases" import os import sys parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parent_dir) from fuxi.views.lib.mongo_db import connectiondb, db_name_conf def drop_database(db_name): result = connectiondb(db_name).remove() print("[*] Drop database: %s %s" % (db_name, result)) if __name__ == '__main__': ask = raw_input('Are you sure you want to delete (yes/no): ') if ask == 'yes': for key in db_name_conf(): drop_database(db_name_conf()[key]) print( "[*] Successfully deleted, Please initialize the configuration database (python migration/db_init.py)" )
# @Time : 18-5-19 # @File : domain_brute.py # @Desc : "" import dns.resolver from multiprocessing import Pool, Lock from datetime import datetime from random import sample from string import digits, ascii_lowercase from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.get_title import get_title from instance import config_name lock = Lock() domain_db = db_name_conf()['domain_db'] config_db = db_name_conf()['config_db'] subdomain_db = db_name_conf()['subdomain_db'] def resolution(domain): _result = {} record_a = [] record_cname = [] try: respond = dns.resolver.query(domain.strip()) for record in respond.response.answer: for i in record.items: if i.rdtype == dns.rdatatype.from_text('A'): record_a.append(str(i)) _result[domain] = record_a
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-14 # @File : parse_plugin.py # @Desc : "" import os import re from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from flask import Flask app = Flask(__name__) plugin_db = db_name_conf()['plugin_db'] def parse_plugin(plugin_filename): name_pattern = re.compile(r'name\s*=\s*[\'\"\[](.*)[\'\"\]]') author_pattern = re.compile(r'author\s*=\s*[\'\"\[](.*)[\'\"\]]') date_pattern = re.compile(r'vulDate\s*=\s*[\'\"\[](.*)[\'\"\]]') app_pattern = re.compile(r'appName\s*=\s*[\'\"\[](.*)[\'\"\]]') type_pattern = re.compile(r'vulType\s*=\s*[\'\"\[](.*)[\'\"\]]') version_pattern = re.compile(r'appVersion\s*=\s*[\'\"\[](.*)[\'\"\]]') plugin_data = open(plugin_filename, 'r').read() try: plugin_name = name_pattern.findall(plugin_data) plugin_author = author_pattern.findall(plugin_data) plugin_date = date_pattern.findall(plugin_data) plugin_app = app_pattern.findall(plugin_data) plugin_type = type_pattern.findall(plugin_data) plugin_version = version_pattern.findall(plugin_data)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-15 # @File : db_init.py # @Desc : "" import os import sys parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parent_dir) from instance import config_name from fuxi.views.lib.mongo_db import connectiondb, db_name_conf tasks_db = db_name_conf()['tasks_db'] asset_db = db_name_conf()['asset_db'] server_db = db_name_conf()['server_db'] subdomain_db = db_name_conf()['subdomain_db'] vul_db = db_name_conf()['vul_db'] plugin_db = db_name_conf()['plugin_db'] config_db = db_name_conf()['config_db'] def config(): subdomain_dict = [] subdomain_dict_path = os.getcwd() + '/tests/domain.dict' try: with open(subdomain_dict_path) as file_read: for i in file_read: subdomain_dict.append(i.strip()) except Exception as e:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : jeffzhang # @Time : 18-5-17 # @File : nmap_scanner.py # @Desc : "" import nmap from fuxi.views.lib.mongo_db import connectiondb, db_name_conf port_db = db_name_conf()['port_db'] class NmapScanner: def __init__(self, target, arguments, scan_id): self.target = target self.arguments = arguments self.scan_id = scan_id self.ports = [] self.result = [] def scan(self): port_scanner = nmap.PortScanner() try: port_scanner.scan(self.target, arguments=self.arguments) except Exception as e: print self.target, e return port_scanner def port_result(self): self.result.append(self.scan().command_line())
# @File : poc_scanner.py # @Desc : =_=!! import sched import time import datetime from multiprocessing import Pool, Lock from threading import RLock from pocsuite.api.cannon import Cannon from apscheduler.schedulers.blocking import BlockingScheduler from bson.objectid import ObjectId from fuxi.views.lib.mongo_db import connectiondb, db_name_conf from fuxi.views.lib.parse_target import parse_target from instance import config_name config_db = db_name_conf()['config_db'] tasks_db = db_name_conf()['tasks_db'] vul_db = db_name_conf()['vul_db'] plugin_db = db_name_conf()['plugin_db'] schedule = sched.scheduler(time.time, time.sleep) lock = Lock() thread_lock = RLock() def verify_poc(scan_data): plugin_name = scan_data['plugin_name'] plugin_filename = scan_data['plugin_filename'] target = scan_data['target'] info = { "pocname": plugin_name,