| name | scada-hikvision-isapi |
| description | Enumerate Hikvision ISAPI endpoints on SCADA and IoT web interfaces. |
| version | 1.1.0 |
| revision_date | "2026-07-25T00:00:00.000Z" |
| license | MIT |
| platforms | ["linux"] |
| compatibility | Requires curl, nmap, python3 |
| tags | ["recon","SCADA","Hikvision","ISAPI","IoT","camera","RTSP","ONVIF","industrial"] |
| category | recon |
| related_skills | ["port-service-discovery","hunt-ssrf","iot-camera-recon","js-secrets-extraction"] |
SCADA Hikvision ISAPI Enumeration
Enumerate Hikvision ISAPI (Intelligent Security Application Programming Interface) endpoints on industrial control and surveillance web interfaces. Hikvision devices and HikCentral Professional deployments expose a rich REST/XML API at predictable paths. While most endpoints require authentication (CAS session token, Basic auth, or Digest auth), unauthenticated enumeration reveals the device type, firmware baseline, available modules, and potential attack surface. JavaScript bundles often contain the full ISAPI route tree.
When to Use
- A web interface on a non-standard port (443, 8443, 9443) loads a large JavaScript bundle with references to
/ISAPI/, Bumblebee, or Streaming/channels.
- Port scan reveals RTSP (554), ONVIF (8899), or Hikvision-specific ports (8000, 9010).
- The server header or SSL certificate references Hikvision, HikCentral, iVMS, or Pyramid.
- A target has industrial/energy/infrastructure context where SCADA systems are likely.
- The web client loads
Common/common.js, Common/components.js, or Common/vendorGraph.js from a relative path.
Prerequisites
terminal with curl, python3, and nmap.
- Access to the web interface (even without authentication).
- The target serves JavaScript bundles — download them for endpoint extraction.
Quick Detection
curl --max-time 30 --connect-timeout 10 -skI "https://TARGET:PORT/" | grep -iE "server|x-powered"
curl --max-time 30 --connect-timeout 10 -sk "https://TARGET:PORT/" | grep -Eo 'src="([^"]+\.js[^"]*)"' | while read -r match; do
js_url=$(echo "$match" | grep -Eo '(\./[^"]+\.js[^"]*|/[^"]+\.js[^"]*)')
[ -n "$js_url" ] && curl --max-time 30 --connect-timeout 10 -sk "https://TARGET:PORT$js_url" | grep -Eo \' | -u