2009-07-20 9 views
6

क्या लॉगऑनसर के लिए कोई विकल्प है और नेटवर्क संसाधनों तक पहुंचने के लिए दिए गए खाते का प्रतिरूपण करने के लिए? मैं प्रतिरूपण की विधि की तलाश में हूं जो मुझे विदेशी डोमेन में मशीन से कनेक्ट करने देगी (या, एक ही मामले के लिए वर्कग्रुप मशीन)।नेटवर्क प्रतिरूपण के लिए लॉगऑनसर के विकल्प (सी ++)

प्रारंभिक डेटा के लिए मेरे पास है: मशीन का नाम, उपयोगकर्ता नाम (या डोमेन \ उपयोगकर्ता नाम), cleartext पासवर्ड।

मुझे पता है कि WNetAddConnection का उपयोग \\ machinename \ ipc $ पर कनेक्शन स्थापित करने का एक तरीका है, तो अधिकांश नेटवर्क फ़ंक्शंस उस खाते के संदर्भ में चलेंगे, हालांकि win2008 ने एक और मोड़ जोड़ा और कुछ फ़ंक्शन अभी भी खाते का उपयोग करते हैं, धागा चल रहा है।

मुझे यह भी पता है कि एसएसपीआई का उपयोग करके प्रतिरूपण टोकन प्राप्त करने का कोई तरीका है। क्या किसी ने उन टोकन के साथ प्रयोग किया है, क्या वे शेयर, एससीएम, रिमोट रजिस्ट्री और सामान तक पहुंचने के लिए अच्छे हैं? क्या WNetAddConnection का उपयोग कर रहा है?

संपादित करें: स्पष्ट करने के कारण मैं उपयोग नहीं कर सकते LogonUser है क्योंकि मैं एक गैर-विश्वसनीय डोमेन या कार्यसमूह में प्रयोक्ता का रूप धारण करने की आवश्यकता है

EDIT2: एक और स्पष्टीकरण: आइटम मैं कोशिश कर रहा हूँ कार्यान्वयन psexec के समान है, उदाहरण के लिए:

  • प्रोग्राम होस्ट या सक्रिय निर्देशिका कॉन्फ़िगरेशन को संशोधित नहीं करना चाहिए (उदाहरण: अस्थायी स्थानीय उपयोगकर्ता आदि)। इसके अलावा इस धारणा है कि यह या डीसी पर चल रहा है नहीं बनाया जा सकता नहीं
  • बनाए गए कोई अवगत सॉफ्टवेयर पहले से स्थापित दूरस्थ होस्ट, केवल हालत को देखते हुए पर है हो सकता है कि विंडोज़ फ़ाइल साझा लक्ष्य
  • खाते पर सक्षम किया गया है/पासवर्ड लक्ष्य पर काम करने के लिए जाना जाता है, लेकिन लक्ष्य मशीन स्थानीय डोमेन, विदेशी डोमेन में हो सकती है, डोमेन में नहीं।

EDIT3: मैं वास्तव में SSPI InitializeSecurityContext/AcquireCredentialsHandle विकल्प के बारे में अधिक जानना चाहेंगे। क्या कोई ऐसा व्यक्ति है जो इस एपीआई के साथ बड़े पैमाने पर काम कर रहा है? क्या प्रतिरूपण के साथ लौटे टोकन का उपयोग करना संभव है, ताकि धागा नेटवर्क शेयरों तक पहुंच सके और फ़ाइलों की प्रतिलिपि बना सके, आदि? क्या कोई कामकाजी कोड स्निपेट पोस्ट कर सकता है?

EDIT4: मार्श रे के लिए धन्यवाद, समस्या हल हो गई। किसी को भी, सबूत अवधारणा-का-कोड को देखने के लिए it is here

उत्तर

7

आप "पहुँच नेटवर्क संसाधनों" अपने जंगल के बाहर चाहने कर रहे हैं, कि WNetAddConnection2/3 के साथ आप का उल्लेख के रूप में करते हैं, या के साथ मानक RPC API का उपयोग RPC_ C__ AUTHN__ GSS__ नकारात्मक और स्पष्ट प्रमाण-पत्र संरचना।

आम तौर पर, "प्रतिरूपण" कुछ ऐसा होता है जो सर्वर की तरफ होता है। सर्वर पक्ष कनेक्शन के प्रतिरूपण करने में सक्षम होगा क्योंकि आप जिस खाते से कनेक्ट कर रहे हैं।

लेकिन कुंजी यह है: प्रतिरूपण केवल उस खाते का प्रतिरूपण करने के लिए समझ में आता है जो सर्वर अपने स्थानीय सैम/डोमेन/वन निर्देशिका में पहुंच सकता है। यदि ग्राहक और सर्वर विभिन्न जंगलों में हैं, तो वे स्पष्ट रूप से एक प्रतिरूपण टोकन के लिए खाते के एसआईडी पर सहमत नहीं हो सकते हैं (प्रसिद्ध एसआईडी के मामले को छोड़कर प्रशासक जो मुख्य रूप से इस तरह की चीज़ को भ्रमित करने के लिए काम करते हैं), और ऐसा लगता है कि डीएसीएल आदि के खिलाफ जांच करना आवश्यक है

शायद आप जो चाहते हैं वह LOGON32__ LOGON__ NEW__ CREDINTIALS ध्वज के साथ LogonUserEx को कॉल करना है। यह सफल होना चाहिए (यहां तक ​​कि एक अलग जंगल में - यह वास्तव में आपके द्वारा निर्दिष्ट प्रमाण-पत्रों को प्रमाणित नहीं करता है) जो आपको निर्दिष्ट उपयोगकर्ता नाम/पासवर्ड के साथ टोकन देता है। आपको प्रतिरूपण टोकन में बदलने के लिए डुप्लिकेट टोकन का उपयोग करना पड़ सकता है। फिर आप अपने थ्रेड पर टोकन को प्रतिस्थापित करने के लिए SetThreadToken का उपयोग कर सकते हैं।

आईएमएचओ यह वास्तव में "प्रतिरूपण" नहीं है, आप केवल प्रमाण-पत्रों का उपयोग कर रहे हैं, लेकिन यह आपको नेटवर्क संसाधनों को पारदर्शी रूप से आपके द्वारा प्रदान किए जाने वाले मनमानी उपयोगकर्ता नाम/पासवर्ड के रूप में उपयोग करने की अनुमति देता है।

संपादित करें: ओह हाँ, इस बात के बारे में जागरूक रहें कि इस प्रकार के कनेक्शन पर मैन-इन-द-बीच के खिलाफ कोई सुरक्षा नहीं है। ग्राहक विशेष रूप से सर्वर (आईपीएसईसी जैसे नायकों से कम) को दृढ़ता से प्रमाणित नहीं कर सकता है, इसलिए सिद्धांत में आप सर्वर पर जो कुछ भी बताते हैं उस पर भरोसा नहीं कर सकते हैं।

+0

वाह, एक महान दृष्टिकोण की तरह लगता है! मैंने कभी इसका इस्तेमाल करने का सोचा नहीं। मुझे यह देखने के लिए एक त्वरित परीक्षण दें कि यह – galets

+0

दोस्त काम करता है, उसने ऐसा किया! बहुत बहुत धन्यवाद, यह वही था जो मैं – galets

+0

के लिए देख रहा था! सुन के अच्छा लगा! –

3

लग रही है, तो सिद्धांत जाता है कि आपको लगता है कि InitializeSecurityContext में इस्तेमाल संभाल बनाता AcquireCredentialsHandle कार्य करने के लिए एक SEC_WINNT_AUTH_IDENTITY संरचना के रूप में साख गुजरती हैं। मैंने कभी विदेशी डोमेन पर यह कोशिश नहीं की और मुझे नहीं पता कि यह काम करता है या नहीं।

0

विंडोज एपीआई के माध्यम से इसे सीधे और भरोसेमंद करना असंभव के बगल में लगता है, साथ ही विंडोज नेटवर्क को "बस काम" करने के लिए दृश्यों के पीछे इतना काम करता है। इसके अलावा चीजों का प्रतिरूपण पक्ष केवल एक ही धागे के लिए काम करता है जिसे एपीआई कहा जाता है।

लेकिन ... आप एक अलग उपयोगकर्ता के तहत एक संपूर्ण कार्यक्रम चला सकते हैं ... जैसे कि जब आप कोई सेवा चलाते हैं।

तो आप विभिन्न मुख्य टोकन के तहत विभिन्न सेवाओं को चलाने के लिए अपने मुख्य कार्यक्रम में रजिस्ट्री को संपादित कर सकते हैं और अपने मुख्य एप्लिकेशन से उन प्रक्रियाओं के साथ संवाद करने के लिए आईपीसी/सॉकेट का उपयोग कर सकते हैं। अर्थात।आपके मुख्य ऐप का दुरुपयोग करने वाले विभिन्न उपयोगकर्ता (ओं) के अंतर्गत चलने वाले सहायक प्रक्रियाओं का एक संपूर्ण समूह (या पुनरारंभ करना और पुन: कॉन्फ़िगर करना)।

मुझे पता है कि यह एक हैक है लेकिन यह व्यवहार्य लगता है;)

+0

नहीं। व्यवहार्य नहीं असुरक्षित जंगल में मशीनों के लिए प्रतिरूपण टोकन प्राप्त करने में सक्षम होने की आवश्यकता है। आप अविश्वसनीय वन – galets

+0

से उपयोगकर्ता के रूप में कोई प्रोग्राम नहीं चला सकते हैं, इसलिए आप स्थानीय रूप से उपयोगकर्ता बना सकते हैं क्योंकि आपके पास क्लीयरएक्स्ट पासवर्ड है और जब आप पूरा कर लें तो उपयोगकर्ता को हटा दें। दूसरा विकल्प डीसीईआरपीसी/एमएसआरपीसी (http://en.wikipedia.org/wiki/MSRPC) सीधे बात कर रहा है लेकिन फिर आप प्रभावी रूप से सांबा के समान ट्रैक नीचे जा रहे हैं, लेकिन कम से कम आप वायरसहार्क का उपयोग अपने कार्यान्वयन की तुलना में कर सकते हैं सामान्य विंडो एपीआई के माध्यम से क्या होता है। क्या आप रिमोट मशीन पर सहायक कार्यक्रम स्थापित कर सकते हैं और उस अंत में प्रतिरूपण कर सकते हैं (और रिमोट हेल्पर प्रोग्राम से कनेक्ट करने के लिए जो भी प्रोटोकॉल आप पसंद करते हैं उसका उपयोग करें?)? –

+0

मुझे लगता है कि मैंने सेवा के बारे में आपकी टिप्पणी को ध्यान से नहीं पढ़ा है। मेरी पोस्ट को विशेष रूप से इस तथ्य से प्रेरित किया गया है कि जब मैं रिमोट विंडोज 2008 बॉक्स में सेवा स्थापित करने का प्रयास करता हूं, और मेरे पास पहले से ही एक शेयर मैप किया गया है, तो दूरस्थ एससीएम अभी भी शेयर को मैप करने के लिए इस्तेमाल किए गए खाते का उपयोग नहीं करेगा – galets

0

आप एक कमांड लाइन खोल सकते प्लेन यूज़रनेम और पासवर्ड का उपयोग कर ड्राइव मैप करें। फिर ड्राइव डिस्कनेक्ट:

net use m: \\machinename\share password /user:username 
... do stuff ... 
net use m: /delete 

http://technet.microsoft.com/en-us/library/cc756153(WS.10).aspx

+1

मैंने उल्लेख किया है कि यह समाधान काम नहीं करता है: "मुझे पता है कि WNetAddConnection का उपयोग \\ machinename \ ipc $, ... पर कनेक्शन स्थापित करने का एक तरीका है ..." - आप अनिवार्य रूप से वही सुझाव देते हैं बात – galets

+0

क्षमा करें, मैंने सोचा कि WNetAddConnection कुछ अलग था। – Robert

संबंधित मुद्दे