ด้วยเครื่องมือนี้ คุณจะสามารถตรวจจับ:
การควบคุมการเข้าถึงวัตถุ COM ไม่ถูกต้อง (LaunchPermission, AccessPermission) - LPE ผ่านวิธี COM ที่ไม่เหมาะสม, การส่งต่อการรับรองความถูกต้อง DCOM นั่นคือ PermissionHunter
สิทธิ์รีจิสทรีไม่ถูกต้องสำหรับวัตถุ COM - LPE ผ่านการแย่งชิง COM นั่นก็คือ ComDiver
ค้นหา Elevation Moniker ใหม่ - UAC Bypass นั่นมัน MonikerHound
รับข้อมูลโดยละเอียดเกี่ยวกับ CLSID เฉพาะ - ตรวจสอบออบเจ็กต์ COM เพื่อค้นหาวิธี COM ที่ไม่เหมาะสม นั่นคือ ClsidExplorer
ตรวจสอบการเปิดใช้งานข้ามเซสชันในนามของผู้ใช้ที่มีสิทธิ์ระดับต่ำ - กำลังพยายามสร้างอินสแตนซ์ออบเจ็กต์ในเซสชันของบุคคลอื่นสำหรับ LPE นั่นก็คือ ComTraveller
หากเราเผยแพร่เครื่องมือนี้เมื่อสองสามเดือนก่อน (เช่น ฤดูใบไม้ผลิปี 2024) คุณคงจะค้นพบ CVE-2024-38100 (FakePotato) และ CVE-2024-38061 (SilverPotato)
เริ่มใช้เครื่องมือนี้แล้วคุณจะพบวิธีเพิ่มเติมในการยกระดับสิทธิ์บนระบบ Windows มันเหมือนกับ OleViewDotnet อัตโนมัติ :)
PermissionHunter เป็นเครื่องมือที่ช่วยให้คุณสามารถตรวจสอบ LaunchPermission และ ActivatePermission บนวัตถุ COM ทั้งหมดบนระบบ
PS A:mzhmo> .PermissionHunter.exe -h - .-' ,-"`````""-__ | / '-.._ _.-''` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | - ` PermissionHunter - ค้นหา LaunchPermission และ ActivatePermission ที่ไม่ถูกต้อง ทีมวิจัย CICADA8 จาก Michael Zhmaylo (MzHmO)PermissionHunter.exeเครื่องมือขนาดเล็กที่ช่วยให้คุณค้นหาวัตถุ COM ที่มีช่องโหว่ด้วย LaunchPermission และ ActivatePermission[OPTIONS]-outfile ที่ไม่ถูกต้อง : ชื่อไฟล์เอาต์พุต-outformat : รูปแบบเอาต์พุต ยอมรับ 'csv' และ 'xlsx'-h/--help : แสดงหน้าต่างนี้
มีเพียงสองข้อโต้แย้งที่นี่:
-outfile
- ชื่อของไฟล์พร้อมรายงานสิทธิ์
-outformat
- รูปแบบของไฟล์พร้อมรายงาน คุณสามารถส่งออกได้ทั้งในรูปแบบ csv และ xlsx จะดีกว่าหากส่งออกในรูปแบบ csv เพราะหากคุณไม่มี Excel คุณจะไม่สามารถส่งออกในรูปแบบ xlsx ได้
ตัวอย่าง:
PS A:mzhmo> .PermissionHunter -outfile ผลลัพธ์ -outformat xlsx - .-' ,-"`````""-__ | / '-.._ _.-''` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | - ` PermissionHunter - ค้นหา LaunchPermission และ ActivatePermission ที่ไม่ถูกต้อง ทีมวิจัย CICADA8 จาก Michael Zhmaylo (MzHmO)[+] ผลลัพธ์จะเป็นผลลัพธ์ รูปแบบ xlsx[+] สำเร็จ
หลังจากนั้นคุณจะได้รับไฟล์ result.xlsx ซึ่งจะแสดงรายการสิทธิ์ทั้งหมดในออบเจ็กต์ COM ที่มีอยู่
ฉันส่งออกคอลัมน์ต่อไปนี้:
ApplicationID
- ApplicationID ของวัตถุ COM เฉพาะ ตัวอย่าง: {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
;
ApplicationName
- ApplicationName ของวัตถุ COM เฉพาะ เช่น Background Intelligent Transfer Service
;
RunAs
- คีย์รีจิสทรี RunAs ของวัตถุ COM เช่น Interactive User
;
LaunchAccess
, LaunchType
, LaunchPrincipal
, LaunchSid
- คีย์รีจิสทรี LaunchPermission LaunchPrincipal ระบุผู้ใช้ที่มีสิทธิ์ LaunchAccess ในวัตถุ COM LaunchType - ประเภทของ ACE: เปิดใช้งานหรือปิดใช้งาน LaunchSID - SID ของ LaunchPrincipal อดีต:
LocalLaunch. การเปิดตัวระยะไกล การเปิดใช้งานท้องถิ่น การเข้าถึงการเปิดใช้งานระยะไกลอนุญาต NT AUTHORITYSYSTEM S-1-5-18
ซึ่งหมายความว่า ระบบมีสิทธิ์ LocalLaunch, RemoteLaunch, LocalActivation, RemoteActivation บนวัตถุ COM นี้
AccessAccess
, AccessType
, AccessPrincipal
, AccessSID
- ฟิลด์มีความหมายเหมือนกับ LaunchPermissions เฉพาะในบริบทของ AccessPermission เท่านั้น
AuthLevel
, ImpLevel
- ระดับการตรวจสอบสิทธิ์และระดับการเลียนแบบบุคคลอื่น โดยค่าเริ่มต้น จะถูกตั้งค่าเป็น RPC_C_AUTHN_LEVEL_CONNECT
และ RPC_C_IMP_LEVEL_IDENTIFY
;
CLSIDs
- วัตถุ COM CLSIDs
หากคุณพบวัตถุ COM ที่คุณสามารถเข้าถึงได้ในนามของผู้ใช้ที่มีสิทธิ์ต่ำ ตัวอย่างเช่น คุณสามารถใช้ในทางที่ผิดได้ดังนี้:
สร้างอินสแตนซ์และเรียกใช้วิธีการของวัตถุ COM นั้น เช่น เขียนไฟล์ที่กำหนดเองในนามของระบบ ตัวอย่างเช่น คุณพบวัตถุ COM ที่มีเมธอด DeployCmdShell()
ที่ทำงานในนามของบัญชี NT AUTHORITYSYSTEM
และคุณมี LaunchPermissions
และ AccessPermissions
คุณสามารถเริ่มวัตถุ COM นี้ เรียกใช้เมธอด DeployCmdShell()
และรับการเรียกใช้โค้ดในนามของระบบ คุณสามารถดูวิธีการที่มีอยู่ได้โดยใช้ ClsidExplorer
ใช้การรับรองความถูกต้อง DCOM ในทางที่ผิด สำหรับสิ่งนี้ โปรดดู RemoteKrbRelay
ข้อมูลทั้งหมดเกี่ยวกับวัตถุ COM อยู่ในรีจิสทรี แต่จะเกิดอะไรขึ้นถ้าการลงทะเบียนไม่ถูกต้อง? ในกรณีเช่นนี้ เรามีความเป็นไปได้ที่จะแทนที่การตั้งค่า COM เช่น เพื่อจี้ไฟล์ปฏิบัติการ
เครื่องมือนี้ช่วยให้คุณตรวจจับช่องโหว่ดังกล่าว และจะสแกนรีจิสทรีตามลำดับความสำคัญของคีย์ที่ดูเมื่อค้นหาวัตถุ COM ด้วยวิธีนี้ คุณสามารถค้นหา Shadow COM Hijacking ได้ ลำดับความสำคัญมีดังนี้:
1. HKCUSoftwareClasses (GUID) TreatAs 2. HKLMSoftwareClasses (GUID) TreatAs 3. HKCUSoftwareClasses (GUID) InprocServer32 4. HKLMSoftwareClasses (GUID) InprocServer32 5. HKCUSoftwareClasses (GUID) LocalServer32 6. HKLMSoftwareClasses (GUID) LocalServer32
ดังนั้น อย่างน้อยสองเวกเตอร์ของการยกระดับสิทธิ์จึงเกิดขึ้น:
หากเรามีสิทธิ์ในการเขียนไปยัง HKCU...TreatAs
และไฟล์ปฏิบัติการ COM ดั้งเดิมอยู่ใน HKCU...LocalServer32
เราก็สามารถทำ Shadow COM Hijacking ได้โดยการเขียนไฟล์ปฏิบัติการของเราไปที่ HKCU..TreatAs
หากวัตถุ COM อยู่ใน HKCU..LocalServer32
และเราสามารถเขียนไปยัง HKCU..LocalServer32
ได้ เราก็สามารถทำ COM Hijacking ได้
มาดูเครื่องมือกันดีกว่า:
PS A:ssdgitrepoCOMThanasiaComDiverx64Debug> .ComDiver.exe -h / o ^ o / ( ) / - - - - - - - (%%%) !----------- นักดำน้ำ COM -------------- [?] เครื่องมือขนาดเล็กสำหรับตรวจสอบรีจิสทรีที่ไม่ปลอดภัยและการอนุญาตดิสก์บนวัตถุ com [?] อาร์จีเอส -h/--help <- แสดงข้อความนี้ --จาก<- วิเคราะห์ CLSID จาก clsid นี้ --target <- วิเคราะห์ clsid เป้าหมายหนึ่งรายการ --no-context <- อย่าตรวจสอบบริบทของเซิร์ฟเวอร์ COM อื่น การวิเคราะห์รีจิสทรีเท่านั้น --no-create <- อย่าสร้างวัตถุ COM เป้าหมาย นี่คือโหมดที่เร็วที่สุด
ยอมรับข้อโต้แย้งต่อไปนี้:
--from
- มี CLSID จำนวนมากบนระบบ Windows หากคุณไม่ต้องการให้เครื่องมือดู CLSID ทั้งหมดตั้งแต่รายการแรก คุณสามารถระบุ CLSID ที่จะเริ่มต้นด้วยได้ เช่น --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--target
- วิเคราะห์ clsid เฉพาะ;
--no-context
- อย่าตรวจสอบชื่อผู้ใช้ที่เปิดใช้งานออบเจ็กต์ COM ในนามของ
--no-create
- ไม่สร้างวัตถุ COM ที่ตรวจพบ นี่เป็นการจำกัดข้อมูลที่คุณจะได้รับเกี่ยวกับเรื่องนี้ อย่างไรก็ตาม นี่เป็นวิธีที่เร็วที่สุดในการตรวจสอบเฉพาะสิทธิ์ของรีจิสทรีเท่านั้น
ตัวอย่าง:
.ComDiver.exe --ไม่สร้าง
ในกรณีนี้เราจะเห็นว่าไม่มีคีย์อยู่ใน HKCU และเรามีสิทธิ์ในการเขียนคีย์เหล่านั้น ดังนั้น ถ้าเราเขียนคุณค่าของเราเองลงในเส้นทางนี้ เราจะดำเนินการ COM Hijacking
หากคุณเห็นเส้นสีแดงในเอาต์พุตของเครื่องมือ นี่เป็นวิธีที่เป็นไปได้ในการใช้อ็อบเจ็กต์ COM ในทางที่ผิด! คุณสามารถทำการ COM Hijacking (ปลอมแปลงไฟล์ปฏิบัติการที่มีอยู่) หรือ Shadow COM Hijacking (ปลอมแปลงไฟล์ปฏิบัติการที่หายไป) อ่านเพิ่มเติมเกี่ยวกับการจี้ COM ที่นี่
มีวิธีเลี่ยงผ่าน UAC ในตัวบนระบบ Windows ซึ่งทำได้ผ่าน Elevation Moniker คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่นี่ UAC Bypass ประเภทนี้ต้องใช้วิธีลงทะเบียนอ็อบเจ็กต์ COM ในรีจิสทรีที่ไม่ได้มาตรฐาน ซึ่งติดตามได้ง่าย ดังนั้นคุณสามารถใช้เครื่องมือของฉันเพื่อค้นหาวิธีใหม่ของ UAC Bypass
ตัวอย่าง:
PS A: ssdgitrepoCOMThanasiaMonikerHoundx64Debug> .MonikerHound.exe ,_ _ _, อู้/ - - - - - - - MonikerHound - ค้นหา UAC Bypass ของคุณเอง! ทีมวิจัยจั๊กจั่น8 จาก มิชาเอล ซไมโล (MzHmO) [+] พบเซิร์ฟเวอร์ COM ที่เป็นไปได้สำหรับชื่อเล่นระดับความสูง! ชื่อ: CEIPLuaElevationHelper ซีแอลเอสไอดี: {01D0A625-782D-4777-8D4E-547E6457FAD5} LocalizedString: @%systemroot%system32werconcpl.dll,-351 เปิดใช้งาน: 1 การอ้างอิงไอคอน: @%systemroot%system32werconcpl.dll,-6 เปิดใช้งาน: สำเร็จ หมายเลขรหัส: 15800 DllHost.exe - [+] พบเซิร์ฟเวอร์ COM ที่เป็นไปได้สำหรับชื่อเล่นระดับความสูง ชื่อ: CTapiLuaLib Class CLSID: {03e15b2e-cca6-451c-8fb0-1e2ee37a27dd} LocalizedString: @%systemroot%system32tapiui.dll,-1 เปิดใช้งาน: 1 การอ้างอิงไอคอน: @%systemroot%system32tapiui.dll,-201 เปิดใช้งาน: สำเร็จ หมายเลขรหัส: 440 DllHost.exe -
เมื่อคุณค้นพบผู้สมัครที่มีศักยภาพสำหรับ UAC Bypass แล้ว คุณสามารถเริ่มตรวจสอบพวกเขาได้ เนื่องจากเป็นเทมเพลตที่ยอดเยี่ยมสำหรับการเรียกใช้ Elevation Moniker คุณสามารถใช้ฟังก์ชันนี้หรือโปรแกรมนี้ก็ได้
ClsidExplorer ช่วยให้คุณสามารถดึงข้อมูลเกี่ยวกับ CLSID ที่เฉพาะเจาะจงได้ โปรแกรมส่งออกข้อมูลต่อไปนี้:
AppID
- ApplicationID ของวัตถุ COM เฉพาะ
ProgID
- ProgID ของวัตถุ COM เฉพาะ
PID
- PID ที่วัตถุ COM นี้กำลังทำงานอยู่
Process Name
- ชื่อของกระบวนการ PID
Username
- ชื่อของผู้ใช้ที่กระบวนการกำลังทำงานอยู่
Methods
- วิธีการที่มีอยู่ของวัตถุ COM ทำโดยการแยกวิเคราะห์ TypeLib
ป.ล. A: ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe -h CLSIDExplorer.exe - ระบุข้อมูลทั้งหมดด้วย clsid การใช้งาน: .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"
โปรแกรมยอมรับอาร์กิวเมนต์เดียวเท่านั้น:
--clsid
- กำหนดเป้าหมาย CLSID เพื่อวิเคราะห์
ป.ล. A: ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"[{00000618-0000-0010-8000-00aa006d2ea4}] รหัสแอป: ไม่ทราบ ProgID: ไม่ทราบ พีไอดี: 1572 ชื่อกระบวนการ: CLSIDExplorer.exe ชื่อผู้ใช้: WINPCMichael วิธีการ: [0] __stdcall เป็นโมฆะ QueryInterface (IN GUID *, OUT เป็นโมฆะ **) [1] __stdcall AddRef แบบยาวที่ไม่ได้ลงนาม () [2] __stdcall การเปิดตัวแบบยาวที่ไม่ได้ลงนาม () [3] __stdcall เป็นโมฆะ GetTypeInfoCount (ออก int ที่ไม่ได้ลงนาม *) [4] __stdcall เป็นโมฆะ GetTypeInfo (IN int ที่ไม่ได้ลงนาม, IN แบบยาวที่ไม่ได้ลงนาม, OUT เป็นโมฆะ **) [5] __stdcall เป็นโมฆะ GetIDsOfNames (IN GUID *, IN char **, IN ที่ไม่ได้ลงนาม, IN แบบยาวที่ไม่ได้ลงนาม, OUT แบบยาว *) [6] __stdcall ถือเป็นโมฆะวิงวอน (IN long, IN GUID*, IN unsigned long, IN unsigned short, IN DISPPARAMS*, OUT VARIANT*, OUT EXCEPINFO*, OUT unsigned int*) [7] __stdcall ชื่อ BSTR() [8] __stdcall เป็นโมฆะชื่อ (ใน BSTR) (9) __stdcall RightsEnum GetPermissions (ในตัวแปร ใน ObjectTypeEnum ในตัวแปร) [10] __stdcall เป็นโมฆะ SetPermissions (ในตัวแปร ใน ObjectTypeEnum ใน ActionEnum ใน RightsEnum ใน InheritTypeEnum ในตัวแปร) [11] __stdcall เป็นโมฆะ ChangePassword (ใน BSTR, ใน BSTR) [12] __stdcall กลุ่ม * กลุ่ม () [13] __คุณสมบัติ stdcall* คุณสมบัติ () [14] __stdcall _Catalog* ParentCatalog() [15] __stdcall เป็นโมฆะ ParentCatalog (IN _Catalog *) [16] __stdcall เป็นโมฆะ ParentCatalog (IN _Catalog *) [จบ]
โปรแกรมนี้เหมาะสำหรับการตรวจสอบคลาส COM ที่ค้นพบด้วย ComTraveller
หรือ PermissionHunter
หรือ MonikerHound
เพื่อหาวิธีการที่น่าสนใจที่สามารถนำไปใช้ในทางที่ผิดได้
ComTraveller - เครื่องมือนี้ช่วยให้คุณสำรวจออบเจ็กต์ COM ที่มีอยู่ทั้งหมด ขั้นแรก ช่วยให้คุณระบุออบเจ็กต์ COM ได้อย่างรวดเร็วด้วยค่าที่น่าสนใจ (RunAs Interactive User) ความพร้อมใช้งานของ TypeLib และความสามารถในการเปิดใช้งานข้ามเซสชัน ดังนั้น คุณจึงสามารถตรวจจับออบเจ็กต์ที่อาจสร้างอินสแตนซ์ในเซสชันผู้ใช้อื่นได้อย่างรวดเร็ว ซึ่งนำไปสู่การยกระดับสิทธิ์
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 - เครื่องมือขนาดเล็กสำหรับแยกวิเคราะห์และแยกข้อมูลเกี่ยวกับ CLSID ที่ลงทะเบียนทั้งหมดบน systemUsage:--file
--file
- ชื่อของไฟล์ที่จะส่งออกข้อมูลเกี่ยวกับวัตถุ COM
--from
- มี CLSID จำนวนมากบนระบบ Windows หากคุณไม่ต้องการให้เครื่องมือดู CLSID ทั้งหมดตั้งแต่รายการแรก คุณสามารถระบุ CLSID ที่จะเริ่มต้นด้วยได้ เช่น --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--session
- พยายามสร้างอินสแตนซ์ของวัตถุในเซสชันของผู้อื่น
--target
- วิเคราะห์ clsid เป้าหมายเดียวเท่านั้น
ตัวอย่าง:
.ComTraveller.exe --ไฟล์ rep.csv --เซสชัน 1
หลังจากนั้นคุณจะพบไฟล์ rep.csv พร้อมข้อมูลเกี่ยวกับออบเจ็กต์ COM มีหลายคอลัมน์ที่นี่:
CLSID
- CLSID ของวัตถุ COM;
AppId
- APPID ของวัตถุ COM;
ProgId
- APPID ของวัตถุ COM;
RunAs
- ค่าในรีจิสทรี RunAs หากค่าเป็น The Interactive User
หรือ NT AUTHORITYSYSTEM
คุณสามารถลองทำ LPE ได้
Username
- ชื่อของผู้ใช้ที่เรียกใช้วัตถุ COM ในนามของ
PID
- PID ที่วัตถุ COM กำลังทำงานอยู่
ProcessName
- ชื่อของกระบวนการที่วัตถุ COM กำลังทำงานอยู่
HasTypeLib
- วัตถุ COM มี TypeLib หรือไม่ ถ้าเป็นเช่นนั้น คุณสามารถมอบวัตถุนี้ให้กับ ClsidExplorer
เพื่อดูวิธีการที่มีอยู่
canCrossSessionActivate
- เป็นไปได้หรือไม่ที่จะใช้คลาส COM นี้ในทางที่ผิดสำหรับ LPE ผ่านการเปิดใช้งานในเซสชันของผู้อื่น หากค่าเป็น +
หรือข้อผิดพลาดคือ ACCESS DENIED
นี่อาจเป็นตัวเลือกที่เป็นไปได้สำหรับ LPE
ตัวอย่างเช่น หากคุณใช้ตัวกรอง คุณจะพบคลาส COM ที่น่าสนใจทันที :) ว้าว นี่คือคลาส COM ที่สามารถเปิดใช้งานแบบข้ามเซสชันและทำงานในนามของระบบได้หรือไม่
ควรสังเกตว่าโปรแกรมอาจหยุดทำงานเนื่องจากมีวัตถุ COM มากมาย ในกรณีนี้ คุณสามารถรีสตาร์ทได้ดังนี้:
.ComTraveller.exe --ไฟล์ rep.csv --เซสชัน 1 --จาก "{0006F071-0000-0000-C000-000000000046}"