[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-gyoisamurai--GyoiThon":3,"tool-gyoisamurai--GyoiThon":64},[4,23,32,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":22},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,2,"2026-04-05T10:45:23",[13,14,15,16,17,18,19,20,21],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架","音频","ready",{"id":24,"name":25,"github_repo":26,"description_zh":27,"stars":28,"difficulty_score":29,"last_commit_at":30,"category_tags":31,"status":22},2181,"OpenHands","OpenHands\u002FOpenHands","OpenHands 是一个专注于 AI 驱动开发的开源平台，旨在让智能体（Agent）像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点，通过自动化流程显著提升开发速度。\n\n无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员，还是需要快速原型验证的技术团队，都能从中受益。OpenHands 提供了灵活多样的使用方式：既可以通过命令行（CLI）或本地图形界面在个人电脑上轻松上手，体验类似 Devin 的流畅交互；也能利用其强大的 Python SDK 自定义智能体逻辑，甚至在云端大规模部署上千个智能体并行工作。\n\n其核心技术亮点在于模块化的软件智能体 SDK，这不仅构成了平台的引擎，还支持高度可组合的开发模式。此外，OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩，证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能，支持与 Slack、Jira 等工具集成，并提供细粒度的权限管理，适合从个人开发者到大型企业的各类用户场景。",70612,3,"2026-04-05T11:12:22",[19,17,20,16],{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":10,"last_commit_at":38,"category_tags":39,"status":22},3074,"gpt4free","xtekky\u002Fgpt4free","gpt4free 是一个由社区驱动的开源项目，旨在聚合多种可访问的大型语言模型（LLM）和媒体生成接口，让用户能更灵活、便捷地使用前沿 AI 能力。它解决了直接调用各类模型时面临的接口分散、门槛高或成本昂贵等痛点，通过统一的标准将不同提供商的资源整合在一起。\n\n无论是希望快速集成 AI 功能的开发者、需要多模型对比测试的研究人员，还是想免费体验最新技术的普通用户，都能从中受益。gpt4free 提供了丰富的使用方式：既包含易于上手的 Python 和 JavaScript 客户端库，也支持部署本地图形界面（GUI），更提供了兼容 OpenAI 标准的 REST API，方便无缝替换现有应用后端。\n\n其技术亮点在于强大的多提供商支持架构，能够动态调度包括 Opus、Gemini、DeepSeek 等多种主流模型资源，并支持 Docker 一键部署及本地推理。项目秉持社区优先原则，在降低使用门槛的同时，也为贡献者提供了扩展新接口的便利框架，是探索和利用多样化 AI 资源的实用工具。",65970,"2026-04-04T01:02:03",[16,19,17],{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":10,"last_commit_at":46,"category_tags":47,"status":22},51,"gstack","garrytan\u002Fgstack","gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置，旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战，gstack 提供了一套标准化解决方案，帮助开发者实现堪比二十人团队的高效产出。\n\n这套配置特别适合希望提升交付效率的创始人、技术负责人，以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具，涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令（如 `\u002Freview` 进行代码审查、`\u002Fqa` 执行测试、`\u002Fplan-ceo-review` 规划功能），即可自动化处理从需求分析到部署上线的全链路任务。\n\n所有操作基于 Markdown 和斜杠命令，无需复杂配置，完全免费且遵循 MIT 协议。gstack 不仅是一套工具集，更是一种现代化的软件工厂实践，让单人开发者也能拥有严谨的工程流程。",64604,"2026-04-05T23:10:16",[17,16],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":22},193,"meilisearch","meilisearch\u002Fmeilisearch","Meilisearch 是一个开源的极速搜索服务，专为现代应用和网站打造，开箱即用。它能帮助开发者快速集成高质量的搜索功能，无需复杂的配置或额外的数据预处理。传统搜索方案往往需要大量调优才能实现准确结果，而 Meilisearch 内置了拼写容错、同义词识别、即时响应等实用特性，并支持 AI 驱动的混合搜索（结合关键词与语义理解），显著提升用户查找信息的体验。\n\nMeilisearch 特别适合 Web 开发者、产品团队或初创公司使用，尤其适用于需要快速上线搜索功能的场景，如电商网站、内容平台或 SaaS 应用。它提供简洁的 RESTful API 和多种语言 SDK，部署简单，资源占用低，本地开发或生产环境均可轻松运行。对于希望在不依赖大型云服务的前提下，为用户提供流畅、智能搜索体验的团队来说，Meilisearch 是一个高效且友好的选择。",56972,"2026-04-05T22:34:33",[13,17,14,20,16,18],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":22},4022,"awesome-claude-skills","ComposioHQ\u002Fawesome-claude-skills","awesome-claude-skills 是一个精心整理的开源资源库，旨在帮助用户挖掘和扩展 Claude AI 的潜力。它不仅仅是一份列表，更提供了实用的“技能（Skills）”模块，让 Claude 从单纯的文本生成助手，进化为能执行复杂工作流的智能代理。\n\n许多用户在使用 AI 时，常受限于其无法直接操作外部软件或处理特定格式文件的痛点。awesome-claude-skills 通过预设的工作流解决了这一问题：它不仅能教会 Claude 专业地处理 Word、PDF 等文档，进行代码开发与数据分析，还能借助 Composio 插件连接 Slack、邮箱及数百种常用应用，实现发送邮件、创建任务等自动化操作。这使得重复性任务变得标准化且可复用，极大提升了工作效率。\n\n无论是希望优化日常办公流程的普通用户、需要处理复杂文档的研究人员，还是寻求将 AI 深度集成到开发管线中的开发者，都能从中找到适合的解决方案。其独特的技术亮点在于“技能”的可定制性与强大的应用连接能力，让用户无需编写复杂代码，即可通过简单的配置让 Claude 具备跨平台执行真实任务的能力。如果你希望让 Claude",51312,"2026-04-05T19:04:23",[17,16],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":67,"owner_avatar_url":76,"owner_bio":77,"owner_company":78,"owner_location":78,"owner_email":79,"owner_twitter":78,"owner_website":78,"owner_url":80,"languages":81,"stars":98,"forks":99,"last_commit_at":100,"license":101,"difficulty_score":10,"env_os":102,"env_gpu":103,"env_ram":103,"env_deps":104,"category_tags":110,"github_topics":78,"view_count":29,"oss_zip_url":78,"oss_zip_packed_at":78,"status":22,"created_at":111,"updated_at":112,"faqs":113,"releases":144},476,"gyoisamurai\u002FGyoiThon","GyoiThon","GyoiThon is a growing penetration test tool using Machine Learning.","GyoiThon 是一款基于机器学习的智能渗透测试工具，专注于自动化发现 Web 服务器暴露的子域名并评估其安全性。它通过远程访问目标服务器，快速识别服务器运行的产品类型（如操作系统、Web 服务、数据库等），并主动扫描开放端口、检测潜在漏洞，尤其擅长处理大规模资产的安全审计任务。\n\n针对传统渗透测试中手动扫描效率低、子域名管理复杂等问题，GyoiThon 提供了自动化解决方案。通过集成 Google 自定义搜索 API，它能高效抓取互联网上与目标域名关联的子域名列表，并对每个子域名执行非破坏性的健康检查，包括 HTTP\u002FHTTPS 状态检测、IP 地址解析、Whois 信息收集及基础漏洞评估。这种自动化流程显著减少了人工排查时间，同时降低了误操作风险。\n\n工具主要面向网络安全研究人员、渗透测试工程师及 DevOps 团队。其机器学习能力可逐步优化资产识别模型，而模块化设计允许开发者扩展检测规则。对于需要定期进行安全合规检查的企业，GyoiThon 能提供结构化报告，帮助快速定位高风险资产。由于依赖 Python 3 环境且提供详细文档，具备基础编程能力的用户即可上手使用。","# **GyoiThon**: **Next generation penetration test tool**\n![Black Hat ASIA Arsenal 2018](https:\u002F\u002Fraw.githubusercontent.com\u002Ftoolswatch\u002Fbadges\u002Fmaster\u002Farsenal\u002Fasia\u002F2018.svg?sanitize=true) ![Black Hat ASIA Arsenal 2019](https:\u002F\u002Fraw.githubusercontent.com\u002Ftoolswatch\u002Fbadges\u002Fmaster\u002Farsenal\u002Fasia\u002F2019.svg?sanitize=true)  \n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgyoisamurai_GyoiThon_readme_c285469f0d72.png\" width=\"600\">  \n\nJapanese page is [here](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fwiki).  \n\n## Presentation\n * January 25th,2018:[JANOG41](https:\u002F\u002Fwww.janog.gr.jp\u002Fmeeting\u002Fjanog41\u002Fprogram\u002Fsp5sts)  \n * March 23th,2018:[Black Hat ASIA 2018 Arsenal](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Findex.html#gyoithon-9651)  \n * August 12th,2018:[DEFCON26 DemoLabs](https:\u002F\u002Fwww.defcon.org\u002Fhtml\u002Fdefcon-26\u002Fdc-26-demolabs.html#GyoiThon)  \n * October 24th,2018:[OWS in CSS2018](https:\u002F\u002Fwww.iwsec.org\u002Fows\u002F2018\u002F)  \n * November 3rd,2018:[AV TOKYO 2018 HIVE](http:\u002F\u002Fja.avtokyo.org\u002Favtokyo2018\u002Fevent)  \n * December 22-23th,2018:[SECCON YOROZU 2018](https:\u002F\u002F2018.seccon.jp\u002Fseccon\u002Fyorozu2018.html)  \n * March 28th,2019:[Black Hat ASIA 2019 Arsenal](https:\u002F\u002Fwww.blackhat.com\u002Fasia-19\u002Farsenal\u002Fschedule\u002Findex.html#gyoithon-penetration-testing-using-machine-learning-14359)  \n\n## Documents\n * [Installation](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Installation)  \n * [Usage](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Usage)  \n * [Tips](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Tips)  \n * [Demonstration](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cFgyBJuYQQ4) (Youtube)  \n\n## Slack\n * [https:\u002F\u002Fgyoithon.slack.com](https:\u002F\u002Fgyoithon.slack.com)  \n [Let's join GyoiThon Slack!!](https:\u002F\u002Fdocs.google.com\u002Fforms\u002Fd\u002Fe\u002F1FAIpQLSeuT-HNF-geek1IM3qBWViTVJbLUr3GZR2Hzuow30734X70gw\u002Fviewform)  \n\n## New function!!\nThe new GyoiThon \\(version 0.0.4\\) can **list up your subdomain facing on the internet**. And if the subdomain is published as a Web service, then GyoiThon executes a health check that a non-destructive vulnerability assessment.\n\n| Note |\n|:-----|\n| New function uses a **Google custom search API**. So if you use a new function, then you have to prepare a API key of Google Custom search. |\n\n * ex) Listing up your subdomain.  \nFirst, you have to prepare the `domain_list.csv` is following:  \n ```\n \"Domain Name\"\n mbsd.jp\n ```\nAnd you execute following command.  \n ```\n root@kali:~\u002FGyoiThon# python3 gyoithon.py -i --domain_list\n ```\nAs a result, you get a list of sundomains associated with the specified domain.    \n|Index|Domain|Sub-Domain|IP Address|Access Status (http)|Location (http)|Access Status (https)|Location (https)|Whois records|\n|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|\n|1|mbsd.jp|mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|301|https:\u002F\u002Fwww.mbsd.jp\u002F|***|\n|2|mbsd.jp|www.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|\n|3|mbsd.jp|www2.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|\n\n* ex) Listing up your subdomain and executing health check.  \nGyoiThon executes a list up your subdomain and if the subdomain is published as a Web service (with port 80 or 443 open), then GyoiThon execute a health check that a non-destructive vulnerability assessment.\n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -i --domain_list --through_health_check --safety\n```\nAs a result, you get a list of subdomains and assessment report.  \n|Index|Domain|Sub-Domain|IP Address|Access Status (http)|Location (http)|Access Status (https)|Location (https)|Whois records|Assessment results|\n|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|\n|1|mbsd.jp|mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|301|https:\u002F\u002Fwww.mbsd.jp\u002F|***|***|\n|2|mbsd.jp|www.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|***|\n|3|mbsd.jp|www2.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|***|\n\n## Overview\nGyoiThon is **Intelligence Gathering tool** for Web Server.  \n\nGyoiThon execute **remote access** to target Web server and **identifies product operated on the server** such as CMS, Web server software, Framework, Programming Language etc,. And, it can **execute exploit modules** to identified products using Metasploit. GyoiThon **fully automatically execute** above action.  \n\nGyoiThon's main features are following.  \n\n * Remote access\u002FFully automatic  \n GyoiThon can **fully automatically** gather the information of target Web server using only **remote access**. You only execute GyoiThon once for your operation.  \n\n * Non-destructive test  \n GyoiThon can gather information of target Web server using **only normally access**.  \n But, when you use a part of option, GyoiThon execute abnormally access such as sending exploit modules.  \n\n * Gathering various information  \n GyoiThon has various intelligence gathering engines such as Web crawler, Google Custom Search API, Censys, explorer of default contents, examination of cloud services etc,. By analyze gathered information using **strings pattern matching** and **machine learning**, GyoiThon can identify **product\u002Fversion\u002FCVE number** operated on the target web server, **unnecceary html comments**\u002F**debug messages**, **login page** etc,.  \n\n * Examination of real vulnerability  \n GyoiThon can execute exploit modules to identified products using Metasploit.  \n As a result, it can **examine real vulnerability of target web server**.  \n\n![Overview](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgyoisamurai_GyoiThon_readme_6417c6fa843d.png)\n\n| Note |\n|:-----|\n| If you are interested, **please use them in an environment under your control and at your own risk**. |\n\n## \u003Ca name='Installation'>Installation\u003C\u002Fa>\n1. git clone GyoiThon's repository.  \n```\nroot@kali:~# git clone https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon.git\n```\n\n2. Get python3-pip.  \n```\nroot@kali:~# apt-get update\nroot@kali:~# apt-get install python3-pip\n```\n\n3. install required python packages.  \n```\nroot@kali:~# cd GyoiThon\nroot@kali:~\u002FGyoiThon# pip3 install -r requirements.txt\nroot@kali:~\u002FGyoiThon# apt install python3-tk\n```\n\n4. Edit config.ini of GyoiThon.  \nYou have to edit your `config.ini`.  \nMore information is Usage.  \n\n## \u003Ca name='Usage'>Usage\u003C\u002Fa>\nBy using [default mode](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#default_mode) without option and [combination of several options](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#complex_mode), GyoiThon can gather various information of target web server.  \n\n```\nusage:\n    .\\gyoithon.py [-s] [-m] [-g] [-e] [-c] [-p] [-l --log_path=\u003Cpath>] [--no-update-vulndb]\n    .\\gyoithon.py [-d --category=\u003Ccategory> --vendor=\u003Cvendor> --package=\u003Cpackage>]\n    .\\gyoithon.py [-i]\n    .\\gyoithon.py -h | --help\noptions:\n    -s   Optional : Examine cloud service.\n    -m   Optional : Analyze HTTP response for identify product\u002Fversion using Machine Learning.\n    -g   Optional : Google Custom Search for identify product\u002Fversion.\n    -e   Optional : Explore default path of product.\n    -c   Optional : Discover open ports and wrong ssl server certification using Censys.\n    -p   Optional : Execute exploit module using Metasploit.\n    -l   Optional : Analyze log based HTTP response for identify product\u002Fversion.\n    -d   Optional : Development of signature and train data.\n    -i   Optional : Explore relevant FQDN with the target FQDN.\n    -h --help     Show this help message and exit.\n```\n\n### Preparation.  \n1. Edit target file `host.txt`.  \nYou have to write target web server to the `host.txt`.  \nWritting format is `protocol FQDN(or IP address) Port Crawling_root_path`.  \n\n* Example.  \n```\nhttps gyoithon.example.com 443 \u002F\n```\n\nIf you want to indicate multiple target information, you have to write below.  \n\n```\nhttps gyoithon.example.com 443 \u002F\nhttp 192.168.220.129 80 \u002Fvicnum\u002F\nhttps www.example.com 443 \u002Fcatalog\u002F\n```\n\n| Note |\n|:-----|\n| You insert `\u002F` at the beginning and end of Root Path. |\n\n2. Edit configuration file `config.ini`.  \nParameters to be changed by the user are defined in the setting file `config.ini`.  \nIf you want to change parameters, edit `config.ini`.  \nDetail of `config.ini` is [here](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fwiki\u002FConfigure).  \n\n### Execution of GyoiThon.  \n#### \u003Ca name='default_mode'>1. Default mode.\u003C\u002Fa>  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py\n```\n\nThe default mode gathers following minimum information.  \n\n 1. Gathering of HTTP responses by Web crawling.  \n 2. Identification of product\u002Fversion using string pattern matching.  \n 3. Examination of CVE number (from NVD) for identified products.  \n 4. Examination of unneccesary HTML\u002FJavaScript comments.  \n 5. Examination of unneccesary debug messages.  \n 6. Examination of login pages.  \n\n * Crawling setting  \n GyoiThon uses `Scrapy` that Python's library.  \n By change the parameters in `config.ini`, you can change setting of Scrapy.  \n\n |Category|Parameter|Description|\n |:----|:----|:----|\n |Spider|depth_limit|Maximum depth of crawling. Default value is `2` layer. |\n ||delay_time|Delay time of crawling. Default value is `3` (sec). |\n ||time_out|Spider close option. Timeout of crawling. Default value is `600` (sec). |\n ||item_count|Spider close option. Maximum items. Default value is `300`. |\n ||page_count|Spider close option. Maximum items per page. Default value is `0` (no limit). |\n ||error_count|Spider close option. Maximum errors. Default value is `0` (no limit). |\n\n * Examination speed setting  \n The examination number and HTTP response size greatly affect examination times.   \n By change the parameters in `config.ini`, you can adjust examination speed.  \n\n |Category|Parameter|Description|\n |:----|:----|:----|\n |Common|max_target_url|Maximum examination URL number. If the URL number gathered by Web Crawling exceeds this parameter value, excess URL number is discarded. Default value is `100`. `0` is unlimited.|\n ||max_target_byte|Maximum examination response size. If the response size exceeds this parameter value, excess response size is discarded. Default value is `10000` byte. `0` is unlimited.|\n ||scramble|The URL list gathered by Web crawling is randomly ordered. Default value is `1` (validity). `0` is invalid.|\n\n | Note |\n |:-----|\n | The examination speed and accuracy are trade-off. |\n\n#### 2. Examination of cloud services mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s\n```\n\nBy add `-s` option, GyoiThon identifies target web server uses cloud service or not  in addition to default mode.  \nBefore execution, you must change the below parameter of `config.ini`.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|CloudChecker|azure_ip_range|Source URL of Azure Datacenter IP Ranges. |\n\nThis parameter is source URL of Azure Datacenter IP range. This URL is changed a few per day. So, you must get the latest URL from link \"click here to download manually\" of page \"[Microsoft Azure Datacenter IP Ranges](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fconfirmation.aspx?id=41653)\" and set it to above parameter before execute GyoiThon.  \n\n#### 3. Machine Learning analysis mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -m\n```\n\nBy add `-m` option, GyoiThon identifies products\u002Fversion using Machine Learning (Naive Bayes) in addition to default mode.  \n\n#### 4. Google Hacking mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -g\n```\n\nBy add `-g` option, GyoiThon identifies products\u002Fversion using Google Custom Search API in addition to default mode. Before execution, you must set [API key](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fdashboard) and [Search engine ID](https:\u002F\u002Fsupport.google.com\u002Fcustomsearch\u002Fanswer\u002F2649143?hl=ja) to the below parameters.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|GoogleHack|api_key|API key of Google Custom Search API. |\n||search_engine_id|Google search engine ID. |\n\n| Note |\n|:-----|\n| You can use free Google Custom Search API of 100 queries per day. But, if you want to use more than 100 queries, you must pay fee the Google Custom Search API service. |\n\n#### 5. Exploration of default contents mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -e\n```\n\nBy add -e option, GyoiThon explores the default contents of products such as CMS, Web server software in addition to default mode.  \nBy change the parameters in `config.ini`, you can change setting of exploration.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|ContentExplorer|delay_time|Delay time of exploration. Default value is `1` (sec). |\n\n| Note |\n|:-----|\n| When you use this option, may be affected to heavy load of server because of GyoiThon execute numerous accesses (hundreds accesses) against the target web server. In addition, by numerous 404 error logs are wrote to access log, it may be to caught by SOC (Security Operation Center). So, if you use this option, **please notify person concerned such as SOC, administrator and use them in an environment under your control and at your own risk and**. |\n\n#### 6. Censys cooperation mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -c\n```\n\nBy add `-c` option, GyoiThon examines open port number and server certification using [Censys](https:\u002F\u002Fcensys.io\u002F).  \nBefore execution, you must set API key and Secret key to the below parameters.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|Censys|api_id|API key of Censys. |\n||secret|Secret key of Censys. |\n\n#### 7. Metasploit cooperation mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -p\n```\n\nBy add `-p` option, GyoiThon examines real vulnerabilities such as DoS and backdoor using Metasploit in addition to default mode.  \nBefore execution, you must launch RPC server of Metasploit and set below parameters in `config.ini`.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|Exploit|server_host|Allocated IP address to the RPC Server (`msgrpc`). |\n||server_port|Allocated port number to the RPC Server (`msgrpc`). |\n||msgrpc_user|User ID for authorization of `msgrpc`. |\n||msgrpc_pass|Password for authorization of `msgrpc`. |\n||LHOST|Allocated IP address to the RPC Server (`msgrpc`).|\n\n| Note |\n|:-----|\n| When you use this option, may be heavily affected to server operation because of GyoiThon execute the exploit against the target web server. In addition, this option may be caught by SOC (Security Operation Center) because of exploits are like a real attacks. So, if you use this option, **please notify person concerned such as SOC, administrator and use them in an environment under your control and at your own risk and**. |\n\n#### 8. Stored logs based analysis mode.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -l --log_path=\"Full path of stored logs\"\n```\n\nBy add `-l` option, GyoiThon executes various examination using stored HTTP responses without web crawling.  \n\nThis mode assumes the web application that GyoiThon cannot execute web crawling.  \nGyoiThon can execute various examination similar web crawling of default mode using stored HTTP responses gathered by local proxy tool.  \n\n| Note |\n|:-----|\n| Log file's extension is `.log`. |\n\n#### \u003Ca name='complex_mode'>9. Combination of multiple options\u003C\u002Fa>.  \n##### Combination of \"Examination of cloud services mode\" and \"Machine Learning analysis mode\".\n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m\n```\n\n##### Combination of \"Examination of cloud services mode\" and \"Google Hacking mode\".\n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -g\n```\n\n##### Combination of \"Examination of cloud services mode\", \"Machine Learning analysis mode\" and \"Google Hacking mode\".\n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m -g\n```\n\n##### All option.\n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m -g -e -c -p -l --log_path=\"Full path of stored logs\"\n```\n\n#### \u003Ca name='generating_sig'>10. Generating signature\u002Ftrain data mode\u003C\u002Fa>.  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -d --category=CMS --vendor=joomla! --package=Joomla!@3.9.4@_origin.tar.zip\n```\n\nBy add `-d` option, GyoiThon generates signatures\u002Ftrain data for detecting Web products operated on the target Web Server.  \nThe options is following.  \n\n|Option|Description|Example|\n|:----|:----|:----|\n|--category|Product's category in signature\u002Ftrain data.|`OS` or `WEB` or `FRAMEWORK` or `CMS`. |\n|--vendor|Product's vendor name in signature\u002Ftrain data. |`wordpress`, `joomla!`, `drupal`.|\n|--package|Importing target package file name. You have to separate three fields that product name, version and extension using `@`.|`WordPress@4.9.8@.tar.gz`, `Joomla!@3.9.4@_origin.tar.zip`, `Drupal@8.6.3@.tar.gz`. |\n\n### Check report.  \nAfter finished execution of GyoiThon, reports of each target are generated to the following path.    \n\n```\nroot@kali:~\u002FGyoiThon\u002Freport# ls\ngyoithon_report_192.168.220.129_80_1082018338.csv\ngyoithon_report_192.168.220.129_80_bodgeit.csv\ngyoithon_report_192.168.220.129_80_cyclone.csv\ngyoithon_report_192.168.220.129_80_vicnum.csv\ngyoithon_report_192.168.220.129_80_WackoPicko.csv\ngyoithon_censys_report_www.gyoithon.example.com_443_test.csv\n```\n\nGyoiThon generates following two types report.  \n\n * `gyoithon_report_target FQDN(or IP address)_Port number_Root Path.csv`.  \n This is main report that mainly including product name, version, cve etc,.  \n Report format is `gyoithon_report_target FQDN(or IP address)_Port number_Root Path.csv`.  \n Each column's detail is following.  \n\n|Column|Description|Example|\n|:----|:----|:----|\n|fqdn|FQDN of target web server.|`www.gyoithon.example.com`|\n|ip_addr|IP address of target web server.|`192.168.220.129`|\n|port|Port number of target web server.|`80`|\n|cloud_type|Cloud service name (Azure or AWS or GCP or Unknown).|`AWS`|\n|method|Examination way of GyoiThon.|`Crawling`|\n|url|Accessed URL.|`http:\u002F\u002F192.168.220.129:80\u002FWackoPicko\u002Fadmin\u002Findex.php?page=login`|\n|vendor_name|Vendor name of identified products.|`apache`|\n|prod_name|Identified products.|`http_server`|\n|prod_version|Version of identified products.|`2.2.14`|\n|prod_trigger|Trigger of identified products.|`Apache\u002F2.2.14`|\n|prod_type|Product category (Web or CMS or Framework etc..).|`Web`|\n|prod_vuln|CVE number according to identified products (desc CVSS score).|`CVE-2017-3167, CVE-2017-3169, CVE-2017-7668` ...|\n|origin_login|Login page is existing or not (Log: Analysis using Machine Leaerning, Url: Analysis using string pattern matching in URL.|`Log : 37.5 %\\nUrl : 100.0 %`|\n|origin_login_trigger|Trigger of identifed login page.|`Log : name\",\u003Cinput type=\"password\"\\nUrl : login`|\n|wrong_comment|Identified unnecessary comments.|`パスワードは「password1234」です。`|\n|error_msg|Identified unnecessary debug messages.|`Warning: mysql_connect() ..snip.. in auth.php on line 38`|\n|server_header|Server header of HTTP response.|`Server: Apache\u002F2.2.14 (Ubuntu) mod_mono\u002F2.4.3 PHP\u002F5.3.2`|\n|log|Path of raw data.|`\u002Fusr\u002Fhome\u002F~snip~\u002Fhttp_192.168.220.129_80_20181112170525765.log`|\n|date|Examination date.|`2018\u002F11\u002F12  17:05:25`|\n\n * `gyoithon_censys_report_target FQDN(or IP address)_Port number_Root Path.csv`.  \n This is search result report using Censys that including open ports, certification information etc,.  \n Report format is `gyoithon_censys_report_target FQDN(or IP address)_Port number_Root Path.csv`.  \n Each column's detail is following.  \n\n|Column|Description|Example|\n|:----|:----|:----|\n|fqdn|FQDN of target web server.|`www.gyoithon.example.com`|\n|ip_addr|IP address of target web server.|`192.168.220.129`|\n|category|Information category.|`Server Info` or `Certification Info`|\n|open_port|Open web port.|`443`|\n|protocol|Protocol of open web port.|`https`|\n|sig_algorithm|Signature algorithm of certification.|`SHA256-RSA`|\n|cname|Common name of certification.|`www.gyoithon.example.com`|\n|valid_start|Validity start date of certification.|`2018-08-15T00:00:00Z`|\n|valid_end|Validity end date of certification.|`2019-09-16T12:00:00Z`|\n|organization|Organization name of certification.|`GyoiThon coorporation, Inc.`|\n|date|Examination date.|`2018\u002F11\u002F22  11:19:36`|\n\n| Note |\n|:-----|\n| Because Censys needs several days to several weeks to survey the entire Internet, the information obtained from Censys may not be up-to-date.|\n\n## \u003Ca name='Tips'>Tips\u003C\u002Fa>\n### 1. How to manually add new signature (string matching patterns).  \n`signatures` path includes below files.  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fsignatures\u002F ls\nsignature_product.txt\nsignature_default_content.txt\nsignature_search_query.txt\nsignature_comment.txt\nsignature_error.txt\nsignature_page_type_from_url.txt\n```\n\n#### `signature_product.txt`  \nThis is string matching patterns for identification of product in \u003Ca name='default_mode'>default mode\u003C\u002Fa>.  \nIf you want to add new string matching pattern, you have to write it such following format.   \n\n```\nFormat: field1@field2@field3@field4@field5\n```\n\n|Type|Field#|Description|Example|\n|:---|:---|:---|:---|\n|Required|1|Product Category.|`CMS`|\n|Required|2|Vendor name.|`drupal`|\n|Required|3|Product name.|`drupal`|\n|Optional|4|Version binded with this signature.|`8.0` |\n|Required|5|Regex of identifying product.|`.*(X-Generator: Drupal 8).*`|\n\nIf you don't need optional field, you must set `*` to this field.  \n\n* Example  \n```\nCMS@wordpress@wordpress@*@.*(WordPress ([0-9]+[\\.0-9]*[\\.0-9]*)).*\nCMS@drupal@drupal@8.0@.*(X-Generator: Drupal 8).*\n```\n\n| Note |\n|:-----|\n| If you want to extract product version, you write two regex groups (**the second regex is used for version extraction**). |\n\n#### `signature_default_content.txt`  \nThis is string matching patterns for identification of product in \u003Ca name='explore_contents_mode'>Exploration of default contents mode\u003C\u002Fa>.  \nIf you want to add new string matching pattern, you have to write it such following format.   \n\n```\nFormat: field1@field2@field3@field4@field5@field6@field7@field8\n```\n\n|Type|Field#|Description|Example|\n|:---|:---|:---|:---|\n|Required|1|Product Category.|`CMS`|\n|Required|2|Vendor name.|`sixapart`|\n|Required|3|Product name.|`movabletype`|\n|Optional|4|Version binded with this signature.|`*` |\n|Required|5|Explore path|`\u002Freadme.html`|\n|Optional|6|Regex of to confirm product.|`.*(Movable Type).*`|\n|Optional|7|Regex of identifying version.|`(v=([0-9]+[\\.0-9]*[\\.0-9]*))`|\n|Required|8|Login page or not.|Login page is `1`, Not login page is `0`|\n\nIf you don't need optional field, you must set `*` to this field.  \n\n* Example  \n```\nWeb@apache@http_server@*@\u002Fserver-status@*@Version:.*(Apache\u002F([0-9]+[\\.0-9]*[\\.0-9]*))@0\nCMS@sixapart@movabletype@*@\u002Freadme.html@.*(Movable Type).*@(v=([0-9]+[\\.0-9]*[\\.0-9]*))@0\n```\n\n| Note |\n|:-----|\n| If you want to extract product version, you write two regex groups (**the second regex is used for version extraction**). |\n\n| Note |\n|:-----|\n| If GyoiThon cannot confirm the product by just `Explore path`, you need to indicate the `Regex of to confirm product` field. GyoiThon accesses the URL that `Explore path` and examines the HTTP response using `Regex of to confirm product`. If this regex matches, GyoiThon judges that the product exists. |\n\n#### `signature_search_query.txt`  \nThis is Google Custom Search query for identification of product in \u003Ca name='google_hacking_mode'>Google Hacking mode\u003C\u002Fa>.  \nIf you want to add new query, you have to write it such following format.   \n\n```\nFormat: field1@field2@field3@field4@field5@field6@field7@field8\n```\n\n|Type|Field#|Description|Example|\n|:---|:---|:---|:---|\n|Optional|1|Product Category.|`CMS`|\n|Optional|2|Vendor name.|`sixapart`|\n|Optional|3|Product name.|`movabletype`|\n|Optional|4|Version binded with this signature.|`*` |\n|Required|5|Google Custom Search query|`inurl:\u002Freadme.html`|\n|Optional|6|Regex of to confirm product.|`.*(Movable Type).*`|\n|Optional|7|Regex of identifying version.|`(v=([0-9]+[\\.0-9]*[\\.0-9]*))`|\n|Optional|8|Login page or not.|Login page is `1`, Not login page is `0`|\n\nIf you don't need optional field, you must set `*` to this field.  \n\n* Example  \n```\nWeb@apache@http_server@*@inurl:\u002Fserver-status@*@Version:.*(Apache\u002F([0-9]+[\\.0-9]*[\\.0-9]*))@0\nCMS@sixapart@movabletype@*@inurl:\u002Freadme.html@.*(Movable Type).*@(v=([0-9]+[\\.0-9]*[\\.0-9]*))@0\n*@*@*@*@filetype:bak@*@*@0\n```\n\n| Note |\n|:-----|\n| If you want to extract product version, you write two regex groups (**the second regex is used for version extraction**). |\n\n| Note |\n|:-----|\n| If GyoiThon cannot confirm the product by just `Google Custom Search query`, you need to indicate the `Regex of to confirm product` field. GyoiThon accesses the URL included in the execution result of Google Custom Search API and examines the HTTP response using `Regex of to confirm product`. If this regex matches, GyoiThon judges that the product exists. |\n\n#### `signature_comment.txt`  \nThis is string matching patterns for identification of unnecessary comments in \u003Ca name='default_mode'>default mode\u003C\u002Fa>.  \nIf you want to add new string matching pattern, you have to write it such following format.   \n\n```\nFormat: field1\n```\n\n|Type|Field#|Description|\n|:---|:---|:---|\n|Required|1|Regex of unnecessary comment.|\n\n* Example  \n```\n(user\\s*=|[\\\"']user[\\\"']\\s*:|user_id\\s*=|[\\\"']user_id[\\\"']\\s*:|id\\s*=|[\\\"']id[\\\"']\\s*:)\n(select\\s+[\\s\\r\\n\\w\\d,\\\"']*\\s+from)\n```\n\n#### `signature_error.txt`  \nThis is string matching patterns for identification of unnecessary debug message in \u003Ca name='default_mode'>default mode\u003C\u002Fa>.  \nIf you want to add new string matching pattern, you have to write it such following format.   \n\n```\nFormat: field1\n```\n\n|Type|Field#|Description|\n|:---|:---|:---|\n|Required|1|Regex of unnecessary debug message.|\n\n* Example  \n```\n(ORA-[0-9a-zA-Z\\.])\n(fail|error|notice|parse|warning|fatal)[^\\n]*line[^\\n]*[0-9]+\n```\n\n#### `signature_page_type_from_url.txt`  \nThis is string matching patterns for URL based identification of page type in \u003Ca name='default_mode'>default mode\u003C\u002Fa>.  \nIf you want to add new string matching pattern, you have to write it such following format.   \n\n```\nFormat: field1@field2\n```\n\n|Type|Field#|Description|\n|:---|:---|:---|\n|Required|1|Page type.|\n|Required|2|Regex of identifying page type.|\n\n* Example  \n```\nLogin@.*(login|log_in|logon|log_on|signin|sign_in).*\n```\n\n|Note|\n|:---|\n|Above vendor name and product name must be match a name in [CPE format](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCommon_Platform_Enumeration).|\n\n### 2. How to manually add learning data.  \n`modules\u002Ftrain_data\u002F` path includes two train data for Machine Learning.  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Ftrain_data\u002F ls\ntrain_cms_in.txt\ntrain_page_type.txt\n```\n\n#### `train_cms_in.txt`  \nThis is train data for Machine Learning analysis in \u003Ca name='machine_learning_mode'>Machine Learning mode\u003C\u002Fa>.  \nIf you want to add new train data, you have to write it such following format.   \n\n```\nFormat: field1@field2@field3@field4\n```\n\n|Type|Field#|Description|Example|\n|:---|:---|:---|:---|\n|Required|1|Vendor name.|`joomla`|\n|Required|2|Product name.|`joomla\\!`|\n|Optional|3|Version binded with this train data.|`*` |\n|Required|4|Feature of product expressed by regex.|`(Set-Cookie: [a-z0-9]{32}=.*);`|\n\nIf you don't need optional field, you must set `*` to this field.  \n\n* Example  \n```\njoomla@joomla\\!@*@(Set-Cookie: [a-z0-9]{32}=.*);\njoomla@joomla\\!@*@(Set-Cookie: .*=[a-z0-9]{26,32});\nheartcore@heartcore@*@(Set-Cookie:.*=[A-Z0-9]{32});.*\nheartcore@heartcore@*@(\u003Cmeta name=[\"']author[\"'] content=[\"']{2}).*\n```\n\n|Note|\n|:---|\n|Above vendor name and product name must be match a name in [CPE format](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCommon_Platform_Enumeration).|\n\n#### `train_page_type.txt`  \nThis is train data for identifying page type usin Machine Learning in \u003Ca name='default_mode'>default mode\u003C\u002Fa>.  \nIf you want to add new train data, you have to write it such following format.   \n\n```\nFormat: field1@field2\n```\n\n|Type|Field#|Description|\n|:---|:---|:---|\n|Required|1|Category.|\n|Required|2|Feature of page expressed by regex.|\n\n* Example  \n```\nLogin@.*(\u003Cinput.*type=[\\\"']text[\\\"'].*name=[\\\"']user|uid|username|user_name|name[\\\"']).*>\nLogin@.*(\u003Cinput.*type=[\\\"']password[\\\"']).*>\n```\n\n### 3. How to change \"Exploit module's option\".\nWhen GyoiThon exploits, it uses **default value** of Exploit module options.  \nIf you want to change option values, please input any value to `\"user_specify\"` in `exploit_tree.json` as following.  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Fdata\u002F ls\nexploit_tree.json\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Fdata\u002F vim exploit_tree.json\n\n...snip...\n\n\"unix\u002Fwebapp\u002Fjoomla_media_upload_exec\": {\n    \"targets\": {\n        \"0\": [\n            \"generic\u002Fcustom\",\n            \"generic\u002Fshell_bind_tcp\",\n            \"generic\u002Fshell_reverse_tcp\",\n\n...snip...\n\n        \"TARGETURI\": {\n            \"type\": \"string\",\n            \"required\": true,\n            \"advanced\": false,\n            \"evasion\": false,\n            \"desc\": \"The base path to Joomla\",\n            \"default\": \"\u002Fjoomla\",\n            \"user_specify\": \"\u002Fmy_original_dir\u002F\"\n        },\n```\n\nAbove example is to change value of `TARGETURI` option in exploit module \"`exploit\u002Funix\u002Fwebapp\u002Fjoomla_media_upload_exec`\" to \"`\u002Fmy_original_dir\u002F`\" from \"`\u002Fjoomla`\".  \n\n### 4. How to access via proxy server.\nGyoiThon can access to target server via **proxy server**.  \nIf you want to use proxy server, please input proxy server information in `config.ini`.  \n\n|Category|Parameter|Description|\n|:----|:----|:----|\n|Common|proxy|Proxy server information. Format is `scheme:\u002F\u002Fhostname:port` (ex: `http:\u002F\u002Fproxy-example:8083`). |\n||proxy_user|If you need the proxy authentication, please input auth user. |\n||proxy_pass|If you need the proxy authentication, please input auth password. |\n\n| Note |\n|:-----|\n| Now, GyoiThon is implemented only Basic Authentication. |\n\n## Operation check environment\n * Kali Linux 2018.2 (for Metasploit)  \n   * CPU: Intel(R) Core(TM) i5-5200U 2.20GHz  \n   * Memory: 8.0GB  \n   * Metasploit Framework 4.16.48-dev  \n   * Python 3.6.6  \n\n## Licence\n[Apache License 2.0](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FLICENSE)\n\n## Contact us\n gyoiler3@gmail.com  \n\n * [Masafumi Masuya](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#masafumi-masuya-36855)  \n [https:\u002F\u002Ftwitter.com\u002Fgyoizamurai](https:\u002F\u002Ftwitter.com\u002Fgyoizamurai)\n * [Toshitsugu Yoneyama](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#toshitsugu-yoneyama-36864)  \n [https:\u002F\u002Ftwitter.com\u002Fyoneyoneyo](https:\u002F\u002Ftwitter.com\u002Fyoneyoneyo)\n * [Isao Takaesu](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#isao-takaesu-33544)  \n [https:\u002F\u002Ftwitter.com\u002Fbbr_bbq](https:\u002F\u002Ftwitter.com\u002Fbbr_bbq)\n","# **GyoiThon**: **下一代渗透测试工具**  \n![Black Hat ASIA Arsenal 2018](https:\u002F\u002Fraw.githubusercontent.com\u002Ftoolswatch\u002Fbadges\u002Fmaster\u002Farsenal\u002Fasia\u002F2018.svg?sanitize=true) ![Black Hat ASIA Arsenal 2019](https:\u002F\u002Fraw.githubusercontent.com\u002Ftoolswatch\u002Fbadges\u002Fmaster\u002Farsenal\u002Fasia\u002F2019.svg?sanitize=true)  \n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgyoisamurai_GyoiThon_readme_c285469f0d72.png\" width=\"600\">  \n\n日文页面请见[此处](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fwiki).  \n\n## 演示记录  \n * 2018年1月25日：[JANOG41](https:\u002F\u002Fwww.janog.gr.jp\u002Fmeeting\u002Fjanog41\u002Fprogram\u002Fsp5sts)  \n * 2018年3月23日：[Black Hat ASIA 2018 Arsenal](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Findex.html#gyoithon-9651)  \n * 2018年8月12日：[DEFCON26 DemoLabs](https:\u002F\u002Fwww.defcon.org\u002Fhtml\u002Fdefcon-26\u002Fdc-26-demolabs.html#GyoiThon)  \n * 2018年10月24日：[OWS in CSS2018](https:\u002F\u002Fwww.iwsec.org\u002Fows\u002F2018\u002F)  \n * 2018年11月3日：[AV TOKYO 2018 HIVE](http:\u002F\u002Fja.avtokyo.org\u002Favtokyo2018\u002Fevent)  \n * 2018年12月22-23日：[SECCON YOROZU 2018](https:\u002F\u002F2018.seccon.jp\u002Fseccon\u002Fyorozu2018.html)  \n * 2019年3月28日：[Black Hat ASIA 2019 Arsenal](https:\u002F\u002Fwww.blackhat.com\u002Fasia-19\u002Farsenal\u002Fschedule\u002Findex.html#gyoithon-penetration-testing-using-machine-learning-14359)  \n\n## 文档  \n * [安装](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Installation)  \n * [使用方法](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Usage)  \n * [技巧](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#Tips)  \n * [演示视频](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cFgyBJuYQQ4) (YouTube)  \n\n## Slack  \n * [https:\u002F\u002Fgyoithon.slack.com](https:\u002F\u002Fgyoithon.slack.com)  \n [加入 GyoiThon Slack 群组！](https:\u002F\u002Fdocs.google.com\u002Fforms\u002Fd\u002Fe\u002F1FAIpQLSeuT-HNF-geek1IM3qBWViTVJbLUr3GZR2Hzuow30734X70gw\u002Fviewform)  \n\n## 新功能！！  \n新版 GyoiThon（版本 0.0.4）可以**列出您对外暴露的子域名**。如果子域名作为 Web 服务发布，则 GyoiThon 会执行非破坏性的漏洞评估健康检查。  \n\n| 注意 |\n|:-----|\n| 新功能使用 **Google 定制搜索 API**（Google Custom Search API）。因此，如果您要使用新功能，则需要准备 Google 定制搜索的 API 密钥。 |\n\n * 示例) 列出您的子域名。  \n首先，您需要准备如下格式的 `domain_list.csv`：  \n ```\n \"Domain Name\"\n mbsd.jp\n ```\n然后执行以下命令：  \n ```\n root@kali:~\u002FGyoiThon# python3 gyoithon.py -i --domain_list\n ```\n结果将获得与指定域名关联的子域名列表。    \n|Index|Domain|Sub-Domain|IP Address|Access Status (http)|Location (http)|Access Status (https)|Location (https)|Whois records|\n|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|\n|1|mbsd.jp|mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|301|https:\u002F\u002Fwww.mbsd.jp\u002F|***|\n|2|mbsd.jp|www.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|\n|3|mbsd.jp|www2.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|\n\n* 示例) 列出子域名并执行健康检查。  \nGyoiThon 会列出您的子域名，并且如果子域名作为 Web 服务发布（端口 80 或 443 开放），则 GyoiThon 会执行非破坏性的漏洞评估健康检查。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -i --domain_list --through_health_check --safety\n```\n结果将获得子域名列表和评估报告。  \n|Index|Domain|Sub-Domain|IP Address|Access Status (http)|Location (http)|Access Status (https)|Location (https)|Whois records|Assessment results|\n|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|\n|1|mbsd.jp|mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|301|https:\u002F\u002Fwww.mbsd.jp\u002F|***|***|\n|2|mbsd.jp|www.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|***|\n|3|mbsd.jp|www2.mbsd.jp|['40.115.251.148']|301|https:\u002F\u002Fwww.mbsd.jp\u002F|200|-|-|***|\n\n## 概述  \nGyoiThon 是一个 **Web 服务器情报收集工具**（Intelligence Gathering tool）。  \n\nGyoiThon 会执行 **远程访问**（remote access）目标 Web 服务器，并 **识别服务器上运行的产品**，如 CMS、Web 服务器软件、框架、编程语言等。此外，它可以通过 Metasploit 对识别出的产品 **执行利用模块**（exploit modules）。GyoiThon 可以 **全自动执行**上述操作。  \n\nGyoiThon 的主要功能如下：  \n\n * 远程访问\u002F全自动  \n GyoiThon 可以仅通过 **远程访问** 就 **全自动** 收集目标 Web 服务器的信息。您只需运行一次 GyoiThon 即可完成操作。  \n\n * 非破坏性测试  \n GyoiThon 通过 **正常访问** 收集目标 Web 服务器的信息。  \n 但，当您使用某些选项时，GyoiThon 会执行异常访问，例如发送利用模块。  \n\n * 收集多种信息  \n GyoiThon 包含多种情报收集引擎，如网络爬虫、Google 定制搜索 API、默认内容探索器、云服务检查等。通过使用 **字符串模式匹配** 和 **机器学习** 分析收集到的信息，GyoiThon 可以识别目标 Web 服务器上运行的 **产品\u002F版本\u002FCVE 编号**、**不必要的 HTML 注释**\u002F**调试信息**、**登录页面** 等。  \n\n * 实际漏洞检查  \n GyoiThon 可以通过 Metasploit 对识别出的产品执行利用模块。  \n 因此，它可以 **检查目标 Web 服务器的实际漏洞**。  \n\n![Overview](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgyoisamurai_GyoiThon_readme_6417c6fa843d.png)\n\n| 注意 |\n|:-----|\n| 如果您感兴趣，请 **在您控制的环境中自行承担风险使用**。 |\n\n## \u003Ca name='Installation'>安装\u003C\u002Fa>\n1. 克隆 GyoiThon 的仓库。  \n```\nroot@kali:~# git clone https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon.git\n```\n\n2. 安装 python3-pip。  \n```\nroot@kali:~# apt-get update\nroot@kali:~# apt-get install python3-pip\n```\n\n3. 安装所需的 Python 包。  \n```\nroot@kali:~# cd GyoiThon\nroot@kali:~\u002FGyoiThon# pip3 install -r requirements.txt\nroot@kali:~\u002FGyoiThon# apt install python3-tk\n```\n\n4. 编辑 GyoiThon 的 config.ini。  \n您需要编辑自己的 `config.ini` 文件。  \n更多信息请参见使用方法。\n\n## \u003Ca name='Usage'>用法\u003C\u002Fa>\n通过使用[默认模式](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#default_mode)（无需选项）和[多种选项组合](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FREADME.md#complex_mode)，GyoiThon可以收集目标Web服务器的各种信息。  \n\n```\nusage:\n    .\\gyoithon.py [-s] [-m] [-g] [-e] [-c] [-p] [-l --log_path=\u003Cpath>] [--no-update-vulndb]\n    .\\gyoithon.py [-d --category=\u003Ccategory> --vendor=\u003Cvendor> --package=\u003Cpackage>]\n    .\\gyoithon.py [-i]\n    .\\gyoithon.py -h | --help\noptions:\n    -s   可选 : 检查云服务。\n    -m   可选 : 通过机器学习（Machine Learning）分析HTTP响应以识别产品\u002F版本。\n    -g   可选 : 使用Google自定义搜索识别产品\u002F版本。\n    -e   可选 : 探索产品的默认路径。\n    -c   可选 : 使用Censys发现开放端口和SSL证书错误。\n    -p   可选 : 使用Metasploit执行利用模块。\n    -l   可选 : 基于HTTP响应日志分析识别产品\u002F版本。\n    -d   可选 : 签名和训练数据的开发。\n    -i   可选 : 探索与目标FQDN相关的其他FQDN。\n    -h --help     显示此帮助信息并退出。\n```\n\n### 准备工作  \n1. 编辑目标文件 `host.txt`。  \n需要将目标Web服务器写入 `host.txt` 文件。  \n书写格式为 `协议 FQDN（或IP地址） 端口 爬取根路径`。  \n\n* 示例。  \n```\nhttps gyoithon.example.com 443 \u002F\n```\n\n如果需要指定多个目标信息，需按以下格式编写：  \n\n```\nhttps gyoithon.example.com 443 \u002F\nhttp 192.168.220.129 80 \u002Fvicnum\u002F\nhttps www.example.com 443 \u002Fcatalog\u002F\n```\n\n| 注意 |\n|:-----|\n| 根路径的开头和结尾需要添加 `\u002F` 符号。 |\n\n2. 编辑配置文件 `config.ini`。  \n用户需要修改的参数在设置文件 `config.ini` 中定义。  \n如果需要修改参数，请编辑 `config.ini`。  \n`config.ini` 的详细说明请见[此处](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fwiki\u002FConfigure)。  \n\n### GyoiThon的执行  \n#### \u003Ca name='default_mode'>1. 默认模式。\u003C\u002Fa>  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py\n```\n\n默认模式会收集以下基础信息：  \n\n 1. 通过Web爬虫收集HTTP响应。  \n 2. 使用字符串模式匹配识别产品\u002F版本。  \n 3. 从NVD检查识别出产品的CVE编号。  \n 4. 检查不必要的HTML\u002FJavaScript注释。  \n 5. 检查不必要的调试信息。  \n 6. 检查登录页面。  \n\n * 爬虫设置  \n GyoiThon使用Python库`Scrapy`。  \n 通过修改 `config.ini` 中的参数，可以调整Scrapy的设置。  \n\n |类别|参数|描述|\n |:----|:----|:----|\n |Spider|depth_limit|最大爬取深度。默认值为`2`层。 |\n ||delay_time|爬取延迟时间。默认值为`3`（秒）。 |\n ||time_out|爬虫关闭选项。超时时间。默认值为`600`（秒）。 |\n ||item_count|爬虫关闭选项。最大项目数。默认值为`300`。 |\n ||page_count|爬虫关闭选项。每页最大项目数。默认值为`0`（无限制）。 |\n ||error_count|爬虫关闭选项。最大错误数。默认值为`0`（无限制）。 |\n\n * 检查速度设置  \n 检查数量和HTTP响应大小会显著影响检查时间。  \n 通过修改 `config.ini` 中的参数，可以调整检查速度。  \n\n |类别|参数|描述|\n |:----|:----|:----|\n |Common|max_target_url|最大检查URL数量。若通过Web爬虫收集的URL数量超过此参数值，超出的URL将被丢弃。默认值为`100`。`0`表示无限制。|\n ||max_target_byte|最大检查响应大小。若响应大小超过此参数值，超出的响应将被丢弃。默认值为`10000`字节。`0`表示无限制。|\n ||scramble|通过Web爬虫收集的URL列表将被随机排序。默认值为`1`（有效）。`0`表示无效。|\n\n | 注意 |\n |:-----|\n | 检查速度和准确性是相互制约的。 |\n\n#### 2. 云服务检查模式。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s\n```\n\n添加 `-s` 选项后，GyoiThon会在默认模式基础上检查目标Web服务器是否使用云服务。  \n执行前必须修改 `config.ini` 中的以下参数。  \n\n|类别|参数|描述|\n|:----|:----|:----|\n|CloudChecker|azure_ip_range|Azure数据中心IP范围的源URL。 |\n\n此参数是Azure数据中心IP范围的源URL。该URL每天会更新几次。因此，在执行GyoiThon前，必须从 \"[Microsoft Azure数据中心IP范围](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fconfirmation.aspx?id=41653)\" 页面点击\"点击此处手动下载\"获取最新URL，并将其设置为上述参数。  \n\n#### 3. 机器学习分析模式。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -m\n```\n\n添加 `-m` 选项后，GyoiThon会在默认模式基础上使用朴素贝叶斯（Naive Bayes）机器学习识别产品\u002F版本。  \n\n#### 4. Google Hacking模式。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -g\n```\n\n添加 `-g` 选项后，GyoiThon会在默认模式基础上使用Google自定义搜索API识别产品\u002F版本。执行前必须将 [API密钥](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fdashboard) 和 [搜索引擎ID](https:\u002F\u002Fsupport.google.com\u002Fcustomsearch\u002Fanswer\u002F2649143?hl=ja) 设置到以下参数中。  \n\n|类别|参数|描述|\n|:----|:----|:----|\n|GoogleHack|api_key|Google自定义搜索API的API密钥。 |\n||search_engine_id|Google搜索引擎ID。 |\n\n| 注意 |\n|:-----|\n| 可免费使用Google自定义搜索API每日100次查询。但若需要超过100次查询，必须支付Google自定义搜索API服务费用。 |\n\n#### 5. 默认内容探索模式。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -e\n```\n\n添加 -e 选项后，GyoiThon会在默认模式基础上探索CMS、Web服务器软件等产品的默认内容。  \n通过修改 `config.ini` 中的参数，可以调整探索设置。  \n\n|类别|参数|描述|\n|:----|:----|:----|\n|ContentExplorer|delay_time|探索延迟时间。默认值为`1`（秒）。 |\n\n| 注意 |\n|:-----|\n| 使用此选项时，由于GyoiThon会对目标Web服务器执行大量访问（数百次访问），可能会对服务器造成较大负载。此外，大量404错误日志会被写入访问日志，可能会被SOC（安全运营中心）发现。因此，如果使用此选项，**请务必通知相关负责人（如SOC、管理员），并在您控制的环境中自行承担风险使用**。 |\n\n#### 6. Censys协作模式。  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -c\n```\n\n通过添加 `-c` 选项，GyoiThon 会使用 [Censys](https:\u002F\u002Fcensys.io\u002F)（网络安全搜索引擎）检查开放端口号和服务器证书。  \n执行前，必须将 API key 和 Secret key 设置到以下参数中。  \n\n|分类|参数|描述|\n|:----|:----|:----|\n|Censys|api_id|Censys 的 API key。 |\n||secret|Censys 的 Secret key。 |\n\n#### 7. Metasploit 协同模式  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -p\n```\n\n通过添加 `-p` 选项，GyoiThon 会在默认模式基础上，使用 Metasploit 检查 DoS（拒绝服务攻击）和后门等真实漏洞。  \n执行前，必须启动 Metasploit 的 RPC 服务器，并在 `config.ini` 中设置以下参数。  \n\n|分类|参数|描述|\n|:----|:----|:----|\n|Exploit|server_host|分配给 RPC 服务器（msgrpc）的 IP 地址。 |\n||server_port|分配给 RPC 服务器（msgrpc）的端口号。 |\n||msgrpc_user|用于 msgrpc 身份验证的用户 ID。 |\n||msgrpc_pass|用于 msgrpc 身份验证的密码。 |\n||LHOST|分配给 RPC 服务器（msgrpc）的 IP 地址。|\n\n| 注意事项 |\n|:-----|\n| 使用此选项时，由于 GyoiThon 会对目标 Web 服务器执行利用程序（exploit），可能会严重影响服务器运行。此外，由于这些利用行为类似于真实攻击，可能会被 SOC（安全运营中心）检测到。因此，**使用此选项时，请务必通知相关方（如 SOC、管理员），并在可控环境中自行承担风险使用**。 |\n\n#### 8. 基于存储日志的分析模式  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -l --log_path=\"存储日志的完整路径\"\n```\n\n通过添加 `-l` 选项，GyoiThon 可在不进行网页爬取的情况下，使用已存储的 HTTP 响应执行各种检查。  \n\n此模式适用于 GyoiThon 无法执行网页爬取的 Web 应用程序。  \nGyoiThon 可通过本地代理工具收集的 HTTP 响应，执行与默认模式网页爬取类似的多种检查。  \n\n| 注意事项 |\n|:-----|\n| 日志文件的扩展名必须为 `.log`。 |\n\n#### \u003Ca name='complex_mode'>9. 多种选项的组合\u003C\u002Fa>  \n##### \"云服务检查模式\" 与 \"机器学习分析模式\" 的组合  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m\n```\n\n##### \"云服务检查模式\" 与 \"Google Hacking 模式\" 的组合  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -g\n```\n\n##### \"云服务检查模式\"、\"机器学习分析模式\" 与 \"Google Hacking 模式\" 的组合  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m -g\n```\n\n##### 所有选项的组合  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -s -m -g -e -c -p -l --log_path=\"存储日志的完整路径\"\n```\n\n#### \u003Ca name='generating_sig'>10. 生成签名\u002F训练数据模式\u003C\u002Fa>  \n```\nroot@kali:~\u002FGyoiThon# python3 gyoithon.py -d --category=CMS --vendor=joomla! --package=Joomla!@3.9.4@_origin.tar.zip\n```\n\n通过添加 `-d` 选项，GyoiThon 会生成用于检测目标 Web 服务器上运行的 Web 产品的签名\u002F训练数据。  \n可用选项如下：  \n\n|选项|描述|示例|\n|:----|:----|:----|\n|--category|签名\u002F训练数据中的产品类别。|`OS` 或 `WEB` 或 `FRAMEWORK` 或 `CMS`。 |\n|--vendor|签名\u002F训练数据中的产品厂商名称。 |`wordpress`, `joomla!`, `drupal`。|\n|--package|导入的目标包文件名。需要用 `@` 分隔产品名称、版本和扩展名三个字段。|`WordPress@4.9.8@.tar.gz`, `Joomla!@3.9.4@_origin.tar.zip`, `Drupal@8.6.3@.tar.gz`。 |\n\n### 检查报告  \nGyoiThon 执行完成后，每个目标的报告将生成到以下路径。  \n\n```\nroot@kali:~\u002FGyoiThon\u002Freport# ls\ngyoithon_report_192.168.220.129_80_1082018338.csv\ngyoithon_report_192.168.220.129_80_bodgeit.csv\ngyoithon_report_192.168.220.129_80_cyclone.csv\ngyoithon_report_192.168.220.129_80_vicnum.csv\ngyoithon_report_192.168.220.129_80_WackoPicko.csv\ngyoithon_censys_report_www.gyoithon.example.com_443_test.csv\n```\n\nGyoiThon 会生成以下两种类型的报告。  \n\n * `gyoithon_report_target FQDN（或IP地址）_端口号_根路径.csv`。  \n 这是主要报告，包含产品名称、版本、CVE等信息。  \n 报告格式为 `gyoithon_report_target FQDN（或IP地址）_端口号_根路径.csv`。  \n 各列的详细说明如下：  \n\n|列名|描述|示例|\n|:----|:----|:----|\n|fqdn|目标Web服务器的FQDN（Fully Qualified Domain Name，完全限定域名）|`www.gyoithon.example.com`|\n|ip_addr|目标Web服务器的IP地址|`192.168.220.129`|\n|port|目标Web服务器的端口号|`80`|\n|cloud_type|云服务名称（Azure\u002FAWS\u002FGCP\u002FUnknown）|`AWS`|\n|method|GyoiThon的检测方式|`Crawling`|\n|url|访问的URL|`http:\u002F\u002F192.168.220.129:80\u002FWackoPicko\u002Fadmin\u002Findex.php?page=login`|\n|vendor_name|识别出产品的厂商名称|`apache`|\n|prod_name|识别出的产品名称|`http_server`|\n|prod_version|识别出产品的版本号|`2.2.14`|\n|prod_trigger|识别产品的触发特征|`Apache\u002F2.2.14`|\n|prod_type|产品类别（Web\u002FCMS\u002F框架等）|`Web`|\n|prod_vuln|根据识别出产品的CVE编号（含CVSS评分）|`CVE-2017-3167, CVE-2017-3169, CVE-2017-7668` ...|\n|origin_login|登录页面是否存在（Log：机器学习分析，Url：URL字符串模式匹配分析）|`Log : 37.5 %\\nUrl : 100.0 %`|\n|origin_login_trigger|识别登录页面的触发特征|`Log : name\",\u003Cinput type=\"password\"\\nUrl : login`|\n|wrong_comment|识别出的多余注释|`パスワードは「password1234」です。`|\n|error_msg|识别出的多余调试信息|`Warning: mysql_connect() ..snip.. in auth.php on line 38`|\n|server_header|HTTP响应的Server头字段|`Server: Apache\u002F2.2.14 (Ubuntu) mod_mono\u002F2.4.3 PHP\u002F5.3.2`|\n|log|原始数据的路径|`\u002Fusr\u002Fhome\u002F~snip~\u002Fhttp_192.168.220.129_80_20181112170525765.log`|\n|date|检测日期|`2018\u002F11\u002F12  17:05:25`|\n\n * `gyoithon_censys_report_target FQDN（或IP地址）_端口号_根路径.csv`。  \n 这是通过Censys（网络资产搜索引擎）获取的开放端口、证书信息等搜索结果报告。  \n 报告格式为 `gyoithon_censys_report_target FQDN（或IP地址）_端口号_根路径.csv`。  \n 各列的详细说明如下：  \n\n|列名|描述|示例|\n|:----|:----|:----|\n|fqdn|目标Web服务器的FQDN|`www.gyoithon.example.com`|\n|ip_addr|目标Web服务器的IP地址|`192.168.220.129`|\n|category|信息类别|`Server Info` 或 `Certification Info`|\n|open_port|开放的Web端口|`443`|\n|protocol|开放端口的协议|`https`|\n|sig_algorithm|证书的签名算法|`SHA256-RSA`|\n|cname|证书的通用名称|`www.gyoithon.example.com`|\n|valid_start|证书的有效起始日期|`2018-08-15T00:00:00Z`|\n|valid_end|证书的有效截止日期|`2019-09-16T12:00:00Z`|\n|organization|证书的机构名称|`GyoiThon coorporation, Inc.`|\n|date|检测日期|`2018\u002F11\u002F22  11:19:36`|\n\n| 注意 |\n|:-----|\n| 由于Censys需要数天到数周时间扫描整个互联网，因此从Censys获取的信息可能不是最新的。|\n\n## \u003Ca name='Tips'>技巧\u003C\u002Fa>\n\n### 1. 如何手动添加新签名（字符串匹配模式）  \n`signatures` 路径下包含以下文件：  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fsignatures\u002F ls\nsignature_product.txt\nsignature_default_content.txt\nsignature_search_query.txt\nsignature_comment.txt\nsignature_error.txt\nsignature_page_type_from_url.txt\n```\n\n#### `signature_product.txt`  \n这是用于 \u003Ca name='default_mode'>默认模式\u003C\u002Fa> 中产品识别的字符串匹配模式。  \n若需添加新字符串匹配模式，请按以下格式编写：   \n\n```\n格式：field1@field2@field3@field4@field5\n```\n\n|类型|字段编号|描述|示例|\n|:---|:---|:---|:---|\n|必填|1|产品类别。|`CMS`|\n|必填|2|厂商名称。|`drupal`|\n|必填|3|产品名称。|`drupal`|\n|可选|4|与此签名绑定的版本。|`8.0` |\n|必填|5|识别产品的正则表达式。|`.*(X-Generator: Drupal 8).*`|\n\n若不需要可选字段，必须将该字段设为 `*`。  \n\n* 示例  \n```\nCMS@wordpress@wordpress@*@.*(WordPress ([0-9]+[\\.0-9]*[\\.0-9]*)).*\nCMS@drupal@drupal@8.0@.*(X-Generator: Drupal 8).*\n```\n\n| 注意 |\n|:-----|\n| 若需提取产品版本，请编写两个正则表达式分组（**第二个正则表达式用于版本提取**）。 |\n\n#### `signature_default_content.txt`  \n这是用于 \u003Ca name='explore_contents_mode'>默认内容探索模式\u003C\u002Fa> 中产品识别的字符串匹配模式。  \n若需添加新字符串匹配模式，请按以下格式编写：   \n\n```\n格式：field1@field2@field3@field4@field5@field6@field7@field8\n```\n\n|类型|字段编号|描述|示例|\n|:---|:---|:---|:---|\n|必填|1|产品类别。|`CMS`|\n|必填|2|厂商名称。|`sixapart`|\n|必填|3|产品名称。|`movabletype`|\n|可选|4|与此签名绑定的版本。|`*` |\n|必填|5|探索路径|`\u002Freadme.html`|\n|可选|6|确认产品的正则表达式。|`.*(Movable Type).*`|\n|可选|7|识别版本的正则表达式。|`(v=([0-9]+[\\.0-9]*[\\.0-9]*))`|\n|必填|8|是否为登录页面。|登录页面为 `1`，非登录页面为 `0`|\n\n若不需要可选字段，必须将该字段设为 `*`。  \n\n* 示例  \n```\nWeb@apache@http_server@*@\u002Fserver-status@*@Version:.*(Apache\u002F([0-9]+[\\.0-9]*[\\.0-9]*))@0\nCMS@sixapart@movabletype@*@\u002Freadme.html@.*(Movable Type).*@(v=([0-9]+[\\.0-9]*[\\.0-9]*))@0\n```\n\n| 注意 |\n|:-----|\n| 若需提取产品版本，请编写两个正则表达式分组（**第二个正则表达式用于版本提取**）。 |\n\n| 注意 |\n|:-----|\n| 若 GyoiThon 仅凭 `探索路径` 无法确认产品，需要填写 `确认产品的正则表达式` 字段。GyoiThon 会访问 `探索路径` 对应的 URL，并使用 `确认产品的正则表达式` 检查 HTTP 响应。若正则匹配成功，GyoiThon 判定该产品存在。 |\n\n#### `signature_search_query.txt`  \n这是用于 \u003Ca name='google_hacking_mode'>Google Hacking 模式\u003C\u002Fa> 中产品识别的 Google 自定义搜索查询。  \n若需添加新查询，请按以下格式编写：   \n\n```\n格式：field1@field2@field3@field4@field5@field6@field7@field8\n```\n\n|类型|字段编号|描述|示例|\n|:---|:---|:---|:---|\n|可选|1|产品类别。|`CMS`|\n|可选|2|厂商名称。|`sixapart`|\n|可选|3|产品名称。|`movabletype`|\n|可选|4|与此签名绑定的版本。|`*` |\n|必填|5|Google 自定义搜索查询|`inurl:\u002Freadme.html`|\n|可选|6|确认产品的正则表达式。|`.*(Movable Type).*`|\n|可选|7|识别版本的正则表达式。|`(v=([0-9]+[\\.0-9]*[\\.0-9]*))`|\n|可选|8|是否为登录页面。|登录页面为 `1`，非登录页面为 `0`|\n\n若不需要可选字段，必须将该字段设为 `*`。  \n\n* 示例  \n```\nWeb@apache@http_server@*@inurl:\u002Fserver-status@*@Version:.*(Apache\u002F([0-9]+[\\.0-9]*[\\.0-9]*))@0\nCMS@sixapart@movabletype@*@inurl:\u002Freadme.html@.*(Movable Type).*@(v=([0-9]+[\\.0-9]*[\\.0-9]*))@0\n*@*@*@*@filetype:bak@*@*@0\n```\n\n| 注意 |\n|:-----|\n| 若需提取产品版本，请编写两个正则表达式分组（**第二个正则表达式用于版本提取**）。 |\n\n| 注意 |\n|:-----|\n| 若 GyoiThon 仅凭 `Google 自定义搜索查询` 无法确认产品，需要填写 `确认产品的正则表达式` 字段。GyoiThon 会访问 Google 自定义搜索 API 执行结果中的 URL，并使用 `确认产品的正则表达式` 检查 HTTP 响应。若正则匹配成功，GyoiThon 判定该产品存在。 |\n\n#### `signature_comment.txt`  \n这是用于 \u003Ca name='default_mode'>默认模式\u003C\u002Fa> 中识别无用注释的字符串匹配模式。  \n若需添加新字符串匹配模式，请按以下格式编写：   \n\n```\n格式：field1\n```\n\n|类型|字段编号|描述|\n|:---|:---|:---|\n|必填|1|无用注释的正则表达式。|\n\n* 示例  \n```\n(user\\s*=|[\\\"']user[\\\"']\\s*:|user_id\\s*=|[\\\"']user_id[\\\"']\\s*:|id\\s*=|[\\\"']id[\\\"']\\s*:)\n(select\\s+[\\s\\r\\n\\w\\d,\\\"']*\\s+from)\n```\n\n#### `signature_error.txt`  \n这是用于 \u003Ca name='default_mode'>默认模式\u003C\u002Fa> 中识别无用调试信息的字符串匹配模式。  \n若需添加新字符串匹配模式，请按以下格式编写：   \n\n```\n格式：field1\n```\n\n|类型|字段编号|描述|\n|:---|:---|:---|\n|必填|1|无用调试信息的正则表达式。|\n\n* 示例  \n```\n(ORA-[0-9a-zA-Z\\.])\n(fail|error|notice|parse|warning|fatal)[^\\n]*line[^\\n]*[0-9]+\n```\n\n#### `signature_page_type_from_url.txt`  \n这是用于 \u003Ca name='default_mode'>默认模式\u003C\u002Fa> 中基于 URL 的页面类型识别的字符串匹配模式。  \n若需添加新字符串匹配模式，请按以下格式编写：   \n\n```\n格式：field1@field2\n```\n\n|类型|字段编号|描述|\n|:---|:---|:---|\n|必填|1|页面类型。|\n|必填|2|识别页面类型的正则表达式。|\n\n* 示例  \n```\nLogin@.*(login|log_in|logon|log_on|signin|sign_in).*\n```\n\n|注意|\n|:---|\n|上述厂商名称和产品名称必须与 [CPE 格式（通用平台枚举）](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCommon_Platform_Enumeration) 中的名称一致。|\n\n### 2. 如何手动添加学习数据  \n`modules\u002Ftrain_data\u002F` 路径包含两个用于机器学习（Machine Learning）的训练数据文件。  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Ftrain_data\u002F ls\ntrain_cms_in.txt\ntrain_page_type.txt\n```\n\n#### `train_cms_in.txt`  \n这是用于机器学习模式（\u003Ca name='machine_learning_mode'>Machine Learning mode\u003C\u002Fa>）分析的训练数据文件。  \n如果需要添加新的训练数据，需按照以下格式编写。  \n\n```\n格式：field1@field2@field3@field4\n```\n\n|类型|字段编号|描述|示例|\n|:---|:---|:---|:---|\n|必填|1|厂商名称|`joomla`|\n|必填|2|产品名称|`joomla\\!`|\n|可选|3|与该训练数据绑定的版本|`*` |\n|必填|4|通过正则表达式表示的产品特征|`(Set-Cookie: [a-z0-9]{32}=.*);`|\n\n如果不需要可选字段，必须将该字段设置为 `*`。  \n\n* 示例  \n```\njoomla@joomla\\!@*@(Set-Cookie: [a-z0-9]{32}=.*);\njoomla@joomla\\!@*@(Set-Cookie: .*=[a-z0-9]{26,32});\nheartcore@heartcore@*@(Set-Cookie:.*=[A-Z0-9]{32});.*\nheartcore@heartcore@*@(\u003Cmeta name=[\"']author[\"'] content=[\"']{2}).*\n```\n\n|注意|\n|:---|\n|上述厂商名称和产品名称必须匹配 [CPE 格式](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCommon_Platform_Enumeration) 中的名称。|\n\n#### `train_page_type.txt`  \n这是用于默认模式（\u003Ca name='default_mode'>default mode\u003C\u002Fa>）中通过机器学习识别页面类型的训练数据文件。  \n如果需要添加新的训练数据，需按照以下格式编写。   \n\n```\n格式：field1@field2\n```\n\n|类型|字段编号|描述|\n|:---|:---|\n|必填|1|分类|\n|必填|2|通过正则表达式表示的页面特征|\n\n* 示例  \n```\nLogin@.*(\u003Cinput.*type=[\\\"']text[\\\"'].*name=[\\\"']user|uid|username|user_name|name[\\\"']).*>\nLogin@.*(\u003Cinput.*type=[\\\"']password[\\\"']).*>\n```\n\n### 3. 如何修改 \"Exploit模块的选项\"  \n当 GyoiThon 进行利用（exploit）时，会使用 Exploit 模块选项的**默认值**。  \n如果需要修改选项值，请在 `exploit_tree.json` 中的 `\"user_specify\"` 字段输入任意值，如下所示。  \n\n```\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Fdata\u002F ls\nexploit_tree.json\nroot@kali:~\u002FGyoiThon\u002Fmodules\u002Fdata\u002F vim exploit_tree.json\n\n...snip...\n\n\"unix\u002Fwebapp\u002Fjoomla_media_upload_exec\": {\n    \"targets\": {\n        \"0\": [\n            \"generic\u002Fcustom\",\n            \"generic\u002Fshell_bind_tcp\",\n            \"generic\u002Fshell_reverse_tcp\",\n\n...snip...\n\n        \"TARGETURI\": {\n            \"type\": \"string\",\n            \"required\": true,\n            \"advanced\": false,\n            \"evasion\": false,\n            \"desc\": \"The base path to Joomla\",\n            \"default\": \"\u002Fjoomla\",\n            \"user_specify\": \"\u002Fmy_original_dir\u002F\"\n        },\n```\n\n上述示例展示了如何将 `exploit\u002Funix\u002Fwebapp\u002Fjoomla_media_upload_exec` 模块中 `TARGETURI` 选项的值从默认的 \"`\u002Fjoomla`\" 修改为 \"`\u002Fmy_original_dir\u002F`\"。  \n\n### 4. 如何通过代理服务器访问  \nGyoiThon 可以通过**代理服务器**访问目标服务器。  \n如果需要使用代理服务器，请在 `config.ini` 中输入代理服务器信息。  \n\n|类别|参数|描述|\n|:----|:----|:----|\n|通用|proxy|代理服务器信息。格式为 `scheme:\u002F\u002Fhostname:port`（例如：`http:\u002F\u002Fproxy-example:8083`）。 |\n||proxy_user|如果需要代理认证，请输入认证用户名。 |\n||proxy_pass|如果需要代理认证，请输入认证密码。 |\n\n| 注意 |\n|:-----|\n| 目前 GyoiThon 仅实现了 Basic Authentication 认证方式。 |\n\n## 运行测试环境\n * Kali Linux 2018.2（用于 Metasploit）  \n   * CPU: Intel(R) Core(TM) i5-5200U 2.20GHz  \n   * 内存: 8.0GB  \n   * Metasploit Framework 4.16.48-dev  \n   * Python 3.6.6  \n\n## 许可证\n[Apache License 2.0](https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fblob\u002Fmaster\u002FLICENSE)\n\n## 联系我们\n gyoiler3@gmail.com  \n\n * [Masafumi Masuya](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#masafumi-masuya-36855)  \n [https:\u002F\u002Ftwitter.com\u002Fgyoizamurai](https:\u002F\u002Ftwitter.com\u002Fgyoizamurai)\n * [Toshitsugu Yoneyama](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#toshitsugu-yoneyama-36864)  \n [https:\u002F\u002Ftwitter.com\u002Fyoneyoneyo](https:\u002F\u002Ftwitter.com\u002Fyoneyoneyo)\n * [Isao Takaesu](https:\u002F\u002Fwww.blackhat.com\u002Fasia-18\u002Farsenal\u002Fschedule\u002Fpresenters.html#isao-takaesu-33544)  \n [https:\u002F\u002Ftwitter.com\u002Fbbr_bbq](https:\u002F\u002Ftwitter.com\u002Fbbr_bbq)","# GyoiThon 快速上手指南\n\n## 环境准备  \n- **系统要求**：Linux（推荐 Kali Linux）  \n- **前置依赖**：  \n  - Python 3.6+  \n  - Git  \n  - `python3-pip`（通过 `apt-get install python3-pip` 安装）  \n  - **国内加速建议**：使用清华源加速 pip 安装（`pip3 install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`）\n\n---\n\n## 安装步骤  \n1. 克隆项目仓库：  \n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon.git\n   ```\n\n2. 安装依赖：  \n   ```bash\n   cd GyoiThon\n   pip3 install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n   apt install python3-tk\n   ```\n\n3. 配置 `config.ini`：  \n   - 修改 `config.ini` 中的参数（如 Google API 密钥、搜索引擎 ID 等）  \n   - 子域名扫描需提前准备 `domain_list.csv` 文件（格式参考 README 示例）\n\n---\n\n## 基本使用  \n### 最简示例：默认模式扫描  \n1. 编辑 `host.txt`，添加目标服务器信息（格式：`协议 FQDN\u002FIP 端口 根路径`）：  \n   ```\n   https gyoithon.example.com 443 \u002F\n   ```\n\n2. 运行 GyoiThon：  \n   ```bash\n   python3 gyoithon.py\n   ```\n\n### 子域名扫描与健康检查  \n1. 准备 `domain_list.csv`（示例）：  \n   ```\n   \"Domain Name\"\n   mbsd.jp\n   ```\n\n2. 执行子域名扫描：  \n   ```bash\n   python3 gyoithon.py -i --domain_list\n   ```\n\n3. 启用健康检查（需 Google API 密钥）：  \n   ```bash\n   python3 gyoithon.py -i --domain_list --through_health_check --safety\n   ```\n\n---\n\n**注意**：  \n- 使用 Google 自定义搜索 API 需提前申请 API 密钥（[Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com\u002F)）  \n- 云服务检测需更新 Azure IP 范围（[下载地址](https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdownload\u002Fconfirmation.aspx?id=41653)）","某网络安全团队在为一家电商公司进行渗透测试时，需要快速识别目标域名下的所有子域名并评估其安全性。由于目标域名包含大量隐藏子域名，传统工具扫描效率低下且漏检率高。\n\n### 没有 GyoiThon 时\n- **手动枚举耗时**：需逐个猜测子域名，平均每个域名需2小时完成基础扫描\n- **漏洞检测盲区**：无法自动识别Web服务类型，导致常见CMS漏洞（如WordPress插件漏洞）无法快速定位\n- **结果碎片化**：IP地址、访问状态、地理位置等信息分散在多个工具报告中，需人工整合\n- **误报率高**：传统工具误判率达40%，需投入大量时间验证真实漏洞\n\n### 使用 GyoiThon 后\n- **自动化枚举提速**：通过Google自定义搜索API 15分钟内完成200+子域名发现\n- **智能产品识别**：自动识别出3个运行Shopify的子域名，精准定位电商系统漏洞\n- **结构化输出**：单次扫描生成包含IP地址、HTTP\u002FHTTPS状态码、地理位置的完整表格\n- **零误报评估**：基于机器学习的健康检查准确识别出2个未修复的SSL\u002FTLS漏洞\n\n通过将Google搜索能力与机器学习结合，GyoiThon实现了子域名发现与漏洞评估的自动化闭环，使渗透测试效率提升8倍且误报率降至5%以下。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgyoisamurai_GyoiThon_cce7a993.png","gyoisamurai","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fgyoisamurai_bd654bbc.png","We're Black Hat Arsenal presenter.",null,"gyoiler3@gmail.com","https:\u002F\u002Fgithub.com\u002Fgyoisamurai",[82,86,90,94],{"name":83,"color":84,"percentage":85},"Python","#3572A5",98.6,{"name":87,"color":88,"percentage":89},"HTML","#e34c26",0.8,{"name":91,"color":92,"percentage":93},"Dockerfile","#384d54",0.3,{"name":95,"color":96,"percentage":97},"Shell","#89e051",0.2,815,306,"2026-04-02T20:03:39","NOASSERTION","Linux","未说明",{"notes":105,"python":106,"dependencies":107},"需配置 Google Custom Search API 密钥和搜索引擎 ID；新功能需通过 Google API 获取子域名；使用 Censys 需要相应 API 凭证；安装时需执行 apt 安装 python3-tk","3.x",[108,109],"requirements.txt 中定义的 Python 包","python3-tk",[16],"2026-03-27T02:49:30.150509","2026-04-06T07:23:06.841361",[114,119,124,129,134,139],{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},1864,"如何解决 Docker 构建时 curl 写入文件失败的错误？","该错误通常由文件路径权限问题或磁盘空间不足导致。请检查目标路径 `\u002Fopt\u002Fgyiothon\u002Fclassifier4gyoithon\u002F` 是否存在且可写，或尝试在 Dockerfile 中添加 `RUN mkdir -p \u002Fopt\u002Fgyiothon\u002Fclassifier4gyoithon\u002F` 创建目录。此外，确保构建环境有足够的磁盘空间。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F35",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},1865,"运行 Gyoithon 时提示 'No module named pandas' 如何解决？","请确保已安装 Python 依赖库。运行 `pip install pandas` 安装缺失的模块。如果问题仍存在，请检查项目目录中是否存在 `signature_framework.txt` 文件（维护者已修复此问题，需更新代码）。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F2",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},1866,"导入 urllib.request 时报错 'No module named request' 怎么办？","此问题通常由 Python 版本差异导致。请安装 `urllib3` 库：`pip install urllib3`。同时检查代码是否使用了兼容 Python 3 的语法（Gyoithon 已迁移至 `urllib3`）。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F11",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},1867,"执行分析时出现 'FileNotFoundError' 且路径包含 URL 怎么处理？","错误路径 `\u002Fhttp:\u002F\u002F172.16.62.190:80\u002F` 显示配置错误。请确保输入的文件路径格式正确，应为本地文件路径而非 URL。检查命令参数是否误将 URL 作为文件路径传入。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F7",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},1868,"如何解决 'KeyError: 0' 的 Pandas 数据访问错误？","该错误通常由数据为空或索引异常导致。请确认输入目标的扫描日志已正确生成，且 `df_selected_summary` 数据框包含有效数据。维护者已修复相关逻辑，请更新代码至最新版本。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F20",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},1869,"Gyoithon 是否支持通过主机名而非 IP 地址进行分析？","当前版本暂不支持主机名解析，但维护者计划在 2023 年 4 月 9 日前实现该功能。作为临时解决方案，可在代码中手动添加 DNS 解析逻辑或使用 IP 地址替代。","https:\u002F\u002Fgithub.com\u002Fgyoisamurai\u002FGyoiThon\u002Fissues\u002F4",[]]