PowerShell中的邪恶小天使之Invoke-Expression 4


Invoke-Expression能将任何的字符串当作PowerShell脚本来执行。因此,你可以用它构造动态的脚本,并执行。
但是防人之心不可无,我们可以用它创建动态代码,用心险恶之人也可以在运行时用它动态构建恶意代码,或者直接从网上下载。
下面通过一个安全有趣的例子,来演示别人怎样下载并运行代码:

#requires -Version 3

Invoke-Expression -Command (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/mosserlee/PSTips/master/Functions/Get-InstalledSoftwares.ps1' -UseBasicParsing).Content

上面的脚本运行后发生了什么,很好奇吧。我们可以在ISE中打开它,是先保存成文件然后打开吗?那样太low了,请自己打开Windows PowerShell ISE编辑器,然后在内嵌的PowerShell控制台执行下面的语句

#requires -Version 3 
$file = $psise.CurrentPowerShellTab.Files.Add()
$file.Editor.text = (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/mosserlee/PSTips/master/Functions/Get-InstalledSoftwares.ps1' -UseBasicParsing).Content

参考链接Why Invoke-Expression is Evil

荔非苔注:有的时候我们在本地定义的函数不想把它复制进每一个invoke-command对应的脚本块去远程执行,那么可以考虑把函数作为字符串以参数的形式发动到远端,然后使用Invoke-Expression执行它。

本文链接: https://www.pstips.net/why-invoke-expression-is-evil.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

回复 ccccly 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

4 条评论 “PowerShell中的邪恶小天使之Invoke-Expression