ruwithma/jasper

GitHub: ruwithma/jasper

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

Stars: 1 | Forks: 0

# jasper Jasper ![shell](https://img.shields.io/badge/bash-5%2B-4EAA25?logo=gnubash&logoColor=white) ![license](https://img.shields.io/badge/license-MIT-blue) ![platform](https://img.shields.io/badge/platform-Kali%20Linux-557C94?logo=kalilinux&logoColor=white) 我厌倦了每次开局都在靶机上敲那老一套的 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
标签:应用安全, 插件系统