ruwithma/jasper
GitHub: ruwithma/jasper
一个用 Bash 编写的 CTF/HackTheBox 自动化初始侦察工具,通过单条命令完成全端口扫描、服务检测和多协议并行枚举并生成精简报告。
Stars: 1 | Forks: 0
# jasper



我厌倦了每次开局都在靶机上敲那老一套的 15 个信息收集命令,所以我把它们全塞进了一个脚本里。你给它一个 IP,它就会扫描所有东西,找出主机名,帮你整理好 `/etc/hosts`,然后根据它发现的服务运行合适的工具——无论是 web、SMB、LDAP/AD、Kerberos、FTP、SNMP、数据库、NFS、RPC、WinRM、redis 还是其他什么。底层用的全都是标准的 Kali 工具,完全不需要安装什么奇怪的东西。
简而言之:运行它,去泡杯咖啡,回来就能看到一个 `SUMMARY.txt`,它会告诉你该从哪里下手。
## 它的实际功能
1. **端口** — rustscan 会扫遍所有 65535 个 TCP 端口(如果你没有 rustscan,它会回退到 `nmap -p-`)。它会先进行一次温和的 top-1000 扫描,这样即使目标机器有限速机制,也不会让你错过那些明显的端口。
2. **服务** — 对所有开放端口执行 `nmap -sCV`。它会直接从 nmap 的服务列中读取 TLS 信息,因此 HTTPS 会通过 `https://` 访问,而纯 HTTP 会通过 `http://` 访问,不会产生愚蠢的 Banner 误报。
3. **主机名 / 域名** — 从 TLS 证书、HTTP 重定向和 AD 脚本(`smb-os-discovery`、`rdp-ntlm-info`、LDAP rootDSE)中提取名称。**使用 sudo 运行它,它会直接将 `IP hostname` 写入 `/etc/hosts`**(它会先备份,不会重复添加,如果有失效的记录遮蔽了你的目标,它还会警告你)。如果它发现了像 `active.htb` 这样的点分名称,就会将其用作 vhost fuzzing 和 `Host:` header 的域名。没有 sudo 权限?它只会把这些内容打印出来供你手动粘贴。
4. **UDP** (sudo) — 针对 SNMP / DNS / SunRPC / TFTP 执行 top-50 UDP 扫描。它会在后台运行,因此不会阻塞其他扫描任务。
5. **针对服务的枚举** — 全部并行执行,每发现一项服务就启用一个模块:
| 服务 | 运行的操作 |
|---------|------------------|
| HTTP/S | whatweb, headers/title/robots, feroxbuster 扫目录, sslscan, wpscan (如果是 WordPress), nuclei (带 `-x`) |
| SMB 139/445 | netexec 空+访客会话, smbmap, smbclient `-L`, nmap smb 脚本 (包含 ms17-010), enum4linux |
| LDAP 389/636/3268 | 匿名 rootDSE + naming-context 转储 (用户/描述), `ldap-rootdse` |
| Kerberos 88 | 标记为 AD, 尝试 AS-REP roast, 打印下一步要运行的 kerberoast/userenum 命令 |
| FTP 21 | nmap `ftp-anon`, 尝试匿名登录 |
| SSH 22 | 主机密钥, algos, 认证方法, `ssh-audit`, user-enum 提示 |
| telnet 23 | 加密/ntlm-info, banner, 默认凭证提示 |
| VNC 5900/1 | `vnc-info`, realvnc auth-bypass, title |
| SNMP 161/udp | onesixtyone community brute, snmpwalk public |
| NFS/RPC 111/2049 | rpcinfo, showmount exports |
| MSSQL / MySQL / Postgres / Mongo | nmap 信息 + 空密码检查 |
| RDP 3389 | `rdp-ntlm-info` (泄露主机名/域名) |
| WinRM 5985/6 | 提示你 `evil-winrm` 命令 |
| redis 6379 | 未授权 `INFO` + `KEYS *` |
| SMTP 25 | `smtp-commands`, open-relay, ntlm-info |
| DNS 53 | AXFR zone transfer, ANY records |
| finger 79 | 用户枚举 |
6. **Vhosts / 子域名** — 一旦获知域名,就会进行 ffuf `Host:` header fuzzing(自动校准,通配符不会刷屏),外加被动的 amass。发现的任何内容都会像主主机一样进行目录爆破,并且与主扫描**同时进行**——因此你可以一次性获得基础域名*以及*每个 vhost 下的 `login`、`admin` 等内容。
7. **已有凭证?** (`-u user -p pass`,或使用 `-H hash` 进行 pass-the-hash) — 它会*以该用户身份*重新运行枚举,并使用 netexec 将凭证喷洒到每个开放协议上(SMB/WinRM/LDAP/MSSQL/SSH/RDP/Postgres),转储共享/用户/组,并将 roast 结果(AS-REP + Kerberoast)保存到 `loot/` 中。如果你看到 `Pwn3d!`,说明该用户在那台机器上是管理员。
8. **精华部分** — 一份精简的 `SUMMARY.txt` 和一个带颜色标记的 **START HERE** 列表,该列表会 grep 出所有重要内容(开放的共享、匿名访问、AS-REP 哈希、ms17-010、community strings...),并将其评定为 CRIT/HIGH/INFO 级别,这样你就不用盯着满屏的输出发呆,不知道该先做什么了。
在执行任何操作之前,它会进行一次快速的**工具预检**——任何你缺失的工具都会连同它们本应执行的操作一起列出,因此空的输出文件始终意味着“未发现任何内容”,而绝不是“哦,你没安装那个工具”。
## 获取
```
git clone https://github.com/ruwithma/jasper
cd jasper
chmod +x jasper
sudo ln -s "$PWD/jasper" /usr/local/bin/jasper # optional, so it's on your PATH
```
如果你想直接使用 `sudo jasper`,可以将它 symlink 到 `/usr/bin`(这是 sudo `secure_path` 中包含的路径)。
## 使用方法
```
jasper [options] # run with sudo for /etc/hosts + UDP
```
| 选项 | 作用 |
|--------|---------|
| `-d, --domain ` | AD/vhost 基础名 (如果跳过则自动检测) |
| `-o, --out ` | 输出目录 (默认为 `jasper-`) |
| `-w, --wordlist ` | 目录扫描字典 (默认为 `dirb/common.txt`) |
| `-t, --threads ` | web 爆破并发数 (默认为 50) |
| `-x, --nuclei` | 在 web 相关服务上运行 nuclei |
| `-u, --user ` | 已知用户名 → 认证重枚举 + 密码喷射 |
| `-p, --pass ` | 已知密码 (与 `-u` 一起使用) |
| `-H, --hash ` | 用于 pass-the-hash 的 NTLM hash (与 `-u` 一起使用) |
| `--local-auth` | 凭证是本地账户,而非域账户 |
| `--no-udp` | 跳过 UDP |
| `--no-svc` | 跳过针对服务的枚举 |
| `--no-web` | 跳过 web 内容枚举 |
| `--no-vhost` | 跳过 vhost fuzzing |
| `--deep` | 使用更大的字典 (dirbuster medium) |
| `--quick` | 仅扫描 top-2000 TCP,当你赶时间时使用 |
## 示例
```
sudo jasper 10.10.11.55 # the usual — everything, hosts sorted for you
sudo jasper 10.10.10.100 -x # same but also run nuclei
jasper 10.10.10.161 --quick # fast pass, no root
sudo jasper 10.10.11.55 -u bob -p 'S3cret!' # once you've got creds
sudo jasper 10.10.10.100 -u admin -H :aad3b435... # pass-the-hash
```
## 结果输出位置
```
jasper-/
├── SUMMARY.txt the condensed findings + what to do next
├── scans/ rustscan, nmap tcp/udp/services (txt + xml)
├── services/ one file per service (smb.txt, 389_ldap.txt, ...)
├── web/ whatweb, headers, feroxbuster, sslscan, wpscan, nuclei
├── vhost/ ffuf vhost + passive amass
└── loot/ /etc/hosts backup + scratch
```
## 杂项说明
- Web 指纹识别会回退到旧的 TLS 加密套件(`SECLEVEL=0`, TLS 1.0),因此它在古老的 CentOS / OpenSSL 1.0.2 机器上依然有效。
- 如果你需要更大的字典,请安装 `seclists`,然后在使用 `-w` 时指定它们。
- 它只进行枚举——不会为你执行任何漏洞利用。它只会打印出后续需要执行的命令(kerberoast、evil-winrm、psql 等),让你知道下一步该做什么。
## 贡献
欢迎提交 PR 和 issues——请查看 [CONTRIBUTING.md](CONTRIBUTING.md)。它只是一个 Bash 脚本,所以保持轻量,并坚持使用标准的 Kali 工具集。
## 许可证
[MIT](LICENSE) © ruwithma



我厌倦了每次开局都在靶机上敲那老一套的 15 个信息收集命令,所以我把它们全塞进了一个脚本里。你给它一个 IP,它就会扫描所有东西,找出主机名,帮你整理好 `/etc/hosts`,然后根据它发现的服务运行合适的工具——无论是 web、SMB、LDAP/AD、Kerberos、FTP、SNMP、数据库、NFS、RPC、WinRM、redis 还是其他什么。底层用的全都是标准的 Kali 工具,完全不需要安装什么奇怪的东西。
简而言之:运行它,去泡杯咖啡,回来就能看到一个 `SUMMARY.txt`,它会告诉你该从哪里下手。
## 它的实际功能
1. **端口** — rustscan 会扫遍所有 65535 个 TCP 端口(如果你没有 rustscan,它会回退到 `nmap -p-`)。它会先进行一次温和的 top-1000 扫描,这样即使目标机器有限速机制,也不会让你错过那些明显的端口。
2. **服务** — 对所有开放端口执行 `nmap -sCV`。它会直接从 nmap 的服务列中读取 TLS 信息,因此 HTTPS 会通过 `https://` 访问,而纯 HTTP 会通过 `http://` 访问,不会产生愚蠢的 Banner 误报。
3. **主机名 / 域名** — 从 TLS 证书、HTTP 重定向和 AD 脚本(`smb-os-discovery`、`rdp-ntlm-info`、LDAP rootDSE)中提取名称。**使用 sudo 运行它,它会直接将 `IP hostname` 写入 `/etc/hosts`**(它会先备份,不会重复添加,如果有失效的记录遮蔽了你的目标,它还会警告你)。如果它发现了像 `active.htb` 这样的点分名称,就会将其用作 vhost fuzzing 和 `Host:` header 的域名。没有 sudo 权限?它只会把这些内容打印出来供你手动粘贴。
4. **UDP** (sudo) — 针对 SNMP / DNS / SunRPC / TFTP 执行 top-50 UDP 扫描。它会在后台运行,因此不会阻塞其他扫描任务。
5. **针对服务的枚举** — 全部并行执行,每发现一项服务就启用一个模块:
| 服务 | 运行的操作 |
|---------|------------------|
| HTTP/S | whatweb, headers/title/robots, feroxbuster 扫目录, sslscan, wpscan (如果是 WordPress), nuclei (带 `-x`) |
| SMB 139/445 | netexec 空+访客会话, smbmap, smbclient `-L`, nmap smb 脚本 (包含 ms17-010), enum4linux |
| LDAP 389/636/3268 | 匿名 rootDSE + naming-context 转储 (用户/描述), `ldap-rootdse` |
| Kerberos 88 | 标记为 AD, 尝试 AS-REP roast, 打印下一步要运行的 kerberoast/userenum 命令 |
| FTP 21 | nmap `ftp-anon`, 尝试匿名登录 |
| SSH 22 | 主机密钥, algos, 认证方法, `ssh-audit`, user-enum 提示 |
| telnet 23 | 加密/ntlm-info, banner, 默认凭证提示 |
| VNC 5900/1 | `vnc-info`, realvnc auth-bypass, title |
| SNMP 161/udp | onesixtyone community brute, snmpwalk public |
| NFS/RPC 111/2049 | rpcinfo, showmount exports |
| MSSQL / MySQL / Postgres / Mongo | nmap 信息 + 空密码检查 |
| RDP 3389 | `rdp-ntlm-info` (泄露主机名/域名) |
| WinRM 5985/6 | 提示你 `evil-winrm` 命令 |
| redis 6379 | 未授权 `INFO` + `KEYS *` |
| SMTP 25 | `smtp-commands`, open-relay, ntlm-info |
| DNS 53 | AXFR zone transfer, ANY records |
| finger 79 | 用户枚举 |
6. **Vhosts / 子域名** — 一旦获知域名,就会进行 ffuf `Host:` header fuzzing(自动校准,通配符不会刷屏),外加被动的 amass。发现的任何内容都会像主主机一样进行目录爆破,并且与主扫描**同时进行**——因此你可以一次性获得基础域名*以及*每个 vhost 下的 `login`、`admin` 等内容。
7. **已有凭证?** (`-u user -p pass`,或使用 `-H hash` 进行 pass-the-hash) — 它会*以该用户身份*重新运行枚举,并使用 netexec 将凭证喷洒到每个开放协议上(SMB/WinRM/LDAP/MSSQL/SSH/RDP/Postgres),转储共享/用户/组,并将 roast 结果(AS-REP + Kerberoast)保存到 `loot/` 中。如果你看到 `Pwn3d!`,说明该用户在那台机器上是管理员。
8. **精华部分** — 一份精简的 `SUMMARY.txt` 和一个带颜色标记的 **START HERE** 列表,该列表会 grep 出所有重要内容(开放的共享、匿名访问、AS-REP 哈希、ms17-010、community strings...),并将其评定为 CRIT/HIGH/INFO 级别,这样你就不用盯着满屏的输出发呆,不知道该先做什么了。
在执行任何操作之前,它会进行一次快速的**工具预检**——任何你缺失的工具都会连同它们本应执行的操作一起列出,因此空的输出文件始终意味着“未发现任何内容”,而绝不是“哦,你没安装那个工具”。
## 获取
```
git clone https://github.com/ruwithma/jasper
cd jasper
chmod +x jasper
sudo ln -s "$PWD/jasper" /usr/local/bin/jasper # optional, so it's on your PATH
```
如果你想直接使用 `sudo jasper`,可以将它 symlink 到 `/usr/bin`(这是 sudo `secure_path` 中包含的路径)。
## 使用方法
```
jasper 标签:应用安全, 插件系统