Kibana - Port 5601
Become VeryLazyTech member! 🎁
Follow us on:
✖ Twitter @VeryLazyTech.
👾 Github @VeryLazyTech.
📜 Medium @VeryLazyTech.
📺 YouTube @VeryLazyTech.
📩 Telegram @VeryLazyTech.
🕵️♂️ My Site @VeryLazyTech.
Visit our shop for e-books and courses. 📚
Basic info
Kibana is known for its ability to search and visualize data within Elasticsearch, typically running on port 5601. It serves as the interface for the Elastic Stack cluster's monitoring, management, and security functions.
Default port:
5601/tcp(Kibana UI).
Quick Recon
Nmap
nmap -sV -p5601 --script=http-title,http-headers <target>
nmap -p9200 -sV --script=http-elasticsearch* <target>Visit the UI in a browser:
http://<ip>:5601orhttps://<ip>:5601and check the login flow.Check headers and cookies for session/auth patterns.
Look for headers like kbn-name, kbn-version or server: nginx reverse proxies. Query Elasticsearch directly if reachable (9200):
curl -sI http://<ip>:9200/ | head -n 20
curl -s http://<ip>:9200/ | jq .Kibana UI discovery
Open http(s)://<ip>:5601/app/kibana and /app/management to inspect login flow, SSO header usage, and presence of Console (/app/dev_tools#/console). The Console provides direct ES API access from the browser context.
mappings & indices
If you can query ES, enumerate indices and mappings (important for finding credentials in logs or configs):
curl -s 'http://<ip>:9200/_cat/indices?v' | sed -n '1,200p'
curl -s 'http://<ip>:9200/<index>/_mapping?pretty' | jq '.'Search for indices named .*credential.*, .*auth.*, .*config.*, logs-* or application names.
Authentication & Configs to Inspect
Kibana authentication is typically backed by Elasticsearch security (X-Pack). If Elasticsearch has security disabled, Kibana often accepts anonymous access. Check kibana.yml for relevant settings (commonly at /etc/kibana/kibana.yml):
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
# Search for any hardcoded credentials or API keysCredentials found in config may not be
kibana_system— those credentials could allow broader access if misused.
Gaining Programmatic Access (safe methods to test)
1) Kibana Console abuse (browser context)
If Kibana login is bypassed or you have a low-priv shell account, the Console (/app/dev_tools#/console) allows arbitrary ES queries executed with the Kibana service credentials. Use it to test data access and create API keys.
Create an API key via the Kibana Console:
POST _security/api_key
{
"name": "test_key_from_console",
"role_descriptors": { "rb": { "cluster": ["all"], "index": [{ "names": ["*"], "privileges": ["all"] }] } }
}This returns an id and api_key you can use in Authorization: ApiKey <base64(id:api_key)> headers.
2) Using Curl (if ES HTTP API reachable)
# list users
curl -s -u 'kibana_system:password' http://<ip>:9200/_security/user | jq '.'
# create API key (returns id & api_key)
curl -s -u kibana_system:password -X POST "http://<ip>:9200/_security/api_key" -H 'Content-Type: application/json' -d '{"name":"rk_key","expiration":"30d","role_descriptors":{"r":{"cluster":["monitor"],"index":[{"names":["*"] ,"privileges":["read"]}]}}}' | jq '.'Note: If kibana_system creds are in kibana.yml and they’re not kibana_system scoped, they may give broader ES access. Always check kibana.yml safely via a host shell if available.
Offensive Checklist (if you gain access)
Enumerate indices & data
# Using curl against Elasticsearch if proxy/API access available
curl -s "http://localhost:9200/_cat/indices?v"
curl -s "http://localhost:9200/<index>/_search?size=50&q=*" | jq '.'Check Users / Roles / API Keys
In Kibana: Stack Management → Security → Users / Roles / API Keys
If you can create API keys, you can pivot programmatically.
Version & Known CVEs
Identify Kibana/ES version (footer in UI or
GET /on ES). Search for known CVEs — e.g., older versions (<6.6.0) had RCE bugs in certain plugins and features. Always verify with vendor advisories.
Check for saved objects & visualizations that allow scripting
Visualizations and scripted fields can sometimes be abused to inject payloads or to expose sensitive fields.
Post‑Exploitation & Data Exfil
Extract sensitive documents from indices (credentials, PII, logs). Use pagination and
_searchAPI to pull data.Create API keys or service users for long-lived access (audit logs permitting).
Hardening & Defender Checklist
Network controls
Block access to
5601/tcpfrom public/untrusted networks. Use VPNs or management subnets for admin access.
Enable authentication & TLS
Enable Elasticsearch security features (TLS + basic auth or SSO). Do not run ES without security in production.
Least privilege
Ensure
kibana_systemis used only for Kibana, and admin users are limited.
Keep versions patched
Upgrade to latest minor/major fixes; monitor Elastic advisories for RCE or privilege escalation CVEs.
Audit & monitor
Enable audit logging and alert on new API keys, user creation, or unusual index export patterns.
Config hygiene
Remove hardcoded credentials from
kibana.ymlor vault them. Avoid running Kibana on0.0.0.0if unnecessary.
Quick commands to enable basic safety:
# Example: restrict bind address (kibana.yml)
server.host: "127.0.0.1"
# Or firewall rule
ufw deny from any to any port 5601 proto tcpDetection Ideas
IDS/IPS: alert on connections to port 5601 from unusual sources.
SIEM: flag high-volume
_searchrequests or API key creation events.Network: block mgt plane access to Elasticsearch/Kibana from the internet.
Learn & practice For the Bug Bounty
Last updated
Was this helpful?