import requests import argparse import sys import logging import os AUTHOR_TAG = "WPScan Vulnerability Parser BY 0o0" logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", ) def get_api_token(cli_token=None): env_token = os.getenv("WPSCAN_API_TOKEN") return cli_token or env_token def get_vulnerabilities(resource_type, identifier, api_token): url = f"https://wpscan.com/api/v3/{resource_type}/{identifier}" headers = {'Authorization': f'Token {api_token}'} logging.info(f"Запрос к WPScan API: {url}") response = requests.get(url, headers=headers) if response.status_code == 200: logging.info("Ответ получен успешно.") return response.json().get('vulnerabilities', []) else: logging.error(f"Ошибка: {response.status_code} - {response.text}") return [] def print_vulnerabilities(vulnerabilities): if not vulnerabilities: logging.warning("Нет уязвимостей или ресурс не найден.") return for v in vulnerabilities: logging.info(f"Заголовок: {v['title']}") logging.info(f"Исправлено в: {v.get('fixed_in', 'Не исправлено')}") logging.info("Референсы:") for key, refs in v['references'].items(): for ref in refs: logging.info(f" [{key}] {ref}") print("-" * 50) def main(): print("=" * 60) print(f"{AUTHOR_TAG}") print("=" * 60) parser = argparse.ArgumentParser(description="WPScan Vulnerability Parser BY 0o0") parser.add_argument("type", choices=["plugin", "theme", "core"], help="Тип ресурса (plugin, theme, core)") parser.add_argument("slug_or_version", help="Слаг плагина/темы или версия ядра WordPress") parser.add_argument("--token", help="WPScan API токен (альтернатива переменной окружения WPSCAN_API_TOKEN)") args = parser.parse_args() api_token = get_api_token(args.token) if not api_token: logging.critical("Не указан API токен. Используйте --token или переменную окружения WPSCAN_API_TOKEN.") sys.exit(1) type_map = { "plugin": "plugins", "theme": "themes", "core": "wordpresses" } resource_type = type_map[args.type] identifier = args.slug_or_version logging.info(f"Поиск уязвимостей для {args.type}: {identifier}") vulns = get_vulnerabilities(resource_type, identifier, api_token) print_vulnerabilities(vulns) if __name__ == "__main__": main() Python import requests import argparse import sys import logging import os AUTHOR_TAG = "WPScan Vulnerability Parser BY 0o0" logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", ) def get_api_token(cli_token=None): env_token = os.getenv("WPSCAN_API_TOKEN") return cli_token or env_token def get_vulnerabilities(resource_type, identifier, api_token): url = f"https://wpscan.com/api/v3/{resource_type}/{identifier}" headers = {'Authorization': f'Token {api_token}'} logging.info(f"Запрос к WPScan API: {url}") response = requests.get(url, headers=headers) if response.status_code == 200: logging.info("Ответ получен успешно.") return response.json().get('vulnerabilities', []) else: logging.error(f"Ошибка: {response.status_code} - {response.text}") return [] def print_vulnerabilities(vulnerabilities): if not vulnerabilities: logging.warning("Нет уязвимостей или ресурс не найден.") return for v in vulnerabilities: logging.info(f"Заголовок: {v['title']}") logging.info(f"Исправлено в: {v.get('fixed_in', 'Не исправлено')}") logging.info("Референсы:") for key, refs in v['references'].items(): for ref in refs: logging.info(f" [{key}] {ref}") print("-" * 50) def main(): print("=" * 60) print(f"{AUTHOR_TAG}") print("=" * 60) parser = argparse.ArgumentParser(description="WPScan Vulnerability Parser BY 0o0") parser.add_argument("type", choices=["plugin", "theme", "core"], help="Тип ресурса (plugin, theme, core)") parser.add_argument("slug_or_version", help="Слаг плагина/темы или версия ядра WordPress") parser.add_argument("--token", help="WPScan API токен (альтернатива переменной окружения WPSCAN_API_TOKEN)") args = parser.parse_args() api_token = get_api_token(args.token) if not api_token: logging.critical("Не указан API токен. Используйте --token или переменную окружения WPSCAN_API_TOKEN.") sys.exit(1) type_map = { "plugin": "plugins", "theme": "themes", "core": "wordpresses" } resource_type = type_map[args.type] identifier = args.slug_or_version logging.info(f"Поиск уязвимостей для {args.type}: {identifier}") vulns = get_vulnerabilities(resource_type, identifier, api_token) print_vulnerabilities(vulns) if __name__ == "__main__": main()
0О0, Я как понял он берет просто сам именно токен с профиля, мне нужно чтобы он аккаунты регистрировал и принимал код с почты, но там задач уже посложнее будет, нужно будет найти почтовый сервис с api принимающий коды Из бесплатных вариант кидали mail tm, Mailinator, Guerrilla Mail но мне было лень чекать