对 Redis 在 Windows 下利用方式思考
我又来刷分了!~
我的文章都是公开的, Github 和 博客还有公众号都会同步 0.。0
我写的文章永远都是那么的又臭又长又菜。
前言
上次写了一篇有关 SSRF
打 Redis
主从的文章,居然被人喷了!!!说我根本就没有复现过张嘴就来??? 我没有理会,然后又有朋友在群问,Redis
在 Windows
环境下没有 WEB
如何利用?我说可以往目标尝试写 DLL
做劫持或者写 LNK
来欺骗管理员等方法,迂回的打。但 TMD
我又被喷了! 非要跟我抬杠,说 Redis
写文件会有一些版本信息什么的一堆脏数据,根本无法写出正常 DLL
、EXE
、LNK
等文件!我说,可以参照 Github
上面的 Redis
主从 RCE
脚本,改改就能写出干净的文件。就因为没有现成的工具,然后就是不听 ? 就是要喷! TMD
的真是“天不生你键盘侠,喷道万古如长夜。”
佩服佩服!不过也挺感谢这些喷子的,偶尔遇到几个喷子还能刺激我做些事情,写写博客和工具,这一番刺激又给伸手党贡献了一个脚本,当然我也希望能抛砖引玉,希望有大佬能再多发几个 Windows
下 Redis
的利用思路。
正文
首先我们知道,Redis
官方是没有提供 Windows
版的安装包的,所以目前为止基本上所有的更新和版本迭代都是 Linux
的,也就是说现在官方的 Linux
版 Redis
已经更新到了 6.X
的版本,而由微软开放技术小组所开发和维护的 Windwos
下使用的 Redis
还是 3.X
的版本。所以什么想在 Windows
下加载 DLL
打主从,估计还是没戏的。
目前网上公开的对 Windows
下的 redis
的利用方法:
- 往
WEB
目录写马 - 写启动项
这两项方法对写出的文件都没有严格的内容要求,即使有脏数据也不会影响最终的效果。
本文公开部分其他潜在的攻击方法:
- 系统
DLL
劫持 (目标重启或注销) - 针对特定软件的
DLL
劫持(目标一次点击) - 覆写目标的快捷方式 (目标一次点击)
- 覆写特定软件的配置文件达到提权目的 (目标无需点击或一次点击)
- 覆写
sethc.exe
等文件 (攻击方一次触发)
这些方法由于写出的是二进制或者不允许有杂质的文件所以对写出的文件有着严格的内容要求。
系统 DLL
劫持
这里以劫持 linkinfo.dll
为例
我们知道 explorer.exe
进程会在每次启动时自动加载 linkinfo.dll
,所以我们可以利用它来控制目标主机,我们只需要把 linkinfo.dll
写入到 C:\Windows\
目录下即可
这里使用 msf
生成一个 dll
弹个 calc.exe
然后写入目标即可
当 explorer.exe
被重新启动时 DLL
就会被执行 (应该是 DLL
没搞好,崩溃了,执行完以后没进入桌面,建议使用前本地调试)
针对特定软件的 DLL
劫持
其实没什么好写的,只是提供个思路,这里以 notepad++
为例因为遇到的不会太多 ( 奸笑)
覆写 DLL
后当管理员打开 Notepad++
就会触发我们的恶意 DLL
动图:
快捷方式覆写
使用 redis
覆写目标桌面的快捷键达到上线效果。
覆写前:
覆写后:
动图:
覆写特定软件的配置文件达到提权目的
这里以宝塔为例。仅修改 title
让前端展示发生变化(可修改其他文件使目标上线)
宝塔的配置文件默认在 \BtSoft\panel\config
文件夹中,尝试使用 Redis
覆写 config.json
修改它的 title
配置文件是 json
的格式,所以覆写的时候最好不要有其他垃圾数据,此脚本刚好解决这个问题 :)
覆写前
覆写后
还可以覆写宝塔的其他文件使目标上线,大家可以自己摸索一下。 :D
动图:
高权限下可覆写 sethc.exe 等可单向触发的文件
我这使用火绒剑监控 redis
的进程,然后用 Kali
打 redis
写文件,看是否有写的操作和是否写入成功。
没有打之前 Redis
的服务端没有并没有修改过任何资源, sethc.exe
的创建日期是 2010/11/21
打完以后可以看到 redis
的服务端确实有做修改的操作,但是并没有成功而 sethc.exe
也并没有被修改
当我以为是没有权限写 C:\windows\system32
目录的时候,我发现并不是,我可以往这个目录下写入任意不存在的文件文件,但是却不能覆写已存在的文件,别的路径却可以,看来是有保护机制。(终究还是权限的原因)
尝试往 C:\windows\system32
目录下写入 sethc.exe.exe
测试目录是否可写,发现是可以轻易写入的
但当 Redis
是以 SYSTEM
权限启动时就可以覆写 sethc
实施 sethc
后门攻击(写文章时先打了一遍,导致sethc
的图标变成了 cmd
图标的了... 但其实是正常的和上面的时间大小都是一致的)
打之前
打之后,可以看到只要权限足够 redis
也是可以通过覆写目标 sethc.exe
达到控制目标服务器的效果
动图:
结尾
其实文章很 low
,只是看大家问过好多次 Windows
下的 Redis
怎么利用,来来回回就那两个回答,而且还再一致纠结 Redis
写文件有脏数据的事情,所以才觉得把它脚本化并把相关思路发出来而已,希望能够抛砖引玉吧。
R3start
2020年5月25日21点12分
脚本地址:https://github.com/r35tart/RedisWriteFile
TCV:5 //还是冲冲冲!~
评论39次
都是通过写文件,如果有垃圾数据,执行命令flushdb 清理下就好了。
测试环境还可以,生产环境flushdb ,可能就。。。
我的目标就清空了 shell就能连 问题不大 哈哈
连 shell 是之前的思路,现在思考的是除了写 shell 以外,攻击 Windows 的其他思路,如果只用 save 写出的文件 是无法写出一个完整的可以正常使用的 cmd.exe 或 dll 的
都是通过写文件,如果有垃圾数据,执行命令flushdb 清理下就好了。
测试环境还可以,生产环境flushdb ,可能就。。。
我的目标就清空了 shell就能连 问题不大 哈哈
可以的 没啥毛病
其实把5.xrce脚本注释两行就可以传文件了
我也是这样回复其他人的,可惜他们不信啊 只能自己改了
都是通过写文件,如果有垃圾数据,执行命令flushdb 清理下就好了。
测试环境还可以,生产环境flushdb ,可能就。。。
这几个思路 都太厉害了
可以呀,表哥
这些思路真的挺好的。
以前对redis在windows下的操作也仅限于写启动项和web, 这篇文章给了很多启发,干货
其实把5.xrce脚本注释两行就可以传文件了
看了以后,脚本已收藏。
差距啊,为什么我就想不到这种操作呢
大佬 看了你博客的文章 都很有货,很nice''这个redis 具体是怎么清除脏数据的呢?
这个脚本能实现,他模拟了一个 redis
大佬 看了你博客的文章 都很有货,很nice'' 这个redis 具体是怎么清除脏数据的呢?
告诉我你群里的昵称,以后就喷你,然后就有很多好的技术文章看了
都是通过写文件,如果有垃圾数据,执行命令flushdb 清理下就好了。
我觉得你应该先试试写一下,即使你用了flushdb 也会有版本信息等数据
都是通过写文件,如果有垃圾数据,执行命令flushdb 清理下就好了。
前言也太真实了吧!
多了一张 GIF。。。。 找不到在什么地方。。。如果管理能看到麻烦帮我删一下。。。 不删也无所谓了