Exemple #1
0
def tags(ip):
    """
    Отображение всех задач по сканированию, связанных с IP-адресом
    Возможность назначить тег для IP адреса, а также отметить как важный хост
    :param ip: ip-адрес хоста
    :return: переадресания лиюо отображение страницы
    """
    host_discovery_ip = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                    base="scanner", collection="result"))
    data_all = host_discovery_ip.get_message({"host": ip})
    host_discovery_tag = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                     base="HostDiscovery", collection="result"))
    data_tag = host_discovery_tag.get_message({"ip": ip})
    if request.method == 'POST':
        tag_get = request.form.get("tag")
        important = request.form.get('important')
        if important:
            important = True
        else:
            important = False
        host_discovery_post_tag = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                              base="HostDiscovery", collection="result"))
        host_discovery_post_tag.update_message({"ip": ip}, {"tag": tag_get, "important": important})
        return redirect(url_for('main.inventory'))
    else:
        return render_template('tag.html', ips=ip, items=data_all, tag_items=data_tag)
Exemple #2
0
def delete_data_host_discovery(host: str):
    """

    """
    try:
        message_mongo_host_discovery = MessageProducer(
            MongoDriver(host=MONGO_HOST,
                        port=MONGO_PORT,
                        base="HostDiscovery",
                        collection="result"))
        message_mongo_scanner_result = MessageProducer(
            MongoDriver(host=MONGO_HOST,
                        port=MONGO_PORT,
                        base="scanner",
                        collection="result"))
        message_mongo_scanner_task = MessageProducer(
            MongoDriver(host=MONGO_HOST,
                        port=MONGO_PORT,
                        base="scanner",
                        collection="task"))
        message_mongo_host_discovery.delete_message({"ip": host})
        message_mongo_scanner_result.delete_message({"host": host})
        message_mongo_scanner_task.delete_message({"host": host})
    except Exception as e:
        print(e)
Exemple #3
0
def setting():
    """
    Реализация страницы настойки
    setting_networks, setting_data: Подключения для работы с базой данных.
    items_setting, items_notification: Получение всех данных из соответствующий коллекций
    return: Отображение страницы настройки
    """
    setting_networks = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                   base="setting", collection="network"))
    setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                               base="setting", collection="notification"))
    return render_template('setting.html', settings=setting_networks.get_all_message(),
                           notification=setting_data.get_all_message())
Exemple #4
0
def setting_notification():
    """
    Добавление настроек для оповещения. Метод добавления POST
    Сохранение данных осуществляется в БД Mongo
    Метод GET для отображения страницы оповещения
    Поддерживается возможность оповещения по email  и в telegram канал, при помощи бота
    telegram: bot api
    chat_id: id канала в Telegram
    email: email пользователя
    """
    if request.method == 'POST':
        telegram = request.form.get('telegram')
        chat_id = request.form.get('chat_id')
        email = request.form.get('email')
        data = {
            "telegram_bot_api": telegram,
            "telegram_chat_id": chat_id,
            "email": email,
        }
        setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                   base="setting", collection="notification"))
        setting_data.insert_message(message=data)
        return redirect(url_for('main.setting'))
    else:
        return render_template('network_notification.html')
Exemple #5
0
def table_KB():
    """

    """
    message_KB = MessageProducer(MongoDriver(host='localhost', port=27017,
                                             base="vulndb", collection="cve"))
    return message_KB.get_message_limit(50)
Exemple #6
0
def setting_network():
    """
    Добавление настроек сети. Метод добавления POST
    Сохранение данных осуществляется в БД Mongo
    Метод GET для отображения страницы настроек сети
    """
    if request.method == 'POST':
        network = request.form.get('network')
        interface = request.form.get('interface')
        description = request.form.get('description')
        private = request.form.get('private')
        telegram = request.form.get('telegram')
        mail = request.form.get('mail')
        if private is None:
            private = "Open Network"
        else:
            private = "Private Network"
        name = {
            "network": network
        }
        data = {
            "interface": interface,
            "description": description,
            "private": private,
            "telegram": telegram,
            "mail": mail
        }
        setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                   base="setting", collection="network"))
        setting_data.update_message(message=name, new_value=data)
        return redirect(url_for('main.setting'))
    else:
        return render_template('network.html')
Exemple #7
0
def dashboard_data() -> Dict:
    """
    Данные для построения графиков на странице /dashboard
    data_all_host: Количество обнаруженных хостов

    :return: data(Dict)
    """
    message_all = MessageProducer(
        MongoDriver(host='localhost',
                    port=27017,
                    base="HostDiscovery",
                    collection="result"))
    data_all_host = message_all.get_all_message()
    count = 0
    for i in data_all_host:
        count += 1
    data = {
        "count_host": count,
        "count_important_host": 2,
        "count_vulnerability": 43,
        "exploit": 2,
        "score": 4.7,
        "ports": [],
        "service": [],
        "task": [],
        "KB": []
    }
    return data
Exemple #8
0
def setting_network_delete(_id, col):
    """
    удаление сведений из БД
    col: название колекции в БД
    _id: Идентификатор в БД
    """
    setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                               base="setting", collection=col))
    setting_data.delete_message({'_id': ObjectId(_id)})
    return redirect(url_for('main.setting'))
Exemple #9
0
def email_message():
    """
    Оправка сообщения на email
    ... доработка
    """
    notifications_data = MessageProducer(
        MongoDriver(host='localhost',
                    port=27017,
                    base="setting",
                    collection="notifications"))
Exemple #10
0
 def get_uuid(self) -> None:
     """
     return: результат из базы данных
     """
     scanner_data = MessageProducer(
         MongoDriver(host=MONGO_HOST,
                     port=MONGO_PORT,
                     base="scanner",
                     collection="result"))
     return scanner_data.get_message(message={"uuid": self.uuid})
Exemple #11
0
def inventory():
    """
    Реализация страницы Host Discovery
    Отображение в таблице всех обнаруженных хостов в сети
    setting_data: Подключение к БД
    get_mask_ip: Получение всех сохраненных хостов в сети
    .... дописать
    """
    setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                               base="setting", collection="network"))
    host_discovery_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                      base="HostDiscovery", collection="result"))
    if request.method == 'POST':
        select = request.form.get('comp_select')
        host_discovery_task(host=select)
        return redirect(url_for('main.inventory'))
    else:
        return render_template('inventory.html', items=host_discovery_data.get_all_message(),
                               net=setting_data.get_all_message())
Exemple #12
0
def scheduler_host_discovery():
    """
    Запуск задачи на обнаружение хостов в сети.
    Поиск хостов осуществляется каждые 5 минут
    :return: None
    """
    setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                               base="setting", collection="network"))
    items = setting_data.get_all_message()
    for net in items:
        host_discovery_task(host=net["network"])
Exemple #13
0
def get_cve_info(cve):
    """

    """
    try:
        cve_upper = str(cve).upper().replace(' ', '')
        cve_KB = MessageProducer(MongoDriver(host='localhost', port=27017,
                                             base="vulndb", collection="cve"))
        data = cve_KB.get_message({"cve": cve_upper})
    except Exception as e:
        data = []
    return data
Exemple #14
0
def notification_message():
    """
    Вывод последних 10 записей из БД
    :return: *Storage -> Cursor Database
    """
    notifications_data = MessageProducer(
        MongoDriver(host='localhost',
                    port=27017,
                    base="notification",
                    collection="notifications"))
    data = notifications_data.get_message_limit(10)
    return data
Exemple #15
0
def result_task():
    """
    История всех запущенных задач по сканированию,
    а также логов приложения
    :return: Отображение страницы с историей
    """
    task_all = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                           base="scanner", collection="task"))
    item = task_all.get_all_message()
    return render_template('result.html',
                           items=item,
                           logs=log_file('app/logs/logging.log')
                           )
Exemple #16
0
def delete_task(uuid: str):
    """
    Удаление информации о задаче
    uuid: UUID номер задачи
    """
    try:
        message_mongo = MessageProducer(
            MongoDriver(host=MONGO_HOST,
                        port=MONGO_PORT,
                        base="scanner",
                        collection="result"))
        message_mongo.delete_message({"uuid": uuid})
    except Exception as e:
        print(e)
Exemple #17
0
def record_db_task(result: str, host: str):
    """
    Запись в БД
    :param result:
    :param host:
    :return:
    """
    data = {"uuid": result, "name": "Scanner", "host": host, "time": time()}
    message_mongo = MessageProducer(
        MongoDriver(host=MONGO_HOST,
                    port=MONGO_PORT,
                    base="scanner",
                    collection="task"))
    message_mongo.insert_message(data)
Exemple #18
0
def scanner_info(uuid: str):
    """
    Информация о задаче
    result_vuln: Поиск уязвимостей в соответствии с задачей(нужно исправить)
    Раздел следует доработать
    """
    vuln_data = dict()
    scanner_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                               base="scanner", collection="result"))
    for dict_data in scanner_data.get_message(message={"uuid": uuid}):
        vuln_data = dict_data
    count_dir = result_count_data(DirectoryInfo(uuid))
    return render_template('info.html', uid=vuln_data, info_mng=0, cntE=0,
                           cntD=count_dir["count"], cntP=0)
Exemple #19
0
def vulnerability_info(vulnerability: str):
    """
    получение информации о CVE
    """
    try:
        cve_upper = str(vulnerability).upper()
        message_mongo = MessageProducer(
            MongoDriver(host=MONGO_HOST,
                        port=MONGO_PORT,
                        base="vulndb",
                        collection="cve"))
        data = message_mongo.get_message({"cve": cve_upper})
        return data
    except Exception as e:
        print(e)
Exemple #20
0
def scheduler_scanner():
    """
    Запуск задачи на сканирвоние важных хостов.
    Важные хосты настраиваются на вкладке Host Discovery -> <ip> -> Edit Host
    Сканирование осуществляется каждые 24 часа.
    :return: None
    """
    host_discovery = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                 base="HostDiscovery", collection="result"))
    items = host_discovery.get_all_message()
    list_ip = []
    for data in items:
        if data["important"]:
            list_ip.append(data["ip"])
    for net in list_ip:
        scan_task(net)
Exemple #21
0
def scanner():
    """
    Информация о задачах по сканированию.
    Информация содержится в таблице и включает в себя:
    Название задачи, хост и время запуска
    Метод POST: для запуска задачи по сканированию
    host_discovery_ip: Подключение к БД
    data_all: Список всех записей
    results: id задачи в RQ Worker
    scan_db_task: Запись в БД (нужно исправить)
    :return: Отображение страницы /scanner
    """
    host_discovery_ip = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT,
                                                    base="scanner", collection="result"))
    data_all = host_discovery_ip.get_all_message()
    if request.method == 'POST':
        scanner_host = request.form.get("scanner_text")
        scan_task(scanner_host)
    return render_template('scanner.html', ips='', items=data_all)
Exemple #22
0
def telegram_message(message):
    """
    Отправка сообщения в telegram
    :param message: Сообщение (информация об оповещении)
    :return: None
    """
    try:
        notifications_data = MessageProducer(
            MongoDriver(host='localhost',
                        port=27017,
                        base="setting",
                        collection="notifications"))
        data = notifications_data.get_all_message()
        for item in data:
            bot = item['telegram_bot_api']
            chat_id = item['telegram_chat_id']
            requests.get(
                'https://api.telegram.org/bot{}/sendMessage'.format(bot),
                params=dict(chat_id=chat_id, text=message))
    except Exception as e:
        print(e)