https://github.com/emo-crab/observer_ward
侦查守卫(observer_ward)Web应用和服务指纹识别工具 (之前误删除了仓库)
https://github.com/emo-crab/observer_ward
nmap-vscan nuclei nuclei-templates serivce wappalyzer whatweb
Last synced: about 2 months ago
JSON representation
侦查守卫(observer_ward)Web应用和服务指纹识别工具 (之前误删除了仓库)
- Host: GitHub
- URL: https://github.com/emo-crab/observer_ward
- Owner: emo-crab
- License: gpl-3.0
- Created: 2025-11-23T13:14:17.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-01-13T11:04:28.000Z (about 2 months ago)
- Last Synced: 2026-01-13T14:12:56.224Z (about 2 months ago)
- Language: Rust
- Homepage:
- Size: 3.35 MB
- Stars: 65
- Watchers: 1
- Forks: 6
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - observer_ward - Web application and service fingerprint identification tool (Applications / Security tools)
- fucking-awesome-rust - observer_ward - Web application and service fingerprint identification tool (Applications / Security tools)
- awesome-hacking-lists - emo-crab/observer_ward - 侦查守卫(observer_ward)Web应用和服务指纹识别工具 (Rust)
- awesome-rust-with-stars - observer_ward - 01-13 | (Applications / Security tools)
README
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
[](https://deepwiki.com/emo-crab/observer_ward)
## 关于这个项目
- 郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担。
| 类别 | 说明 |
| ---- | ----------------------------------------------------------------- |
| 作者 | [三米前有蕉皮](https://github.com/cn-kali-team) |
| 团队 | [0x727](https://github.com/0x727) 未来一段时间将陆续开源工具 |
| 定位 | 社区化[指纹库](https://github.com/0x727/FingerprintHub)识别工具。 |
| 语言 | Rust |
| 功能 | 服务和Web应用指纹识别工具 |
![Product Name Screen Shot][product-screenshot]
- 基于yaml编写探针,匹配规则和提取器
- 支持服务和Web应用版本识别
- 使用nvd标准通用平台枚举 ([CPE](https://scap.kali-team.cn/cpe/)) 命名规范
- [社区化指纹库](https://github.com/0x727/FingerprintHub)和nmap服务探针
- 集成 [Nuclei](https://github.com/projectdiscovery/nuclei) 验证漏洞
## 安装
### 源码安装
- 从源码编译安装,更多可以查看github的action工作流文件 [workflow](.github/workflows/post-release.yml)
```bash,no-run
cargo build --release --manifest-path=observer_ward/Cargo.toml
```
### 二进制安装
- 从发布页面下载 [release](https://github.com/emo-crab/observer_ward/releases)
- 如果是Mac系统可以通过brew安装
### 使用Mac系统brew安装
```bash,no-run
brew install observer_ward
```
### Docker镜像
- docker镜像,`observer_ward`只有指纹识别功能
```bash,no-run
➜ docker run --rm -it kaliteam/observer_ward -t http://172.17.0.2
[INFO ] probes loaded: 2223
[INFO ] optimized probes: 7
[INFO ] target loaded: 1
|_uri:[ http://172.17.0.2/ [apache-http] <> (200 OK) ]
|_uri:[ http://172.17.0.2/ [thinkphp] <> (200 OK) ]
```
- `kaliteam/observer_ward:nuclei`是内置nuclei,在默认配置文件夹有`plugins`目录,但是更新时间不会最新了,是构建docker时的版本
```bash,no-run
➜ docker run --rm -it kaliteam/observer_ward:nuclei -t http://172.17.0.2 --plugin default
[INFO ] probes loaded: 2223
[INFO ] optimized probes: 7
[INFO ] target loaded: 1
|_uri:[ http://172.17.0.2/ [apache-http] <> (200 OK) ]
|_uri:[ http://172.17.0.2/ [thinkphp] <> (200 OK) ]
|_exploitable: [Critical] thinkphp-5023-rce: ThinkPHP 5.0.23 - Remote Code Execution
|_matched_at: http://172.17.0.2/index.php?s=captcha
|_shell: curl -X 'POST' -d '_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1' -H 'Accept: */*' -H 'Accept-Language: en' -H 'Content-Type: application/x-www-form-urlencoded' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.3.23' 'http://172.17.0.2/index.php?s=captcha'
```
## 入门
```bash,no-run
➜ ~ ./observer_ward -u
➜ ~ ./observer_ward -t http://httpbin.org/
[INFO ] 📇probes loaded: 6183
[INFO ] 🎯target loaded: 1
[INFO ] 🚀optimized probes: 8
🎯:[ http://httpbin.org/ [0example,swagger] (200 OK) ]
```
- 使用帮助
```bash,no-run
➜ ./observer_ward --help
Usage: observer_ward [-l ] [-t ] [-p ] [--probe-dir ] [--ua ] [--mode ] [--timeout ] [--thread ] [--proxy ] [--ir] [--ic] [--plugin ] [-o ] [--format ] [--no-color] [--nuclei-args ] [--silent] [--debug] [--config-dir ] [--update-self] [-u] [--update-plugin] [--daemon] [--token ] [--webhook ] [--webhook-auth ] [--api-server ] [--mitm ] [--mcp] [--prompt-path ] [--asynq-redis ] [--asynq-mode ]
observer_ward
Options:
-l, --list multiple targets from file path
-t, --target the target (required)
-p, --probe-path customized fingerprint file path
--probe-dir customized fingerprint yaml file dir
--ua customized ua
--mode mode probes option[tcp,http,all] default: all
--timeout set request timeout.
--thread number of concurrent threads.
--proxy proxy to use for requests
(ex:[http(s)|socks5(h)]://host:port)
--ir include request/response pairs in output
--ic include certificate pairs in output
--plugin customized template dir
-o, --output export to the file
--format output format option[json,csv,txt] default: txt
--no-color disable output content coloring
--nuclei-args poc nuclei engine additional args
--silent silent mode
--debug debug mode
--config-dir customized template dir
--update-self update self
-u, --update-fingerprint
update fingerprint
--update-plugin update plugin
--daemon api background service
--token api Bearer authentication
--webhook send results to webhook server
(ex:https://host:port/webhook)
--webhook-auth the auth will be set to the webhook request header
AUTHORIZATION
--api-server start a web API service (ex:127.0.0.1:8080)
--mitm start a MITM proxy server (ex:127.0.0.1:1080)
--mcp enable stdio mcp server
--prompt-path read the path file and customize the LLM to generate prompt
--asynq-redis redis URI for asynq task queue (ex:redis://127.0.0.1:6379)
--asynq-mode asynq mode option[receive,send,both] default: receive
--help, help display usage information
```
| 参数名 | 作用和描述 |
|-------------------------|--------------------------------------------------------------------------|
| -l,--list | 从文件中读取目标列表,一行一个目标 |
| -t,--target | 单个或者多个目标 |
| -p,--probe | json探针路径(如果和`--probe-dir`一起使用,该参数为转换json后的输出文件路径) |
| --probe-dir | yaml探针目录(如果和`--probe`一起使用,会读取该目录下的全部yaml文件转换为一个json文件) |
| --ua | 设置请求头 |
| --mode | 识别模式:[tcp,http,all],默认http,也就是当目标没有协议的时候会尝试添加web协议再去识别 |
| --timeout | 请求和连接超时,单位为秒 |
| --thread | 同时识别的线程数,默认为cpu的核数 |
| --proxy | 设置代理服务器,支持http和socks5,例如:`https://username:password@your-proxy.com:port` |
| --ir | 在json结果中保存请求和响应,保存请求响应可能比较消耗内存 |
| --ic | 在json结果中保存证书数据 |
| --plugin | 指定nuclei插件路径,会开启nuclei验证漏洞,如果路径为`default`默认调用配置文件夹下的`plugins`目录 |
| -o,--output | 将结果保存到文件,如果文件后缀名是下面格式支持的可以省略`--format`参数 |
| --format | 输出格式:支持`json`,`csv`和`txt`,在保存文件的时候会根据文件后缀自动识别 |
| --no-color | 禁用颜色输出 |
| --nuclei-args | nuclei的额外参数,会按照空格分割追加到调用nuclei参数,例如:`-es info`,排除info插件,支持多个 |
| --silent | 静默模式,不打印任何信息,常用在命令行管道作为输入源 |
| --debug | 开启调试模式,会输出更多信息,包括请求和响应,提取到的图标哈希,nuclei调用命令行等信息 |
| --config-dir | 指定配置文件夹,默认在用户配置文件夹下的`observer_ward`目录 |
| --update-self | 更新程序自身版本,也就是该项目的`defaultv4`发布标签 |
| -u,--update-fingerprint | 更新指纹到配置文件夹,会覆盖`web_fingerprint_v4.json`文件 |
| --update-plugin | 更新社区nuclei插件到配置文件夹,会自动解压zip并且覆盖`plugins`目录 |
| --daemon | api服务后台运行,window不支持 |
| --token | api服务认证token |
| --webhook | 要将识别结果通过webhook发送到指定url |
| --webhook-auth | webhook的`AUTHORIZATION`认证 |
| --api-server | api监听地址的端口 |
| --mitm | 启动 MITM 代理服务器(示例:127.0.0.1:1080) |
| --mcp | 启用 stdio mcp 服务 |
| --prompt-path | 读取路径文件并自定义 LLM 用于生成 prompt |
| --asynq-redis | asynq 任务队列的 Redis URI(示例:redis://127.0.0.1:6379) |
| --asynq-mode | asynq 模式选项 [receive,send,both],默认:receive |
| --help | 打印帮助信息 |
### 更新指纹库
- 从github下载指纹库,默认只更新web指纹,如果需要加载服务指纹需要自行下载[service_fingerprint_v4.json](https://0x727.github.io/FingerprintHub/service_fingerprint_v4.json)
到配置文件夹。
- 默认不更新服务指纹
```bash,no-run
➜ ./observer_ward -u
```
- 默认的指纹文件名有两个`web_fingerprint_v4.json`和`service_fingerprint_v4.json`,如果在配置文件夹中存在将会自动加载。
- 例如:`web_fingerprint_v4.json`文件在配置文件夹下的路径
| 操作系统 | 保存路径 |
| -------- | ------------------------------------------------------------------------------ |
| Windows | C:\Users\Alice\AppData\Roaming\observer_ward\web_fingerprint_v4.json |
| Linux | /home/alice/.config/observer_ward/web_fingerprint_v4.json |
| macOS | /Users/Alice/Library/Application Support/observer_ward/web_fingerprint_v4.json |
- 指定yaml文件夹`--probe-dir`和单个json文件`--probe-path`参数将全部yaml文件转换为一个单json文件,方便携带
- 然后将这个json文件复制到配置文件夹
```base,no-run
➜ ./observer_ward --probe-dir web_fingerprint --probe-dir service_fingerprint/null -p fingerprint_v4.json
[INFO ] ℹ️ convert the 6183 yaml file of the probe directory to a json file fingerprint_v4.json
```
- 例如你可以将`FingerprintHub`项目下的服务指纹中`null`探针转换为json文件,并保存到配置文件夹
```
➜ ~ ./observer_ward --probe-dir FingerprintHub/service-fingerprint/null -p .config/observer_ward/service_fingerprint_v4.json
[INFO ] ℹ️ convert the 3960 yaml file of the probe directory to a json file .config/observer_ward/service_fingerprint_v4.json
```
### 调试模式
- 使用`--debug`开启调试模式,可以看到更详细的输出结果
```bash,no-run
➜ ./observer_ward -t http://httpbin.org -p observer_ward/examples/json.yaml --debug
[INFO ] 📇probes loaded: 1
[INFO ] 🎯target loaded: 1
[INFO ] 🚀optimized probes: 1
[DEBUG] start: http://httpbin.org/
[DEBUG] Request {
uri: http://httpbin.org/ip,
version: HTTP/1.1,
method: GET,
headers: {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"content-type": "application/json",
},
body: None,
raw_request: None,
}
[DEBUG] Response {
version: HTTP/1.1,
uri: http://httpbin.org/ip,
status_code: 200,
headers: {
"date": "Mon, 08 Jul 2024 13:19:59 GMT",
"content-type": "application/json",
"content-length": "32",
"connection": "keep-alive",
"server": "gunicorn/19.9.0",
"access-control-allow-origin": "*",
"access-control-allow-credentials": "true",
},
extensions: Extensions,
body: Some(
{
"origin": "1.1.1.1"
}
,
),
}
[DEBUG] end: http://httpbin.org/
🎯:[ http://httpbin.org/]
🎯:[ http://httpbin.org/ip [httpbin-ip] <>]
|_📰: ip:["1.1.1.1"]
```
### MITM(中间人代理)支持
observer_ward 支持以 MITM(中间人代理)模式被动获取请求/响应并进行指纹识别,适合在代理场景下对真实流量进行被动指纹匹配。
启用要点:
- MITM 功能由 crate 特性 `mitm` 控制;默认特性包含 `mitm`,若使用自定义特性请确保启用该特性。
- 启动程序时使用 `--mitm ` 参数指定监听地址(例如 `127.0.0.1:1080`)。
本地启动示例:
```bash;no-run
➜ ./observer_ward --mitm 127.0.0.1:1080
INFO 📇probes loaded: 3131
INFO 🚀optimized probes: 9
INFO 🔌Starting MITM proxy server on 127.0.0.1:1080
INFO 🌐MITM proxy service started: http://127.0.0.1:1080
INFO 📔Configure your browser or tool to use this proxy
INFO 🔑CA certificate path: .slinger-mitm/ca_cert.pem
```
使用说明:
- 启动后会在日志中输出代理监听地址和 CA 证书路径`.slinger-mitm/ca_cert.pem`,导入 CA 证书以信任代理后即可拦截 HTTPS 流量。
- der格式证书可以使用 `openssl x509 -in ca_cert.pem -outform DER -out cacert.der`进行转换
- 被拦截的响应会异步提交给指纹引擎进行匹配,匹配到的结果会通过已有的输出方式(终端、文件、webhook 等)返回。
- 如果设置`--proxy`会使用上游代理,也就是流量会先经过observer_ward的mitm代理再经过上游代理发送请求。
- 若构建未启用 `mitm` 特性,启动时会提示特性未启用并返回错误。
### Asynq(Redis 分布式任务队列)支持
observer_ward 集成了基于 Redis 的任务队列([asynq](https://github.com/emo-crab/asynq)),可以把指纹识别任务通过 Redis 入队,worker 会从队列取出任务并处理;worker 也可以把处理结果发送回结果队列。
启用要点:
- Asynq 功能由 crate 特性 `asynq_task` 控制;默认特性包含 `asynq_task`,若使用自定义特性请确保启用该特性。
- 使用 `--asynq-redis ` 指定 Redis 连接(例如 `redis://127.0.0.1:6379`)。
- 使用 `--asynq-mode ` 指定模式:`receive`只从redis接受任务、`send`只发送识别结果到redis、`both`从redis接收任务并且将识别结果返回到redis。推荐 `both` 模式用于完整的收发流程。
启动 worker 示例(本地 Redis,both 模式):
```bash;no-run
➜ ./observer_ward --asynq-redis redis://127.0.0.1:6379 --asynq-mode both
```
发送任务示例:项目中包含示例程序 `observer_ward/examples/send_asynq_task.rs`,用于把示例任务入队。
```bash;no-run
cargo run --manifest-path observer_ward/Cargo.toml --example send_asynq_task
```
任务载荷示例:
- Uri(主动请求)任务示例:
```json
{
"task_id": "example-123456",
"input": {
"type": "uri",
"target": ["http://example.com"]
}
}
```
- HttpData(被动匹配)任务示例:
```json
{
"task_id": "example-123456",
"input": {
"type": "http_data",
"request": {
"uri": "http://example.com/",
"method": "GET",
"headers": null,
"body": null
},
"response": {
"uri": "http://example.com/",
"status_code": 200,
"headers": null,
"body": "...