Redis绕过姿势

极客

Redis绕过姿势:我踩过的那些坑,劝你千万别再踩了!

说真的,每次聊到 Redis绕过姿势 这个话题,我这心里就五味杂陈,你们知道吗?前阵子我帮朋友排查一个线上事故,明明 Redis 密码设了、bind 也改了,结果还是被人从内网横向打穿了……当时我整个人都是懵的,心想:这玩意儿到底还能怎么绕?

Redis绕过姿势

后来一顿翻日志、抓包、复盘,才慢慢把那些 Redis绕过姿势 给捋清楚,今天我就掏心窝子跟大家唠唠,真不是吓唬你,有些坑你要是不提前知道,早晚得栽。

先说说我为啥对 Redis绕过姿势这么上头

其实吧,很多人对 Redis 安全的理解还停留在“设个密码就万事大吉”的阶段,我一开始也这么天真,直到有一次,我自己搭的测试环境,密码是 123456(别笑,测试环境嘛),结果半夜被告警吵醒——CPU 跑满了,/root/.ssh/authorized_keys 里多了个陌生的公钥。

我当场就清醒了,这不就是经典的 Redis 未授权写入 SSH 公钥 嘛!可我当时明明设了密码啊?后来才发现,是运维图省事,在另一台机器上留了个无密码的从节点……诶,你看,这就是 Redis绕过姿势 的第一课:别只盯着主节点,从节点、哨兵、甚至备份文件,都是突破口。

那些年我试过的 Redis绕过姿势(有的是踩坑,有的是复盘)

未授权访问,最原始的“姿势”

说白了就是没设密码,或者密码太弱,我用 redis-cli -h x.x.x.x 一连,PING 一下回 PONG,心里就咯噔一下——完了,这机器基本等于裸奔,接下来无非就是 CONFIG SET dir 改目录、CONFIG SET dbfilename 写文件,往 crontab 或者 webshell 里塞东西,这招老归老,但架不住现在还有一堆人这么干啊!你说气不气?

主从复制 RCE,这个真的狠

我第一次听说这招的时候,后背直发凉,攻击者用自己的 Redis 当“主”,让你这台当“从”,然后通过 FULLRESYNC 把恶意模块(.so 文件)同步过来,再 MODULE LOAD 一加载……直接就是远程命令执行,连写文件都省了,我复盘的时候就发现,很多 Redis绕过姿势 之所以能成功,根本原因还是版本太老,4.x、5.x 没打补丁,protected-mode 也没开,哎,说多了都是泪。

通过 SSRF 打 Redis,曲线救国

这个就更有意思了,Redis 本身绑在 127.0.0.1,外网根本连不上,但架不住应用里有 SSRF 漏洞啊!用 gopher:// 协议构造 Redis 命令,一句一句喂过去,照样能打,我当时拿这个 Redis绕过姿势 做内网渗透测试,那叫一个丝滑……我是在授权范围内做的哈,别误会。

Lua 脚本沙箱逃逸,小众但致命

EVAL 命令本身是沙箱环境,但历史上有过不少 CVE,比如通过 cjson 或者 struct 库的边界问题逃逸出来,这种 Redis绕过姿势 比较挑版本,但一旦成功,危害极大,我建议你们直接 rename-command EVAL "",别犹豫。

我是怎么防的(血泪教训换来的)

讲真,聊完这些 Redis绕过姿势,我更想说的是怎么防,我现在的习惯是:

  • bind 只写内网 IP,protected-mode yes 必须开;
  • 密码用 32 位随机串,requirepass 安排上;
  • rename-command 把 CONFIG、EVAL、FLUSHALL 这些危险命令全禁掉;
  • 定期扫端口,看看有没有 6379 裸奔的;
  • 最重要的一点——别用 root 跑 Redis,降权!降权!降权!重要的事说三遍。

最后唠叨两句

好了,Redis绕过姿势 我今天就唠到这儿,其实写这篇的时候我挺感慨的,安全这事儿啊,真不是配个密码就完事了,它是个持续对抗的过程,你要是觉得这篇对你有用,欢迎转发给身边搞运维、搞开发的朋友,让他们也少踩点坑。

对了,如果你也有过被 Redis绕过姿势 支配的恐惧,评论区聊聊呗?我保证不笑你——毕竟,谁还没年轻过呢,哈哈。


(本文关键词:Redis绕过姿势,相关内链已嵌入,欢迎点击 Redis绕过姿势 查看原文。)

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]