飓风
ShyHurricane是一个MCP服务器,用于协助人工智能对web应用程序进行攻击性安全测试。它旨在解决以下观察到的几个问题 法学硕士:
- Spidering和目录破坏命令可能会非常嘈杂且长时间运行。LLM将经过几次迭代来选择合适的命令和选项。服务器提供爬行和破坏工具,以始终如一地为LLM提供可用的结果。
- 模型还将枚举具有许多curl命令的网站。服务器保存并索引响应以返回数据,而无需反复联系网站。大型站点(常见于bug赏金计划)无法通过单独的curl命令有效地枚举。
- 端口扫描可能需要很长时间,导致LLM认为扫描失败并发出重复扫描。服务器提供的port_scan工具解决了这个问题。
服务器的一个重要特征是使用嵌入模型对网站内容进行索引。这个 find_web_resources 该工具使用LLM提示来查找特定于内容类型的漏洞:html、javascript、css、xml、HTTP标头。当工具找到内容时,会对其进行索引。内容也可以通过将外部数据输入到 /index 终点。支持的格式有 katana jsonl, hal json 以及Burp Suite Logger++CSV。Burp Suite、ZAP、Firefox和Chrome都有扩展程序,可以在浏览网站时向服务器发送请求。
工具
提供以下工具:
| 工具 | 描述 | 开放世界? |
|---|---|---|
| port_scan | 对目标执行端口扫描和服务识别,类似于nmap的功能。 | 是 |
| spider_wite | 在url处抓取网站并索引结果以供进一步分析 | 是 |
| directory_buster | 在网站上搜索隐藏的目录和文件。 | 是 |
| index_http_url | 为http url建立索引,以便进行进一步分析。(又名卷发) | 是 |
| find_wordlists | 查找蜘蛛网和directory_buster的可用单词列表 | 否 |
| find_web_resources | 使用自然语言查询有关网站的索引资源。 | 没有 |
| fetch_web_resource_content | 获取已被索引的web资源的内容。 | 没有 |
| find_domains | 查询索引资源以获取域列表。 | 没有 |
| find_hosts | 查询索引资源以获取给定域的主机列表。 | 没有 |
| find_netloc | 查询索引资源以获取给定域的网络位置列表,即主机:端口。 | 没有 |
| find_urls | 查询索引资源以获取给定主机或域的URL列表。 | 没有 |
| register_hostname_address | 使用IP地址注册主机名。 | 没有 |
| register_http_headers | 注册应在每次请求时发送的http标头。 | 没有 |
| save_fining | 将结果另存为标记。 | 没有 |
| query_findings | 查询目标的先前发现。 | 没有 |
| deobfuscate_javascript | 对javascript内容进行去模糊处理(在索引过程中自动完成) | 否 |
安装
MCP服务器本身使用LLM执行轻任务,这样 llama3.2:3b 模型就足够了。建议使用Ollama,但不是必需的。OpenAI和Google AI模型也得到了支持。Docker是特定于工具的命令所必需的,如spidering和目录破坏。
Docker桌面或绞痛
Docker是必需的,网络堆栈的质量很重要。Docker桌面是可以接受的。在macOS上,Apple虚拟化网络存在问题。使用 colima 随着 qemu 虚拟化以获得更好的结果。
如果你使用Homebrew, brew bundle 可用于安装。否则,请使用您的操作系统进行安装 colima, qemu, docker,以及 docker-compose.
开始 colima 使用如下命令:
colima start --runtime docker --cpu 4 --disk 50 -m 4 --vm-type qemu网络映射器
最好跑步 nmap 在主机上。如果没有安装在主机上,将使用docker容器。
Docker Compose
作为Docker服务
在中配置所需的提供商和模型 .env:
OLLAMA_MODEL=llama3.2:3b
OLLAMA_HOST=192.168.253.100:11434
GEMINI_API_KEY=
GEMINI_MODEL=
OPENAI_MODEL=
OPENAI_API_KEY=
BEDROCK_MODEL=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=运行MCP服务器:
docker compose up -d或者从源构建图像:
docker compose -f docker-compose.dev.yml up -d将MCP服务器添加到您选择的客户端http://127.0.0.1:8000/mcp.
从源运行
Python环境
$(command -v python3.12) -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt奥拉玛
安装Ollama和 llama3.2:3b 型号:
Ubuntu:
apt-get install ollama
ollama pull llama3.2:3bmacOS:
brew install ollama
brew services start ollama
ollama pull llama3.2:3b命令容器图像
docker build -t ghcr.io/double16/shyhurricane_unix_command:main src/docker/unix_commandMCP 服务器
奥拉玛与 llama3.2:3b:
python3 mcp_service.pyOpenAI:
export OPENAI_API_KEY=xxxx
python3 mcp_service.py --openai-model gpt-4-turbo谷歌人工智能:
export GOOGLE_API_KEY=xxxx
python3 mcp_service.py --gemini-model gemini-2.0-flashAWS基岩:
python3 mcp_service.py --bedrock-model us.meta.llama3-2-3b-instruct-v1:0禁用开放世界工具
开放世界工具允许LLM访问互联网进行蜘蛛网、目录破坏等。在某些用例中,这是不希望的,应该只使用索引内容。
配置 .env:
OPEN_WORLD=false重新启动Docker:
docker compose up -d或
使用以下命令启动MCP服务器 --open-world false:
python3 mcp_service.py --open-world false索引数据
如果合适,MCP工具将对数据进行索引。例如,蜘蛛网和目录破坏。数据可以通过外部方式使用 /index 终点。端点不是MCP工具或协议的一部分。
这个 ingest.py 脚本使使用此端点更加方便。直接使用并不复杂。推断支持的数据格式。Katana JSON是首选格式。
curl -X POST -H "Content-Type: application/json" http://127.0.0.1:8000/index @katana.json武士刀
cat katana.jsonl | python3 ingest.py --mcp-url http://127.0.0.1:8000/ --katana
# live ingestion:
tail -f katana.jsonl | python3 ingest.py --mcp-url http://127.0.0.1:8000/ --katana打嗝记录器++CSV
要导出的最小字段数:
- 请求。AsBase64
- 请求。时间
- 请求。统一资源定位符
- 回应。AsBase64
- 回应。往返时间
cat LoggerPlusPlus.csv | python3 ingest.py --mcp-url http://127.0.0.1:8000/ --csv
# live ingestion using the auto-export feature of Logger++:
tail -f LoggerPlusPlus.csv | python3 ingest.py --mcp-url http://127.0.0.1:8000/ --csv扩展
浏览器和拦截代理扩展可在以下GitHub仓库中获得:
- https://github.com/double16/shyhurricane-chrome
- https://github.com/double16/shyhurricane-firefox
- https://github.com/double16/shyhurricane-burpsuite
- https://github.com/double16/shyhurricane-zap
浏览器扩展程序会将Chrome和Firefox中的请求和响应转发到MCP服务器进行索引。那里 是用于在作用域中设置的控件。
Burp Suite和ZAP扩展将转发请求/响应和警报/发现。LLM使用这些警报 以提高效率。
状态端点
这个 /status 端点是HTTP POST端点,不是MCP服务器协议的一部分。
curl -X POST http://127.0.0.1:8000/status代理服务器提供索引内容
MCP服务器公开代理端口, 8010 默认情况下,它提供索引内容。目的是使用工具 事后索引的内容。例如,要运行 nuclei 并将结果馈送到MCP服务器。
代理支持带有自签名证书的HTTP和HTTPS。查找以下日志行以查找CA证书或 将空正文发布到 /status。您的工具可以配置为忽略证书验证或信任此证书。
replay proxy listening on ('127.0.0.1', 8010), CA cert is at /home/user/.local/state/shyhurricane/shyhurricane.db/certs/ca.pem (CONNECT→TLS ALPN: h2/http1.1)一个例子 curl 呼叫:
curl -x 127.0.0.1:8010 -k https://example.com以下是一个在索引内容上使用Nuclei被动提交调查结果的示例:
nuclei -proxy http://127.0.0.1:8010 -target https://example.com -j | curl http://127.0.0.1:8000/findings -H "Content-Type: text/json" --data-binary @-如果一个URL或域没有被索引,404页面将包含指向已被索引的URL的链接。蜘蛛工具 链接可以使用它来查找索引内容。
