Dengan alat ini, Anda akan dapat mendeteksi:
Kontrol akses salah ke objek COM (LaunchPermission, AccessPermission) - LPE melalui metode COM yang dapat disalahgunakan, penyampaian Otentikasi DCOM. Itu PermissionHunter
.
Hak registri salah atas objek COM - LPE melalui COM Hijacking. Itu ComDiver
.
Temukan Moniker Ketinggian baru - UAC Bypass. Itu MonikerHound
.
Dapatkan informasi mendetail tentang CLSID tertentu - Periksa objek COM untuk menemukan Metode COM yang dapat disalahgunakan. Itu ClsidExplorer
.
Periksa Aktivasi Lintas Sesi atas nama pengguna dengan hak istimewa rendah - Mencoba membuat instance objek di sesi orang lain untuk LPE. Itu ComTraveller
.
Jika kami menerbitkan alat ini beberapa bulan yang lalu (misalnya Musim Semi 2024), Anda akan menemukan CVE-2024-38100 (FakePotato) dan CVE-2024-38061 (SilverPotato).
Mulai gunakan alat ini dan Anda dapat menemukan lebih banyak cara untuk meningkatkan hak istimewa pada sistem Windows. Ini seperti OleViewDotnet otomatis :)
PermissionHunter adalah alat yang memungkinkan Anda memeriksa LaunchPermission dan ActivatePermission pada semua objek COM di sistem.
PS A:mzhmo> .PermissionHunter.exe -h , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter - memburu LaunchPermission dan ActivatePermission CICADA8 Tim Peneliti Dari Michael Zhmaylo (MzHmO)PermissionHunter.exeAlat kecil yang memungkinkan Anda menemukan objek COM yang rentan dengan LaunchPermission dan ActivatePermission[OPTIONS]-outfile : output filename-outformat : format output yang salah. Menerima 'csv' dan 'xlsx'-h/--help : menampilkan jendela ini
Hanya ada dua argumen di sini:
-outfile
- nama file dengan laporan hak;
-outformat
- format file dengan laporan, Anda dapat menampilkannya dalam csv dan xlsx. Sebaiknya output dalam format csv, karena jika Anda tidak memiliki Excel, Anda tidak akan bisa menghasilkan output dalam format xlsx.
Contoh:
PS A:mzhmo> .PermissionHunter -hasil file keluar -format xlsx , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter - mencari LaunchPermission dan ActivatePermission Tim Peneliti CICADA8 yang salah Dari Michael Zhmaylo (MzHmO)[+] Hasilnya akan terlihat, format xlsx[+] Sukses
Setelah itu Anda akan mendapatkan file result.xlsx, yang akan mencantumkan semua hak atas objek COM yang ada.
Saya menampilkan kolom berikut:
ApplicationID
- ApplicationID dari objek COM tertentu. Contoh: {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
;
ApplicationName
- Nama Aplikasi dari objek COM tertentu. Contoh: Background Intelligent Transfer Service
;
RunAs
- Kunci registri RunAs dari objek COM. Contoh: Interactive User
;
LaunchAccess
, LaunchType
, LaunchPrincipal
, LaunchSid
- kunci registri LaunchPermission. LaunchPrincipal menentukan pengguna yang memiliki hak LaunchAccess ke objek COM. LaunchType - jenis ACE: mengaktifkan atau menonaktifkan. LaunchSID - SID dari LaunchPrincipal. Mantan:
Peluncuran Lokal. Peluncuran Jarak Jauh. Aktivasi Lokal. Akses Aktivasi Jarak Jauh Diizinkan NT AUTHORITYSYSTEM S-1-5-18
Ini berarti bahwa sistem memiliki izin LocalLaunch, RemoteLaunch, LocalActivation, RemoteActivation pada objek COM ini;
AccessAccess
, AccessType
, AccessPrincipal
, AccessSID
- bidang memiliki arti yang sama dengan LaunchPermissions, hanya dalam konteks AccessPermission;
AuthLevel
, ImpLevel
- Tingkat Otentikasi dan Tingkat Peniruan Identitas. Secara default, keduanya disetel ke RPC_C_AUTHN_LEVEL_CONNECT
dan RPC_C_IMP_LEVEL_IDENTIFY
;
CLSIDs
- CLSID objek COM.
Jika Anda menemukan objek COM yang dapat Anda akses atas nama pengguna dengan hak istimewa rendah, misalnya, Anda dapat menyalahgunakannya sebagai berikut:
Buat sebuah instance dan panggil metode objek COM tersebut untuk, misalnya, menulis file arbitrer atas nama sistem. Misalnya, Anda telah menemukan objek COM dengan metode DeployCmdShell()
yang berjalan atas nama akun NT AUTHORITYSYSTEM
dan Anda memiliki LaunchPermissions
dan AccessPermissions
. Anda dapat memulai objek COM ini, memanggil metode DeployCmdShell()
, dan mengeksekusi kode atas nama sistem. Anda dapat melihat metode yang tersedia menggunakan ClsidExplorer
.
Penyalahgunaan otentikasi DCOM. Untuk ini, lihatRemoteKrbRelay
Semua informasi tentang objek COM ada di registri. Namun bagaimana jika registrasinya salah? Dalam kasus seperti ini kita mempunyai kemungkinan untuk mengesampingkan pengaturan COM, misalnya, untuk membajak file yang dapat dieksekusi.
Alat ini memungkinkan Anda mendeteksi kerentanan tersebut, dan memindai registri sesuai dengan prioritas kunci yang dilihat saat mencari objek COM. Dengan cara ini, Anda bahkan dapat menemukan Shadow COM Hijacking. Prioritasnya adalah sebagai berikut:
1. Kelas Perangkat Lunak HKCU (GUID) TreatAs 2. Kelas Perangkat Lunak HKLM (GUID) TreatAs 3.Kelas Perangkat Lunak HKCU(GUID)InprocServer32 4.Kelas Perangkat Lunak HKLM(GUID)InprocServer32 5. Kelas Perangkat Lunak HKCU (GUID) Server Lokal32 6.Kelas Perangkat Lunak HKLM(GUID)Server Lokal32
Dengan demikian, setidaknya muncul dua vektor peningkatan hak istimewa:
Jika kita memiliki izin menulis ke HKCU...TreatAs
, dan COM asli yang dapat dieksekusi ada di HKCU...LocalServer32
, maka kita dapat melakukan Shadow COM Hijacking dengan menulis executable kita ke HKCU..TreatAs
.
Jika objek COM terletak di HKCU..LocalServer32
dan kita dapat menulis ke HKCU..LocalServer32
, maka kita dapat melakukan COM Hijacking
Mari kita lihat lebih dekat alatnya:
PS A:ssdgitrepoCOMThanasiaComDiverx64Debug> .ComDiver.exe -h / o ^ o / ( ) / ____________(%%%%%%)____________ ( / / )%%%%%%%( ) (___/___/__/ ________) ( / /(%%%%%%%) ) (__/___/ (%%%%%%%) _____) /( ) / (%%%%%) (%%%) !----------- COM PENYELAM -------------- [?] Alat kecil untuk memeriksa registri yang tidak aman dan izin disk pada objek com [?] ARGS -h/--help <- tampilkan pesan ini --from<- menganalisis CLSID dari clsid ini --target <- menganalisis satu clsid target --no-context <- jangan periksa konteks server COM lainnya. Hanya analisis registri. --no-create <- jangan membuat objek COM target. Ini adalah mode tercepat
Ia menerima argumen berikut:
--from
- ada banyak CLSID di sistem Windows. Jika Anda tidak ingin alat melihat semua CLSID yang dimulai dari yang pertama, Anda dapat menentukan CLSID untuk memulai, misalnya, --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--target
- menganalisis clsid tertentu;
--no-context
- jangan centang nama pengguna yang atas nama objek COM diluncurkan;
--no-create
- untuk tidak membuat objek COM yang telah terdeteksi. Ini membatasi informasi yang dapat Anda peroleh tentang hal itu. Namun, ini adalah cara tercepat untuk memeriksa hak registri saja.
Contoh:
.ComDiver.exe --tidak-buat
Dalam hal ini kita dapat melihat bahwa tidak ada kunci di dalam HKCU dan kita mempunyai izin menulis ke kunci tersebut. Oleh karena itu, jika kita menulis nilai kita sendiri ke jalur ini, kita akan melakukan Pembajakan COM.
Jika Anda melihat garis merah pada keluaran alat, ini kemungkinan cara untuk menyalahgunakan objek COM! Anda dapat melakukan COM Hijacking (memalsukan executable yang ada), atau Shadow COM Hijacking (memalsukan executable yang hilang). Baca lebih lanjut tentang Pembajakan COM di sini
Ada cara bawaan untuk mem-bypass UAC pada sistem Windows, ini dilakukan melalui Elevation Moniker. Anda dapat membaca lebih lanjut tentangnya di sini. Bypass UAC semacam ini memerlukan cara non-standar untuk mendaftarkan objek COM di registri, yang cukup mudah dilacak. Jadi Anda dapat menggunakan alat saya untuk menemukan cara baru UAC Bypass.
Contoh:
PS A:ssdgitrepoCOMThanasiaMonikerHoundx64Debug> .MonikerHound.exe ,_ _ _, oo/ ,(.-.), _/ |) (| _ /=-=/ ,| =/ |, _/ | / _ _!_/ MonikerHound - temukan Bypass UAC Anda sendiri! Tim Peneliti CICADA8 Dari Michael Zhmaylo (MzHmO) [+] Server COM potensial untuk moniker ketinggian ditemukan! Nama: CEIPLuaElevationHelper CLSID: {01D0A625-782D-4777-8D4E-547E6457FAD5} LocalizedString: @%systemroot%system32werconcpl.dll,-351 Diaktifkan: 1 Referensi Ikon: @%systemroot%system32werconcpl.dll,-6 Aktifkan: Sukses PID: 15800 DllHost.exe [+]........................[+] [+] Server COM potensial untuk moniker ketinggian ditemukan! Nama: Kelas CTapiLuaLib CLSID: {03e15b2e-cca6-451c-8fb0-1e2ee37a27dd} LocalizedString: @%systemroot%system32tapiui.dll,-1 Diaktifkan: 1 Referensi Ikon: @%systemroot%system32tapiui.dll,-201 Aktifkan: Sukses PID: 440 DllHost.exe [+]........................[+]
Setelah Anda menemukan kandidat potensial untuk UAC Bypass, Anda dapat mulai memeriksanya. Sebagai templat yang bagus untuk menjalankan Elevation Moniker, Anda dapat menggunakan fungsi ini, atau program ini.
ClsidExplorer memungkinkan Anda mengambil informasi tentang CLSID tertentu. Program ini mengeluarkan data berikut:
AppID
- ApplicationID dari Objek COM tertentu;
ProgID
- ProgID dari Objek COM tertentu;
PID
- PID di mana Objek COM ini berjalan;
Process Name
- nama proses PID;
Username
- nama pengguna yang atas namanya proses sedang berjalan;
Methods
- metode yang tersedia dari Objek COM. Dibuat dengan mengurai TypeLib.
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe -h CLSIDExplorer.exe - mengidentifikasi semua info dengan clsid Penggunaan: .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"
Program ini hanya menerima satu argumen:
--clsid
- targetkan CLSID untuk dianalisis
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"[{00000618-0000-0010-8000-00aa006d2ea4}] ID Aplikasi: Tidak Diketahui ID Program: Tidak diketahui PID: 1572 Nama Proses: CLSIDExplorer.exe Nama pengguna: WINPCMichael Metode: [0] __stdcall batal QueryInterface(DALAM GUID*, KELUAR batal**) [1] __stdcall tidak ditandatangani AddRef panjang() [2] __stdcall tidak ditandatangani Rilis panjang() [3] __stdcall batal GetTypeInfoCount(OUT unsigned int*) [4] __stdcall void GetTypeInfo(IN unsigned int, IN unsigned long, OUT void**) [5] __stdcall void GetIDsOfNames(IN GUID*, IN char**, IN unsigned int, IN unsigned long, OUT long*) [6] __stdcall void Invoke(IN long, IN GUID*, IN unsigned long, IN unsigned short, IN DISPPARAMS*, OUT VARIANT*, OUT EXCEPINFO*, OUT unsigned int*) [7] __stdcall Nama BSTR() [8] __stdcall batal Nama(DI BSTR) [9] __stdcall RightsEnum GetPermissions(DALAM VARIAN, DALAM ObjectTypeEnum, DALAM VARIAN) [10] __stdcall void SetPermissions(DALAM VARIAN, DALAM ObjectTypeEnum, DALAM ActionEnum, DALAM RightsEnum, DALAM InheritTypeEnum, DALAM VARIAN) [11] __stdcall batal Ubah Kata Sandi (DI BSTR, DI BSTR) [12] __stdcall Grup* Grup() [13] __stdcall Properti* Properti() [14] __stdcall _Katalog* Katalog Induk() [15] __stdcall batal Katalog Induk( DALAM _Katalog*) [16] __stdcall batal Katalog Induk( DALAM _Katalog*) [AKHIR]
Program ini sangat bagus untuk memeriksa kelas COM yang ditemukan dengan ComTraveller
atau PermissionHunter
atau MonikerHound
untuk mengetahui metode menarik yang dapat disalahgunakan.
ComTraveller - alat ini memungkinkan Anda menjelajahi semua objek COM yang tersedia. Pertama, ini memungkinkan Anda dengan cepat mengidentifikasi objek COM dengan nilai menarik (RunAs Interactive User), ketersediaan TypeLib, dan kemampuan Aktivasi Lintas Sesi. Dengan demikian, Anda dapat dengan cepat mendeteksi objek yang mungkin dipakai di sesi pengguna lain, sehingga menyebabkan peningkatan hak istimewa.
PS A:SSDgitrepoCOMThanasiaComTravellerx64Debug> .ComTraveller.exe -h ,,_ zd$$??= z$$P? F:`c, _ d$$, `c'cc$$i ,cd$?R $$$$ cud$,?$$$i ,=P"2?z " $" " ?$$$, ?$$$. ,-''`>, bzP 'cLdb,?$$,?$$$ ,h' "I$'J$P ... `?$$$,"$$,`$$h $$PxrF'd$"d$PP""?-,"?$$,?$h`$$,,$$'$F44 "?,,_`=4c,?=,"?hu?$`?L4$'? ' `""?==""=-"" `""-`'_,,,, .ccu? m?e?JC,-,"=? """=='?"ComTraveller - alat kecil untuk mengurai dan mengekstrak informasi tentang semua CLSID yang terdaftar di sistemPenggunaan:--file
--file
- nama file yang akan menampilkan informasi tentang objek COM;
--from
- ada banyak CLSID di sistem Windows. Jika Anda tidak ingin alat melihat semua CLSID yang dimulai dari yang pertama, Anda dapat menentukan CLSID untuk memulai, misalnya, --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--session
- mencoba membuat instance objek di sesi orang lain
--target
- menganalisis hanya satu target clsid
Contoh:
.ComTraveller.exe --file rep.csv --sesi 1
Setelah itu Anda akan menemukan file rep.csv dengan informasi tentang objek COM. Ada beberapa kolom di sini:
CLSID
- CLSID dari objek COM;
AppId
- APPID dari objek COM;
ProgId
- APPID objek COM;
RunAs
- nilai dalam registri RunAs. Jika nilainya adalah The Interactive User
atau NT AUTHORITYSYSTEM
, Anda dapat mencoba membuat LPE;
Username
- nama pengguna yang atas namanya objek COM dijalankan;
PID
- PID tempat objek COM dijalankan;
ProcessName
- nama proses di mana objek COM sedang berjalan;
HasTypeLib
- apakah objek COM memiliki TypeLib. Jika ya, Anda dapat memberikan objek ini ke ClsidExplorer
untuk melihat metode yang tersedia;
canCrossSessionActivate
- apakah mungkin untuk menyalahgunakan kelas COM ini untuk LPE melalui aktivasi di sesi orang lain. Jika nilainya +
atau kesalahannya adalah ACCESS DENIED
, ini bisa menjadi kandidat potensial untuk LPE.
Misalnya jika Anda menerapkan filter, Anda akan langsung menemukan kelas COM yang menarik :) Wah, apakah ini kelas COM yang bisa diaktifkan lintas sesi dan berfungsi atas nama sistem?
Perlu dicatat bahwa program mungkin macet karena banyaknya objek COM. Dalam hal ini, Anda dapat memulai ulang seperti ini:
.ComTraveller.exe --file rep.csv --sesi 1 --dari "{0006F071-0000-0000-C000-000000000046}"