jsmonhq/jsmon-cli

GitHub: jsmonhq/jsmon-cli

Jsmon 安全平台的官方命令行工具,支持从终端对 URL、域名和源代码发起安全扫描,并查询侦察数据与漏洞信息。

Stars: 33 | Forks: 10

# Jsmon CLI [Jsmon](https://jsmon.sh) 的官方命令行工具。扫描 URL、域名和源代码,上传文件,并从您的终端探索侦察和漏洞数据。 ![Jsmon CLI - 帮助](https://static.pigsec.cn/wp-content/uploads/repos/cas/7c/7c949bfe706882e69122d59a914d4cefcb0e8d4721814dabc26dcaa1db4f3866.png) ## 目录 - [快速开始](#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 ``` ![快速开始 - 创建 workspace 并扫描](https://static.pigsec.cn/wp-content/uploads/repos/cas/38/387530a504dc3be9defedaecd6d8a3297ffccd0498e7dc7c3f09929013baf849.png) ## 安装说明 ### 方式 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 范围或特定版本的结果时,可以在读取命令中使用这些值。 ![配置 - 凭证和 workspace](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/ddce7497d7a42962aba995ba15d0811cfe054178b16b9b95432bdad6d6fbe31a.png) ## 命令概览 ``` 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`。如果排队的文件扫描在处理前失败,请重新提交该文件。 ![扫描 - URL 或域名](https://static.pigsec.cn/wp-content/uploads/repos/cas/95/9508e28f634dfc2449b30487023f2850a5de7564103a4cc2582c035a534a2138.png) ## 查看数据 ### 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`。 ![侦察与过滤](https://static.pigsec.cn/wp-content/uploads/repos/cas/d7/d708a1d10b8f738b6e6e094bfd99f1d853ab7f2779332a074f8318ecaeb26e7d.png) ## 反向搜索 查找某个值的来源(例如哪个脚本暴露了某个 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语言, 前端正则化, 实时处理, 密码管理, 文档结构分析, 日志审计, 程序破解