限制
大多数教程都是用的这个脚本直接实现的https://github.com/Ridter/redis-rce。不知道大家在使用脚本的时候有没有注意到一些限制。
限制1、目前github上的动态链接库都是so文件,这就说明基本只能在Linux使用。
限制2、网上都有讲主从复制要求redis版本是4.X和5.X才能利用。
突破限制
限制1、 在渗透的过程中遇到windows版的redis该怎么getshell(这是一道面试题)。我按照Linux的方式运行了一次脚本并把exp.so替换成了cs生成的dll文件,发现并不能上线,但是我在redis的安装目录下发现了这个dll文件,这说明了dll是被上传到了目标服务器。然后我通过手动执行MODULE load system.dll然后观察日志,发现日志中提升说不存在RedisModule_OnLoad这个函数,于是通过修改github上现有的redis模块源码实现了rce。
限制2、 在查看其他文章的时候发现有提到redis是在4.x加入了module功能。3.x不能使用主从复制的原因应该就是没有module这个功能。使用脚本尝试redis 3.2,同样发现将dll上传到了redis安装目录,但是报了unknown command system.exec,这应该就是文件上传成功了但是没有module命令所有没有加载。
既然能上传文件,就可以尝试能不能将文件上传到其他目录下,结果是可以的。用这种方式可以将把exe上传到windows的自启动目录,然后在用户重新登录桌面的时候就能运行(redis默认是network权限,可能没有权限去写),或者上传webshell到网站根目录下也可以。
redis6: redis6 加载的动态链接库其他用户必须要有可执行权限才能成功load,目前感觉是无解。但在提权的时候可能会用到。
测试版本实际效果
注意:在某些情况下会导致redis服务崩溃。 测试结果如下: v4.0.2-alpha :崩溃 v4.0.14:正常 v5.0.14:正常
END