chud-lori/ngehe

GitHub: chud-lori/ngehe

Stars: 0 | Forks: 0

# ngehe Status: alpha. Useful in real engagements, not yet a finished product. Website: [chud-lori.github.io/ngehe](https://chud-lori.github.io/ngehe/) ## What ngehe Does Three top-level commands. ### `ngehe box ` Full-spectrum scan. Shells out to nmap, then dispatches per-service scanners (SSH, FTP, SMB, LDAP, SNMP, DNS, DBs) plus the web recon flow against any HTTP ports. The "I just got an HTB IP" entry point. ngehe box --target 10.10.11.5 --domain target.htb --markdown box.md ### `ngehe recon ` Point this at a URL you've never seen — an HTB IP, a freshly-discovered subdomain, a staging server. ngehe will: - Fingerprint the technology (server, framework, CMS, session cookie names, body markers) - Probe for sensitive files using SecLists' `quickhits` wordlist plus content fingerprinting (.git, .env, AWS creds, server-status, phpinfo) - Walk the SecLists `common.txt` directory bruteforce wordlist - Categorize findings by HTTP status and exploitability ngehe recon --target http://10.10.11.5 --markdown recon.md ### `ngehe surface ` Subdomain enumeration + live-host probing using established open-source scanners: **amass** (OWASP, comprehensive passive), **subfinder** (projectdiscovery, fast passive), and **httpx** (projectdiscovery, probe + tech fingerprint). With `--nuclei`, also runs projectdiscovery's template scanner against the live hosts. ngehe surface --domain target.htb # prints colored summary to terminal ngehe surface --domain target.htb --markdown surface.md # save markdown report ngehe surface --domain target.htb --out s.jsonl # save JSONL for jq ngehe surface --domain target.htb --nuclei # add CVE / misconfig templates Output mode is opt-in: default is terminal print (with ANSI colors and a "Suggested attack chain" header for critical/high findings); pass `--out` or `--markdown` to write a file instead. Same behavior for `recon`, `scan`, and `box`. Each tool is opt-out via `--no-amass` / `--no-subfinder` / `--no-httpx`; missing binaries are skipped (no hard failure). Install them with `./install.sh --with-extras`. Live URLs are printed to stdout at the end — chain into `ngehe recon` / `ngehe scan` / `ngehe box`: ngehe surface -d target.htb | while read url; do ngehe scan --target "$url" --config ngehe.yaml done ### `ngehe scan` Three input modes — pick whichever you have. # Mode 1 — HAR (best signal). Capture real traffic in Burp / DevTools. ngehe scan --har capture.har --config ngehe.yaml --markdown findings.md # Mode 2 — OpenAPI. Synthesize requests from the spec. ngehe scan --openapi openapi.yaml --base https://api.example.com --config ngehe.yaml # Mode 3 — URL only. ngehe crawls common paths and synthesizes requests with # common parameter names (id, q, file, path, url, cmd, host, msg, ...). # Lower signal than HAR (we're guessing params), but works from just a URL. ngehe scan --target http://10.10.11.5 --config ngehe.yaml --markdown findings.md # Add nuclei templates (CVEs, default-config, exposures) on top of the native detectors: ngehe scan --har capture.har --config ngehe.yaml --nuclei --markdown findings.md ## External Scanner Integrations ngehe shells out to four established open-source scanners when present on PATH. Each integration emits findings into the same JSONL with `source:` set so you can filter native vs upstream. | Tool | Module / flag | Purpose | |---|---|---| | **nuclei** (projectdiscovery) | `scan --nuclei`, `box --nuclei`, `surface --nuclei` | Template-based scanner — thousands of community CVE / misconfig / exposure templates | | **amass** (OWASP) | `ngehe surface` | Comprehensive passive subdomain enumeration | | **subfinder** (projectdiscovery) | `ngehe surface` | Fast passive subdomain enumeration | | **httpx** (projectdiscovery) | `ngehe surface` | Probe hostnames for live HTTP + tech fingerprint | All four install via `./install.sh --with-extras` (uses apt on Debian-family distros, brew on macOS, upstream release binaries from each project's GitHub releases as a portable fallback). They're opt-in: if a binary is missing, ngehe prints a hint and skips it without failing the run. For deeper post-finding exploitation, install separately: `hashcat`, `sqlmap`, `bloodhound`, `impacket` — these are documented as next-step handoffs in the per-finding `next` field. The Docker image bundles all of them so you don't need to install anything on the host. ## Non-Web Service Scanners (ngehe box) Bundled service modules. Each fires automatically when nmap detects the relevant service. | Service | Module | What it does | |---|---|---| | SSH | `ssh-banner`, `ssh-old-openssh`, `ssh-libssh-auth-bypass`, `ssh-cve-2018-15473`, `ssh-auth-methods`, `ssh-none-auth-allowed` | Banner grab, version-based CVE flags (libssh CVE-2018-10933, OpenSSH ≤7.7 user enum), auth method enumeration | | FTP | `ftp-banner`, `ftp-anonymous-allowed`, `ftp-anonymous-listing` | Anonymous login + file listing | | SMB | `smb-null-session-allowed`, `smb-anonymous-allowed`, `smb-guest-allowed` | Share enumeration with null / anonymous / guest | | LDAP | `ldap-anonymous-bind`, `ldap-root-dse`, `ldap-user-enum`, `ldap-asrep-roastable` | Anonymous bind, domain controller info, full user list, accounts with DONT_REQ_PREAUTH | | SNMP | `snmp-community-accepted` | Common community strings (public, private, ...) | | DNS | `dns-axfr-allowed`, `dns-subdomain` | Zone transfer + subdomain bruteforce | | MySQL / Postgres / MSSQL / Redis | `db-default-creds-*`, `db-no-auth-redis` | Default credential check; Redis unauth INFO | | Active Directory | `kerberos-asrep-roast`, `kerberos-kerberoast` | hashcat-format hash extraction via gokrb5 | | BloodHound | `bloodhound-collect` | LDAP-based subset collection (users / computers / groups) in BloodHound JSON schema | | HTTP NTLM | `ntlm-spray-hit` | Password spray against HTTP NTLM endpoints | ## Detector Library — OWASP Coverage | OWASP | Detector | What it does | |---|---|---| | **A01 Broken Access Control** | `bola-cross-user-access` | Replay request as each other session; flag when offender gets a similar response | | | `broken-auth-anon-access` | Same request without auth — flag 2xx | | | `idor-mutated-id` | Permute numeric / UUID IDs in path + JSON body | | | `lfi-path-traversal` | `../../etc/passwd`, encoding variants, `php://filter`, `file://` | | **A02 Cryptographic Failures** | `jwt-alg-none` | Server accepted unsigned token | | | `jwt-weak-secret-*` | HS256 token re-signed with weak secret accepted | | | `jwt-no-exp-check` | Token with `exp=0` accepted | | | `jwt-kid-injection` | Path-traversal `kid` accepted | | | `jwt-no-iss-check` / `jwt-no-aud-check` | Issuer / audience not validated | | **A03 Injection** | `sqli-error-based` | Single-quote payload triggered DB error string | | | `sqli-time-based` | `SLEEP(5)` / `WAITFOR DELAY` caused response delay | | | `cmdi-marker` | Shell command output reflected in response (RCE confirmed) | | | `cmdi-time-based` | Sleep payload caused response delay (blind RCE) | | | `ssti` | Template expression `{{1337*1331}}` evaluated to `1779547` | | | `xss-reflected` | Payload reflected unescaped into HTML context | | **A05 Security Misconfiguration** | `sensitive-file` | Curated probes for .git, .env, AWS creds, phpinfo with content fingerprinting | | | `sensitive-path` | Broad SecLists quickhits.txt probes (low-signal coverage) | | | `dir-discovery` | SecLists common.txt directory bruteforce | | | `default-credentials` | Curated web admin creds tested against configured login URLs | | **A06 Vulnerable Components** | `tech-fingerprint` | Identifies server, framework, CMS, runtime versions for manual CVE lookup | | | `server-header` / `x-powered-by` | Raw header disclosure | | **A07 Authentication Failures** | `default-credentials` | (see A05) | | | `jwt-*` | (see A02) | | **A08 Software & Data Integrity** | `mass-assign-reflected` | Injected `isAdmin`/`role`/`owner`/... echoed in response | | | `mass-assign-accepted` | Same injection succeeded silently | | **A10 Server-Side Request Forgery** | `ssrf` | Cloud metadata services (AWS/GCP/Azure), `file://`, loopback, gopher/dict wrappers | ## Wordlists ngehe embeds three wordlists from [danielmiessler/SecLists](https://github.com/danielmiessler/SecLists) (MIT, the de-facto standard collection used by `ffuf`, `gobuster`, `dirsearch`, `feroxbuster`): | File | Source | Size | |---|---|---| | Common paths | `Discovery/Web-Content/common.txt` | 4750 entries | | Sensitive files | `Discovery/Web-Content/quickhits.txt` | 2567 entries | | Default credentials | `Passwords/Default-Credentials/default-passwords.csv` | 2876 entries | Plus a small curated subset of universally-useful web admin credentials for fast default-creds scans. See [`internal/wordlist/NOTICE.md`](internal/wordlist/NOTICE.md) for attribution. ## Architecture ┌───────────────────────────────────────┐ │ target / capture │ └───┬──────────────────┬────────────────┘ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ ngehe recon │ │ ngehe scan │ │ (URL only) │ │ (HAR / OpenAPI) │ └────────┬─────────┘ └────────┬─────────┘ ▼ ▼ ┌─────────────────────────────────────────┐ │ fingerprint sensitive dirbust │ │ sqli cmdi ssti lfi ssrf xss creds │ │ bola jwt-abuse id-mutate mass-assign │ └────────────────────┬────────────────────┘ ▼ ┌────────────────────────┐ │ JSONL + markdown report│ └────────────────────────┘ Each detector is a separate package under `internal/detector/` and `internal/recon/`. They share `httpx`, `fuzz`, `oracle`, `finding`, and `wordlist` utilities. ### `ngehe chain ` Guided exploit walkthrough. After any scan you have a JSONL with per-rule playbook hints in the `next` field; `ngehe chain` walks them interactively, displays the playbook for each critical/high finding, and prompts you to type/confirm the command to run. The command shells out via `bash` with stdio attached, so reverse-shell listeners, evil-winrm sessions, sqlmap prompts, etc. behave normally. **The bridge between "ngehe found a thing" and "I have a shell."** ngehe surface -d example.com --nuclei --out findings.jsonl ngehe chain findings.jsonl ngehe chain findings.jsonl --all # include medium / low findings, not just critical / high Best run inside the container — every handoff tool (`hashcat`, `evil-winrm`, `netexec`, `impacket-*`, etc.) is pre-installed. ## Container Don't want to install on your host? Use the bundled Docker image instead. Works on Linux, macOS (Apple Silicon + Intel), Windows / WSL — same image, no platform-specific compile headaches. # 1. Clone the repo (you need the Dockerfile + wrapper). git clone https://github.com/chud-lori/ngehe.git cd ngehe # 2. First run auto-builds the image (one-time, 15-25 min — NetExec's Rust RDP module is the slow part). ./scripts/ngehe doctor # 3. Use it like the native binary. ./scripts/ngehe surface -d example.com --nuclei ./scripts/ngehe box --target 10.10.11.5 --markdown box.md ./scripts/ngehe --shell # drop into a shell with every tool on PATH The image is ~2GB and bundles **the full web + box pentest toolkit** — ngehe is the primary entry point, but every tool you'd reach for during an engagement is on PATH: - **ngehe + integrations**: nuclei (templates pre-baked) + amass + subfinder + httpx - **Web**: nmap, sqlmap, ffuf, gobuster, dalfox - **AD / box**: hashcat, impacket (full Python suite), netexec, evil-winrm, kerbrute, enum4linux-ng, smbclient, ldap-utils, bloodhound-python - **Networking**: ncat, socat, openssh-client, proxychains4 - **Reference**: PayloadsAllTheThings cloned to `/opt/PayloadsAllTheThings` No `--with-extras`, no `apt install`, no Python venv juggling, no `nuclei -update-templates` — pull once and every command works. Rebuild after pulling repo updates: git pull ./scripts/ngehe --rebuild doctor # or: docker compose build Use docker compose instead of the wrapper: docker compose run --rm ngehe surface -d example.com --nuclei Raw `docker run` (skip the wrapper): docker run --rm -it \ --network host \ -v "$PWD:/work" \ -v ngehe-nuclei-templates:/root/nuclei-templates \ ngehe:local surface -d example.com --nuclei **macOS caveat:** Docker Desktop's `--network host` runs through a VM bridge. Scanning your own LAN works (RFC1918 reachable), but a few edge cases (raw-socket nmap modes) need `--cap-add=NET_RAW --cap-add=NET_ADMIN`. ngehe uses TCP connect scans by default, so the basic flow just works. See [Dockerfile](Dockerfile) for build args (template skip, version pinning) and [compose.yaml](compose.yaml) for the canonical mount layout. ## Install One-line installer (detects brew/apt/dnf/pacman/apk, installs `nmap`, builds + drops ngehe in `/usr/local/bin`): git clone https://github.com/chud-lori/ngehe.git cd ngehe sudo ./install.sh # base install (ngehe + nmap) sudo ./install.sh --with-extras # also install nuclei + amass + subfinder + httpx Non-root install to `~/.local/bin`: PREFIX=$HOME/.local ./install.sh --with-extras Uninstall: sudo ./install.sh --uninstall # ngehe binary only sudo ./install.sh --uninstall --with-extras # also remove nuclei + amass + subfinder + httpx sudo ./install.sh --uninstall --purge # nuke EVERYTHING: above + nmap + ~/nuclei-templates # + tool config dirs + Go module cache The plain `--uninstall` is conservative: it only removes the `ngehe` binary. `--with-extras` also removes the four scanner packages (apt remove / brew uninstall / `~/go/bin/*` / `~/.local/bin/*`) but keeps config dirs and the nuclei template cache. `--purge` is the full wipe — drops nmap, deletes `~/nuclei-templates` (~1GB), removes config dirs in `~/.config/{nuclei,subfinder,amass,httpx}`, runs `go clean -modcache` to clear any leftover modules (including the `vulncheck-oss/go-exploit` webshell fixtures that some scanners flag). The Go toolchain itself is left alone (ngehe never installed it); the purge step prints the apt/brew/tarball-removal commands if you want to remove Go too. Manual: go build -o ngehe . sudo install -m 0755 ngehe /usr/local/bin/ngehe # you still need: brew install nmap (macOS) # sudo apt install nmap (debian/ubuntu) After install, verify deps: ngehe doctor ## HTB Quick Start # 1. Full-spectrum scan (requires nmap). Hits every open port. ngehe box --target 10.10.11.5 --domain target.htb --markdown box.md # 2. If a web app is in scope: capture real traffic (Burp / mitmproxy / browser HAR). # 3. Write ngehe.yaml with sessions + default-creds URLs. ngehe init --out ngehe.yaml # 4. Active web scan — every detector. ngehe scan --har capture.har --config ngehe.yaml --markdown web.md See [HOWTO.md](HOWTO.md) for a full walkthrough. ## Output Every finding includes a **`next` field** — concrete exploit guidance for that bug class. The markdown report opens with a **"Suggested attack chain"** section that orders the critical/high findings and gives you the literal payload / curl command / hashcat invocation to move from finding to shell. JSONL excerpt (one finding per line): { "rule": "ssti", "severity": "critical", "method": "GET", "url": "http://target/api/greet?name=%7B%7B1337%2A1331%7D%7D", "path": "/api/greet", "param": "query:name", "payload": "{{1337*1331}}", "evidence": "Jinja2/Twig/Liquid evaluated 1337*1331 → 1779547", "why": "template expression was evaluated server-side — SSTI confirmed (RCE chain available)", "next": "RCE via template. Engine identified in evidence — chain to OS commands:\n Jinja2: {{config.__class__.__init__.__globals__['os'].popen('id').read()}}\n Twig: {{['id']|filter('system')}}\n ..." } Filter to actionable findings: # Just the attack-chain candidates ngehe view findings.jsonl --severity critical,high ## Companion Tools ngehe is the active component of a three-tool defensive/offensive stack: - [cornela](https://github.com/chud-lori/cornela) — Linux container kernel auditor (eBPF). Host hardening, escape-risk detection. - [milog](https://github.com/chud-lori/milog) — nginx + system monitor. Log scanning, exploit detection, host-integrity audits. - **ngehe** — web pentest CLI. Active testing during authorized assessments and CTFs. The three tools share a JSONL output convention. ## Safety Model ngehe is for authorized engagements. - Use only against systems you own, have written permission to test, or that are explicitly designed as CTF / HTB targets. - Some detectors send payloads (SLEEP, command-injection markers, traversal sequences) that may trigger WAF alerts or get you blacklisted. Coordinate with the asset owner before scanning production. - ngehe does NOT exploit findings end-to-end — it identifies them. SSTI → RCE, SQLi → data extraction, etc. require manual follow-up. - Capture and config files contain real tokens. Treat them as secrets. ## License Apache-2.0. SecLists wordlists are MIT; see `internal/wordlist/NOTICE.md`.
标签:EVTX分析