(一)Redis-配置&利用公钥未授权访问的两种方式

简介 #

Redis是⼀个key-value存储系统,和Memcached类似,它⽀持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都⽀持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis⽀持各种不同⽅式的排序。与memcached⼀样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步。

描述 #

Redis因配置不当可以未授权访问,被攻击者恶意利用。
攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据。攻击者可通过数据备份功能往磁盘写入后门文件,如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

配置文件解读 #

在启动Redis服务器进程的时候,可以通过命令⾏参数指定⼀个配置⽂件,这样服务器进程就可以根据配置⽂件中设定的参数值来运⾏了。在redis-3.0.1⽬录下有⼀个redis.conf⽂件,这是⼀个默认的配置⽂件。

redis.conf⽂件中存在许多的设置参数,这⾥重点介绍⼏个和安全相关的参数:

1. port参数

格式为port后⾯接端⼝号,如port 6379,表示Redis服务器将在6379端⼝上进⾏监听来,等待客户端的连接。

2. bind参数

格式为bind后⾯接IP地址,可以同时绑定在多个IP地址上,IP地址之间⽤空格分离,如:bind 192.168.1.100 10.0.0.1,表示同时绑定在192.168.1.100和10.0.0.1两个IP地址上。如果

没有指定bind参数,则绑定在本机的所有IP地址上。

3. save参数

格式为save <秒数> <变化数>,表示在指定的秒数内数据库存在指定的改变数时⾃动进⾏备份(Redis是内存数据库,这⾥的备份就是指把内存中的数据备份到磁盘上)。可以同时指定多个save参数,如:

save 900 1

save 300 10

save 60 10000

表示如果数据库的内容在60秒后产⽣了10000次改变,或者300秒后产⽣了10次改变,或者900秒后产⽣了1次改变,那么⽴即进⾏备份操作。

4. requirepass参数

格式为requirepass后接指定的密码,⽤于指定客户端在连接Redis服务器时所使⽤的密码。Redis默认的密码参数是空的,说明不需要密码即可连接;同时,配置⽂件有⼀条注释了的requirepass foobared命令,如果去掉注释,表示需要使⽤foobared密码才能连接Redis数据库。

5. dir参数

格式为dir后接指定的路径,默认为dir ./,指明Redis的⼯作⽬录为当前⽬录,即redis-server⽂件所在的⽬录。注意,Redis产⽣的备份⽂件将放在这个⽬录下。

6. dbfilename参数

格式为dbfilename后接指定的⽂件名称,⽤于指定Redis备份⽂件的名字,默认为dbfilename dump.rdb,即备份⽂件的名字为dump.rdb。

7. config命令

通过config命令可以读取和设置dir参数以及dbfilename参数,因为这条命令⽐较危险(实验将进⾏详细介绍),所以Redis在配置⽂件中提供了rename-command参数来对其进⾏重命名操作,如rename-command CONFIG HTCMD,可以将CONFIG命令重命名为HTCMD。配置⽂件默认是没有对CONFIG命令进⾏重命名操作的。

搭建过程 #

1.下载源码:

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

2.解压

tar -zxvf redis-5.0.5.tar.gz

3.使用make进行编译

4.新装的系统可能会报错,提示cc:未找到命令,原因是虚拟机系统中缺少gcc,安装一下gcc即可解决问题

5.确保root登录,安装命令:yum install -y gcc g++ gcc- c++ make

6.安装成功,再次尝试编译运行redis

执行命令:make MALLOC=libc

7.启动redis服务

8.redis.conf为配置文件

造成未授权访问有俩种情况:

1.未开启登录认证,将redis绑定到了0.0.0.0

2.未开启登录认证,未绑定redis到任何地址(此时任何ip都可以访问),还需要关闭保护模式

利用公钥未授权访问方式一 #

1.启动redis服务

2.开启SSH

4.root目录下创建.ssh

5.攻击机也配置redis,并开启服务

6.查看root目录下.ssh是否存在

7.在本地生成密钥文件,公钥文件默认路径为:/root/.ssh/id_rsa.pub

8.公钥文件已生产,并把公钥写入key.txt

9.将公钥文件key.txt写入到服务器key中

10.修改redis的dir目录和dbfilename,为了save的rdb文件覆盖写入redis服务器/root/.ssh/authorized_keys文件

11.公钥已传入服务器中

12.登录redis服务器,获取root权限

利用公钥未授权访问方式二 #

1. 本地⽣成公钥⽂件:需要为我们的公钥⽂件设置⼀个私钥,公钥⽂件默认路径:/root/.ssh/id_rsa.pub

2.查看公钥文件

3.修改redis备份目录和备份文件,做完测试后恢复

4.通过未授权访问redis

5.复制id_rsa.pub文件的内容,创建一个键为x 值为复制的公钥文件的内容

6.利用公钥文件以及对应的私钥进行ssh登录

利用Xshell生成公钥连接ssh #

1.利用xshell生成公钥文件-新建用户密钥生成向导

2.点击下一步

3.输入密钥名称和密码,点击下一步

公钥已生成

4.将公钥文件上传到服务器并写入到authorized_keys文件

5.利用xshell链接即可

6.点击连接,输入用户名选择公钥链接

7.链接服务器成功