脚本命令类恶意代码——PowerShell混淆脚本分析方法

由于PowerShell具有强大的系统管理和自动化能力,它可以被用于执行恶意代码、进行横向移动、执行无文件攻击等恶意行为。其中,Office宏病毒是一种常见的恶意软件形式,它利用Office文档中的宏代码来调用PowerShell并执行恶意行为。这种攻击方式通常会利用社会工程学手段来诱使用户启用宏代码,从而触发PowerShell的执行。此外,还有一种被称为"无文件攻击"的攻击技术,通过利用PowerShell的内存执行功能,无需在受感染系统上写入可执行文件,从而执行恶意行为而不留下明显的痕迹。

正是因为PowerShell具有强大而且灵活的功能,攻击者可以利用其复杂性来进行更多样化的混淆。为了保证兼容性和易用性,PowerShell支持绝大部分CMD命令和功能,因此,接下来的总结的混淆手法如果CMD和PowerShell通用的就不再过多介绍。

语法使用

常用参数

隐藏窗口

-WindowStyle Hidden

-w Hidden

-w 1

处理Base64字符串

-EncodedCommand

-ENCOD

-enc

-e

字符操作

和CMD命令混淆类似,PowerShell命令也可以使用大小写、双引号、圆括号、转义字符进行混淆,其中,转义字符的使用需要有所注意。

转义字符

恶意命令中常见的混淆技术之一是利用转义字符插入进行欺骗。在PowerShell中,反引号`是用作转义字符,它可以转义一些特殊字符。此外,反引号有时还可以对一些字母进行转义,以改变其普通解释。以下是对字母的转义。

对于PowerShell混淆,可以在命令中插入反引号,但插入的位置需要注意,如果存在可以被转义的字母,就会出现如下情况。

字符串操作

字符串拼接

在PowerShell中,可以使用单引号 (') 进行字符串拼接。单引号字符串在 PowerShell 中被视为原始字符串,不进行变量替换或转义字符处理。

使用单引号拼接new-object的混淆命令片段

$Y7jmxz8=&('new-'+'obje'+'ct')NET.webcLIEnt; 

字符串格式化

在PowerShell中可以使用字符串格式化(-F)功能来构建字符串。

  • 字符串格式化表达式中的大括号 {} 在这里充当占位符,用于指定要插入的值的位置。
  • 表达式中的数字 {0}, {1}, {2}...是占位符的索引,从零开始。
  • -F 是 PowerShell 中用于执行字符串格式化的操作符。

根据给定的占位符索引和对应的值,字符串格式化表达式会将值插入到相应的位置上,从而构建最终的字符串。

使用字符串格式化构建字符串System.IO.Directory的混淆命令片段

$7CRqx=[TyPe]("{3}{1}{2}{0}{4}"-F'IreCTo','ystEM.','iO.D','S','ry');

字符串分割

在PowerShell中,Split是一个字符串方法,可用于按照指定的分隔符将字符串拆分为子字符串。

以*为分隔符分割网址的混淆命令片段

$Mv5ki8y=(('h'+'ttp'+':/')+'/'+('fort'+'c')+('oll'+'in')+('sa'+'thl')+('e'+'tef')+'ac'+'t'+'o'+'ry'+'.c'+'om'+('/wp-a'+'dm'+'in'+'/i/')+('*h'+'tt')+'p:'+'/'+'/'+'g'+'et'+'m'+('i'+'ng.c')+'om'+'/'+'fo'+'ru'+'m/'+('p'+'/*h')+'t'+('tp://'+'g')+'af'+'f'+('a-'+'mu')+('s'+'ic.')+('co'+'m/c')+('gi-'+'bi')+'n'+'/'+('UM'+'/')+('*htt'+'p')+':/'+'/f'+('ran'+'k'+'fur')+'te'+('lf'+'a')+('r'+'ol'+'i'+'llo'+'.com/las')+('e'+'u/c7'+'/')+'*'+('htt'+'p'+'://evilnerd')+'.o'+'rg'+('/cgi-'+'b')+('in'+'/nU')+('i'+'/*h')+'t'+'t'+('p'+':/')+('/ga'+'p')+'e'+'sm'+('m.or'+'g/o')+('l'+'d/'+'M/*ht')+'tp'+':/'+('/'+'gr')+('m'+'l'+'.net')+('/w'+'p')+('/C'+'/'))."sPL`It"([char]42);

字符串替换

在PowerShell中,可以使用Replace方法来替换字符串中的特定文本。

将字符串中的"G6T"替换为"\"的混淆命令片段

$HOME+((('G6'+'T'+'F2s')+('2k'+'3m')+('G6T'+'Jw')+'w9'+'w_'+'bG'+'6T')-rEPlace([ChaR]71+[ChaR]54+[ChaR]84),[ChaR]92)

DotNet类使用

PowerShell是基于.NET Framework构建的,它提供了访问和使用.NET Framework中各种功能和类的能力。在开发复杂功能时,PowerShell可以使用.NET Framework中的类来实现更高级的操作。由于PowerShell的语法过为灵活,混淆脚本中会出现各种使用类的方式。

一般情况下,调用一个类中的方法时,可以使用New-Object命令实例化对象,通过对象名点号来访问该类中的方法。

$wc = New-Object System.Net.WebClient
$wc.DownloadFile("https://example.com/test.test", "test.txt")

为了对命令进行混淆,为了更隐蔽的调用方法,混淆代码中会使用SET-ITEM去实例化对象。

SET-ITEM('wc')([Type]("System.Net.WebClient"));
SET-ITEM('wc') = "System.Net.WebClient";

对于静态类,除了使用SET-ITEM外,还可以直接使用[Type]操作符获取静态类的类型

$directory = [TYPE]"System.IO.Directory"
$directory::CreateDirectory("C:\NewFolder")

动态执行代码

在PowerShell中,有三种方式可以动态执行代码,分别是Invoke-Expression(简写为IEX)、&(调用操作符)、.(点操作符)。

这里以动态执行Get-Process为例,将Get-Process字符串作为输出,分别使用三种方式执行字符串中的命令。

Invoke-Expression

$code = "Get-Process"
Invoke-Expression $code

点操作符

$code = "Get-Process"
.($code)

调用运算符

$code = "Get-Process"
& $code

数据输出

对于含有动态执行代码命令的语句,可以使用输出命令对部分混淆命令快速解密。

打印输出

在PowerShell中,可以使用Write-Host、Write-Output等命令来打印输出。

Write-Host:将输出直接打印到控制台,不会被重定向或捕获。

Write-Host "Hello, World!"

Write-Output:将输出发送到输出流,可以通过管道传递给其他命令进行处理。

Write-Output "Hello, World!"

文件写入

在PowerShell中,可以使用Set-Content、Add-Content和Out-File命令来进行文件写入操作。

Set-Content:将文本内容覆盖写入文件。可以使用-Path参数指定要写入的文件路径,使用-Value参数指定要写入的文本内容。

Set-Content -Path "file.txt" -Value "Hello, World!"#参数可以省略
Set-Content "file.txt" "Hello, World!"

Add-Content:将文本内容追加写入文件,而不覆盖原有内容。可以使用-Path参数指定要写入的文件路径,使用-Value参数指定要写入的文本内容。

Add-Content -Path "file.txt" -Value "Hello, World!"#参数可以省略
Add-Content "file.txt" "Hello, World!"

Out-File:通常用于将输出重定向到文件,并提供更多的选项来控制写入行为。

# 将输出写入文件
"Hello, World!" | Out-File -FilePath "file.txt"# 指定编码方式
"Hello, World!" | Out-File -FilePath "file.txt" -Encoding UTF8# 追加内容到文件
"Hello, World!" | Out-File -FilePath "file.txt" -Append

动态调试

可以使用vscode和PowerShell ISE对PowerShell脚本进行调试。这两个工具都提供了强大的调试功能,能够逐行执行脚本并查看变量、输出和错误信息等。

vscode

1.打开vscode,安装powershell扩展,选微软官方的即可。

2.在编辑器中打开脚本文件,设置断点。

3.F5开始调试,单步运行,在左边栏的变量和监视中查看变量和输出。

PowerShell ISE

打开PowerShell ISE,选择要调试的脚本文件,F9设置断点,F5调试运行

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL 17 发布了!非常稳定的版本

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

观众IMDB热评9.1分,HBO新作到底有什么魅力

HBO年度大作《企鹅人》终于上线,IMDb评分高达9.1,成为观众热议的焦点。这部剧集的魅力不仅在于其背后的强大制作团队,更在于角色的深度与故事的复杂性,让人忍不住想要深入探讨。 首先,HBO一向以高质量的剧集著称&#…

有关若依登录过程前端的对应处理学习

导言 在用C#搞完个后端后想用若依的前端做对接,不过很久没搞过若依了,想趁这个二次开发的过程记录熟悉一下登录的过程 过程 验证,在permission.js的路由守卫,这里在用户发起api请求时会验证用户的请求是否有token,对…

【LeetCode】动态规划—63. 不同路径 II(附完整Python/C++代码)

动态规划—63. 不同路径 II 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 本文将探讨“不同路径 II”这一问…

图神经学习笔记

图神经网络基础 图神经网络用于挖掘事物的“普遍联系”,理解原理、应用技术。本文汇总图神经网络相关介绍和基础模型。 图及特性 图是由顶点和边组成的,如下图左所示。一般图中的顶点表示实体对象(比如一个用户、一件商品、一辆车、一张银行…

Apache Solr:深入探索与常见误区解析

Apache Solr:深入探索与常见误区解析 Apache Solr 是一个强大的搜索引擎,基于 Lucene 构建,广泛应用于电商平台、日志分析、内容管理系统等领域。Solr 的功能强大,然而它的配置和使用过程却不乏一些容易误解和出错的地方。本文将…

“AI+Security”系列第3期(六):打造最懂安全的智能体-无极AI安全智能体平台落地与实践

近日,由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的 “AI Security” 系列第 3 期技术沙龙:“AI 安全智能体,重塑安全团队工作范式” 活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 活动…

卡方检验及其在Python中的应用

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~个人主页:小高要坚强的博客当前专栏:Python之机器学习本文内容:卡方检验及其在Python中的应用作者“三要”格言:要坚强、要努力、要学…

使用 Napkins.dev 将草图转换为应用程序

在现代前端开发中,快速将设计草图转换为实际的应用程序代码是一个巨大的优势。Napkins.dev 是一个利用人工智能将网站设计草图转换成实际应用程序的平台。本文将介绍如何使用 Napkins.dev 进行这一过程。 什么是 Napkins.dev? Napkins.dev 是一个开源平…

【DS】红黑树

目录 红黑树的介绍红黑树节点的定义红黑树的插入红黑树的调整情况一情况二情况三 红黑树的验证红黑树与AVL树的比较 在上一篇AVL树的实现中,学习了平衡二叉树的一种——AVL树;由于AVL树极度追求平衡,因此它的查找效率十分高效;但也…

虚拟机文件系统根目录上的磁盘空间不足?VMware虚拟机扩容磁盘步骤讲解

VMware虚拟机扩容磁盘步骤讲解 今天使用vmware,想使用Ubuntu虚拟机,结果出现这种情况: 我的环境: Ubuntu20.04 VMWare workstation pro 17 VMware设置 参考链接: https://blog.csdn.net/hktkfly6/article/details…

2024年9月26日 linux笔记

1、提示符 1.1 提示符 1.2 命令格式 1.3 路径 2、指令 2.1 pwd 显示当前路径 2.2 cd 切换路径、改变路径 2.3 mkdir 创建目录 [-p] 创建目录及子目录 mkdir -p dir1/dir2 2.4 rmdir 删除目录 (注:不能删除空目录) 2.5 ls 显示当前目录文…

【行为树】06-重新映射树和子树之间的端口

Remapping ports between Trees and SubTrees 重新映射树和子树之间的端口 在CrossDoor示例中,我们看到一个SubTree从其父节点(示例中的MainTree)的角度看起来像一个单独的叶子节点。 此外,为了避免在非常大的树中发生名称冲突,任何树和子…

【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU

本文浅析淘汰策略与工作中结合使用、选取,并非针对算法本身如何实现的 文章目录 FIFOLFULRUW-TinyLFU实践与优化监控与调整 FIFO first input first output , 先进先出,即最早存入的元素最先取出, 典型数据结构代表:…

当大模型成为新一代操作系统,我们如何转型AI产品经理?

大模型无疑是最近科技圈最炙手可热的时尚单品,跟AIGC能沾上边的工作岗位都成为行业香饽饽。许多产品经理朋友与斯年讨论如何转型AI产品经理,今天想通过用户体验五要素的逻辑框架,谈谈传统型产品经理 VS. AI型产品经理的差异。最后分享几点在转…

【深度学习】(9)--调整学习率

文章目录 调整学习率一、学习率的定义二、学习率的作用三、实现调整学习率1. 使用库函数进行调整2. 手动调整学习率 总结 调整学习率 调整学习率的目的是:通过调整学习率,优化训练速度、提高训练稳定性、适应不同的训练阶段以及改善模型性能。那么&…

不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用

在信息安全日益重要的今天,企业和个人都需要可靠的文件加密软件来保护敏感数据。以下是2024年不可错过的10款文件加密软件,它们以强大的加密功能和易用性而闻名。 1.安秉加密软件 安秉加密软件是一款专为企业设计的信息安全管理工具,采用驱动…

Android系统应用安装完成后是如何通知其他应用的?

文章目录 具体步骤如下:相关的系统广播(Actions):总结: Android系统在应用安装完成后,会通过 广播(Broadcast)的方式通知其他应用。这个广播称为"应用安装完成广播"&…

IBM开源新模型,可完美、快速转换PDF文档格式,附源码详细部署教程使用教程

IBM开源新模型,可完美、快速转换PDF文档格式,附源码详细部署教程使用教程。 docling 是一个由 DS4SD(Data Science for Social Development)团队开发的开源项目,旨在帮助文档化软件项目。该项目提供了一个基于 Flask 的…

在 OpenEuler 中配置 KVM 虚拟化环境指南

本指南旨在为读者提供一个详细的步骤说明,帮助大家在 OpenEuler 系统中配置 KVM 虚拟化环境。无论您是初学者还是有一定经验的用户,这份指南都将涵盖从环境准备、安装到虚拟机管理的各个方面,确保您能够顺利地搭建并管理自己的虚拟化平台。 …