jsmonhq/jsmon-cli
GitHub: jsmonhq/jsmon-cli
Jsmon 安全平台的官方命令行工具,支持从终端对 URL、域名和源代码发起安全扫描,并查询侦察数据与漏洞信息。
Stars: 33 | Forks: 10
# Jsmon CLI
[Jsmon](https://jsmon.sh) 的官方命令行工具。扫描 URL、域名和源代码,上传文件,并从您的终端探索侦察和漏洞数据。

## 目录
- [快速开始](#quick-start)
- [安装说明](#installation)
- [配置](#configuration)
- [命令概览](#commands-overview)
- [扫描](#scanning)
- [查看数据](#viewing-data)
- [侦察与过滤](#reconnaissance--filters)
- [反向搜索](#reverse-search)
- [更新](#updates)
- [示例](#examples)
## 快速开始
1. **安装** CLI(参见[安装说明](#installation))。
2. **设置您的 API key**(通过 flag、文件或 env 设置——参见[配置](#configuration))。
3. **创建或选择一个 workspace**,然后开始扫描。
```
# 创建 workspace
jsmon -cw "My Project" -key YOUR_API_KEY
# 扫描 URL(使用上一个命令中的 workspace ID)
jsmon -u "https://example.com/app.js" -wksp YOUR_WORKSPACE_ID
# 列出侦察数据(例如 emails)
jsmon -recon "field=emails page=1" -wksp YOUR_WORKSPACE_ID
```

## 安装说明
### 方式 1:通过 Go 安装(推荐)
```
go install github.com/jsmonhq/jsmon-cli/v2/cmd/jsmon@latest
```
确保您的 Go `bin` 目录包含在您的 `PATH` 中(例如 `$HOME/go/bin`)。安装的命令为 `jsmon`。
### 方式 2:从源码构建
```
git clone https://github.com/jsmonhq/jsmon-cli.git
cd jsmon-cli
go build -o jsmon ./cmd/jsmon
```
这将从源码创建一个本地的 `jsmon` 二进制文件。
## 配置
### API key
从 [Jsmon](https://app.jsmon.sh/settings) 获取您的 API key。CLI 会按以下顺序查找它:
| 优先级 | 来源 |
|----------|--------|
| 1 | `-key YOUR_API_KEY` |
| 2 | 文件:`~/.jsmon/credentials` |
| 3 | 环境变量:`JSMON_API_KEY` |
**凭证文件:**创建 `~/.jsmon/credentials` 并将您的 API key 放在第一行(无需标签)。以 `#` 开头的行将被忽略。
### Workspace ID
对于扫描和数据命令,您需要一个 **workspace ID**:
- 通过 **`-wksp YOUR_WORKSPACE_ID`** 传递,或者
- 在您的环境变量中设置 **`JSMON_WORKSPACE_ID`**。
Workspace ID **不会**从凭证文件中读取;它必须通过每个命令或环境变量单独提供。
### 可选项
- **`-H "Header-Name: value"`** — 为扫描请求添加自定义 HTTP 标头(可多次使用)。
- **`-silent`** — 运行命令时隐藏 Jsmon logo。
- **`-depth 1..4` / `-scan-depth 1..4`** — 控制域名扫描深度。
- **`-wafbypass` / `-waf-bypass`** — 为 URL、域名和文件扫描启用 WAF 绕过。
- **`-keywords "api,admin"` / `-scan-keywords "api,admin"`** — 添加域名扫描关键字。
- **`-extensions "js,json"` / `-scan-extensions "js,json"`** — 将域名扫描限制为受支持的扩展名。
扫描命令会将任务提交到 Jsmon 的异步 pipeline。CLI 会打印出排队的 `runId` 和 `version`;当您需要特定 run 范围或特定版本的结果时,可以在读取命令中使用这些值。

## 命令概览
```
Usage: jsmon [OPTIONS]
Input:
-u Input URL to scan
-d Input domain to scan
-cs | -code-scan Input source code file to scan
-f Upload a URL list file for server-side file scan
-cw | --create-workspace Create a new workspace
Configuration:
-key API key (or add the API key to ~/.jsmon/credentials)
Visit: https://app.jsmon.sh/settings
-wksp Workspace ID to scan the target
-runId Existing run ID for rescan or run-scoped counts
-depth <1..4> | -scan-depth <1..4> Optional scan depth for domain scans
-wafbypass | -waf-bypass Enable WAF bypass for URL, domain, and file scans
-keywords | -scan-keywords Optional domain scan keywords
-extensions | -scan-extensions Optional domain scan extensions
-H Custom HTTP headers to send along with request to scan
-silent Silent the logo
-up, --update Check for updates and show update command
-duc, --disable-update-check Disable automatic update check on startup
Scans:
-count Show the counts of reconnaissance data and secrets count
--urls "page= limit=" Fetch all scanned URLs (default: page=1, limit=100)
--domains "page= limit=" Fetch all scanned domains (default: page=1, limit=100)
--files "page= limit=" Fetch all scanned files (default: page=1, limit=100)
Advanced Scan:
Supported scan types:
-wafbypass URL, domain, and file scans
-depth, -keywords, -extensions Domain scans only
Allowed extensions: html, php, txt, js, xml, json, map, xhtml, aspx
Examples:
jsmon -u "https://example.com/app.js" -wafbypass -wksp
jsmon -d "example.com" -depth 3 -keywords "api,admin" -extensions "js,json" -wafbypass -wksp
jsmon -f urls.txt -wafbypass -wksp
Data:
-workspaces Fetch all workspaces
-issues "page= limit= ..." Fetch dashboard vulnerabilities for a workspace (default: page=1, limit=100)
Supported options: severity, dateFrom, dateTo
-secrets "page= limit= runId= version="
Fetch all secrets for a workspace (default: page=1, limit=100)
-recon "field= page= limit= runId= version="
Fetch the reconnaissance data (default: page=1, limit=100)
Example: -recon "field=extractedUrls page=3 limit=50"
Reverse Search:
-rsearch "=" Search the source of the result where it comes from
Example: -rsearch "apipaths=@azure/msal-browser"
Filter:
-filters "= page= limit= runId= version="
Match keywords in the field data in reconnaissance results
(default: page=1, limit=100)
Example: -filters "urls=github.com page=2 limit=50"
Help:
-h, --help Show this help message
Field Names:
-recon, -rsearch:
apiPaths, urls/jsurls (scanned URLs), extractedUrls, extractedDomains, ip, emails, s3Buckets, s3takeovers, gqlQueries, gqlMutations, gqlMutaions, gqlFragments, param (extracted parameter),
npmPackages, npmConfusion, guids, localhost, expiredDomains, allAwsAssets, socialUrls,
portUrls, extensionUrls
-filters:
jsurls, apiPaths, urls, emails, gqlQueries, gqlMutations, gqlMutaions, sqlFragments, param (extracted parameter)
```
## 扫描
### 上传单个 URL
```
jsmon -u "https://example.com/script.js" -wksp YOUR_WORKSPACE_ID
```
### 扫描域名
```
jsmon -d "example.com" -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -depth 3 -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -depth 3 -keywords "api,admin" -extensions "js,json" -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -wafbypass -wksp YOUR_WORKSPACE_ID
```
`-depth`、`-keywords` 和 `-extensions` 仅用于域名扫描。受支持的扩展名值为 `html`、`php`、`txt`、`js`、`xml`、`json`、`map`、`xhtml` 和 `aspx`。
### 上传源代码文件
```
jsmon -cs app.js -wksp YOUR_WORKSPACE_ID
```
### 从文件上传多个 URL
将文件中的 URL 设置为每行一个,然后将该文件提交给 Jsmon 的服务器端文件扫描:
```
jsmon -f urls.txt -wksp YOUR_WORKSPACE_ID
jsmon -f urls.txt -wafbypass -wksp YOUR_WORKSPACE_ID
```
响应包含 `runId` 和 `version`。如果排队的文件扫描在处理前失败,请重新提交该文件。

## 查看数据
### Workspace
```
jsmon -workspaces -key YOUR_API_KEY
```
### 已扫描的 URL、域名和文件
```
jsmon --urls "page=1 limit=50" -wksp YOUR_WORKSPACE_ID
jsmon --domains "page=1 limit=50" -wksp YOUR_WORKSPACE_ID
jsmon --files "page=1 limit=50" -wksp YOUR_WORKSPACE_ID
```
如果省略,默认为 `page=1` 和 `limit=100`。(每页最大限制:5000)
### Secrets
```
jsmon -secrets "page=1 limit=100" -wksp YOUR_WORKSPACE_ID
```
### Dashboard 漏洞 (`-issues`)
```
jsmon -issues "page=1 limit=20" -wksp YOUR_WORKSPACE_ID
jsmon -issues "page=1 limit=20 severity=critical,high dateFrom=2026-04-01 dateTo=2026-04-14" -wksp YOUR_WORKSPACE_ID
```
`-issues` 命令映射了挂载的 Dashboard 漏洞表,并返回 `data`、`severityCount` 和 `pagination`。
### 数量摘要
```
jsmon -count -wksp YOUR_WORKSPACE_ID
```
可选:为特定的 run 添加 `-runId RUN_ID`。
## 侦察与过滤
### 获取侦察数据 (`-recon`)
获取某个 **field** 的提取情报以及可选的分页:
```
jsmon -recon "field=emails page=1 limit=50" -wksp YOUR_WORKSPACE_ID
```
**常用 field:** `apiPaths`,用于扫描 URL 的 `urls`/`jsurls`,用于自动提取 URL 字符串的 `extractedUrls`,`extractedDomains`,`expiredDomains`,`ip`,`emails`,`s3Buckets` (`awsassets.s3buckets`),`gqlQueries`,`gqlMutations`,`gqlFragments`,`param`,`allAwsAssets`,`npmPackages`,`socialUrls`,`portUrls`,`extensionUrls` 等(参见 `jsmon -h`)。
添加 `runId=` 可将结果范围限定为单次扫描。结合 `runId` 添加 `version=` 可检查特定的监控/重扫版本。
### 按关键字过滤 (`-filters`)
在某个 field 中搜索(例如仅查找包含“github”的 URL):
```
jsmon -filters "urls=github.com page=1" -wksp YOUR_WORKSPACE_ID
jsmon -filters "param=github page=1" -wksp YOUR_WORKSPACE_ID
```
格式:`"fieldname=keyword page=N limit=N"`。默认值:`page=1`,`limit=100`。

## 反向搜索
查找某个值的来源(例如哪个脚本暴露了某个 API path):
```
jsmon -rsearch "apipaths=@azure/msal-browser" -wksp YOUR_WORKSPACE_ID
jsmon -rsearch "extractedDomains=blogs.jsmon.sh" -wksp YOUR_WORKSPACE_ID
```
格式:`"fieldname=value"`。对于域名反向搜索,请使用 **extractedDomains**(而不是 `domains`)。
## 更新
- **自动:**启动时,CLI 会检查是否有更新的版本,如果有则会打印提示信息(不会自动下载)。
- **手动检查:**使用 `jsmon -up` 或 `jsmon --update` 进行检查并查看安装命令。
- **禁用启动检查:**使用 `jsmon -duc` 或 `jsmon --disable-update-check`。
发布新版本后进行升级:
```
go install github.com/jsmonhq/jsmon-cli/v2/cmd/jsmon@latest
```
## 示例
```
# 创建 workspace
jsmon -cw "My Project" -key YOUR_API_KEY
# 扫描 targets
jsmon -u "https://example.com/script.js" -wksp YOUR_WORKSPACE_ID
jsmon -u "https://example.com/script.js" -wafbypass -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -depth 2 -wksp YOUR_WORKSPACE_ID
jsmon -d "example.com" -depth 3 -keywords "api,admin" -extensions "js,json" -wafbypass -wksp YOUR_WORKSPACE_ID
jsmon -cs app.js -wksp YOUR_WORKSPACE_ID
jsmon -f urls.txt -wksp YOUR_WORKSPACE_ID
# 使用 credentials 文件(无需 -key)
jsmon -u "https://example.com/script.js" -wksp YOUR_WORKSPACE_ID
# Reconnaissance
jsmon -recon "field=emails page=1" -wksp YOUR_WORKSPACE_ID
jsmon -recon "field=allAwsAssets page=1" -wksp YOUR_WORKSPACE_ID
jsmon -issues "page=1 limit=20 severity=critical,high" -wksp YOUR_WORKSPACE_ID
# 过滤和反向搜索
jsmon -filters "urls=api page=1" -wksp YOUR_WORKSPACE_ID
jsmon -rsearch "apipaths=/auth/login" -wksp YOUR_WORKSPACE_ID
```
## 许可证与链接
- **GitHub:**[github.com/jsmonhq/jsmon-cli](https://github.com/jsmonhq/jsmon-cli)
- **Jsmon:**[jsmon.sh](https://jsmon.sh)
标签:EVTX分析, Go语言, 前端正则化, 实时处理, 密码管理, 文档结构分析, 日志审计, 程序破解