Skip to main content

Want to Practice These Techniques?

Try Hackviser's interactive cyber security upskilling platform - Learn by doing!

Start Practicing Now

ZooKeeper

Default Ports: 2181 (Client), 2888/3888 (Cluster)

Apache ZooKeeper stores coordination data for distributed systems such as Kafka, Hadoop, Solr, and service discovery platforms. In pentests, open ZooKeeper can leak znodes, service metadata, configs, credentials, and cluster topology.

Connect​

Using nc​

ZooKeeper supports four-letter commands for quick checks.

echo ruok | nc target.com 2181
echo stat | nc target.com 2181
echo conf | nc target.com 2181
echo srvr | nc target.com 2181

Using zkCli​

zkCli.sh is the standard interactive client.

zkCli.sh -server target.com:2181
ls /
get /zookeeper/config

Using zookeeper-shell​

Kafka distributions often include zookeeper-shell.

zookeeper-shell target.com:2181
ls /
get /brokers/ids

Recon​

Service Detection with Nmap​

Scan client and quorum ports.

nmap -p 2181,2888,3888 -sV target.com
nmap -p 2181 --script zookeeper-info target.com
nmap -p 2181 --open -sV 10.0.0.0/24

Four-Letter Command Review​

Four-letter commands reveal health, configuration, sessions, and server state.

for cmd in ruok stat conf srvr mntr envi; do echo $cmd | nc target.com 2181; done

Product Context​

ZooKeeper often supports Kafka, Solr, Hadoop, or HBase.

echo dump | nc target.com 2181
echo cons | nc target.com 2181

Enumeration​

Znode Enumeration​

List znodes to map applications and service metadata.

zkCli.sh -server target.com:2181
ls /
ls /brokers
ls /config

Kafka Metadata​

Kafka deployments store broker and topic metadata in ZooKeeper.

zookeeper-shell target.com:2181 ls /brokers/ids
zookeeper-shell target.com:2181 get /brokers/ids/0
zookeeper-shell target.com:2181 ls /brokers/topics

ACL Enumeration​

Weak or open ACLs allow reading or modifying znodes.

zkCli.sh -server target.com:2181
getAcl /
getAcl /brokers

Config Enumeration​

Config znodes may expose endpoints, credentials, or service names.

zkCli.sh -server target.com:2181
ls /config
get /config/application

Attack Vectors​

Unauthenticated Access​

Open client access may expose all znodes.

zkCli.sh -server target.com:2181
ls /
get /some/znode

Sensitive Znode Data​

Search exported znode data for secrets.

grep -Ei 'password|secret|token|apikey|jdbc|ldap|kafka|broker' zookeeper-dump.txt

Znode Modification​

Write access can disrupt dependent services.

zkCli.sh -server target.com:2181
create /pentest-test "authorized-test"
delete /pentest-test

Unsafe Four-Letter Commands​

Some commands expose sessions and environment details.

echo envi | nc target.com 2181
echo cons | nc target.com 2181
echo dump | nc target.com 2181

Post-Exploitation​

Cluster Mapping​

Use ZooKeeper data to map brokers, services, and hosts.

echo conf | nc target.com 2181 > zookeeper-conf.txt
zookeeper-shell target.com:2181 ls /brokers/ids > kafka-brokers.txt

Secret Review​

Review only exported metadata needed for proof.

grep -Ei 'password|secret|token|apikey|connection|jdbc|sasl' zookeeper-dump.txt

Evidence Collection​

Collect health, config, ACL, and sample znode evidence.

echo stat | nc target.com 2181 > zookeeper-stat.txt
echo conf | nc target.com 2181 > zookeeper-conf.txt

Useful Tools​

ToolPurpose
ncFour-letter commands
zkCli.shNative client
zookeeper-shellKafka ZooKeeper client
nmapService detection
grepSecret review

Security Misconfigurations​

MisconfigurationRisk
Unauthenticated client accessZnode data disclosure
Weak ACLsZnode modification
Four-letter commands exposedCluster metadata leakage
ZooKeeper reachable from user networksService discovery exposure
Secrets stored in znodesCredential leakage
Quorum ports exposed broadlyCluster attack surface