php सुरक्षा के साथ ASPXAUTH कुकी को डिक्रिप्ट करना=मान्यता




asp.net encryption (3)

मुझे नहीं पता है कि एन्क्रिप्शन एनएटी AuthCookies में कैसे किया जाता है, लेकिन मैं जवाब देने की कोशिश कर सकता हूं।

एन्क्रिप्शन मानते हुए एईएस सीबीसी -4 मोड में, बेतरतीब ढंग से उत्पन्न आईवीएस के साथ, आपको पहली बार पता होना चाहिए कि चतुर्थ कहाँ है।

आप जो कोड स्निपेट दिखाते हैं वह काम नहीं कर सकता, क्योंकि आप यादृच्छिक IV (जो गलत होगा) तैयार कर रहे हैं। ऐसा कहा जा रहा है, भले ही आपको चौथा दोष मिल जाए, सीबीसी मोड में आपके पास केवल अपने डिक्रिप्टेड सिफरटेक्स्ट "विकृत" के पहले 16 बाइट होंगे और शेष ठीक से डिक्रिप्ट हो जाएंगे - आप यह जान सकते हैं कि क्या आप यह जानते हैं कि आप क्या हैं बाकी को सही ढंग से कर रहे हैं व्यवहार में जब यादृच्छिक IVs का उपयोग करते हैं, तो यह बहुत संभावना है कि यह सिफरटेक्स्ट के लिए तैयार है। जांचने के लिए कि क्या यह सही है, आप कोशिश कर सकते हैं कि लेनन (साइफरटेक्स्ट) = लेनन (सादा टेक्स्ट) + 16. इसका मतलब यह होगा कि सबसे पहले 16 बाइट्स आपके IV हैं (और इसलिए यह प्रयास करने से पहले सिफरटेक्स्ट से हटा दिया जाना चाहिए इसे डिक्रिप्ट करें)

इसके अलावा आपके कोड स्निपेट पर, ऐसा लगता है कि आप एक एस्की-स्ट्रिंग के रूप में कुंजी का उपयोग कर रहे हैं, जबकि यह एक बाइट सरणी होना चाहिए। प्रयत्न:

define('ASP_DECRYPT_KEY',hex2bin('0BC95D748C57F6162519C165E0C5DEB69EA1145676F453AB93DA9645B067DFB8'));

इसके अलावा, यह एक 32 बाइट कुंजी है, इसलिए आपको एईएस -256 का उपयोग करना होगा। मुझे नहीं पता है कि लेखक कैसे दिखता है, लेकिन अगर यह बेस 64 एन्कोडेड है, तो आपको इसे स्पष्ट रूप से पहली बार डीकोड करना होगा।

उम्मीद है की यह मदद करेगा!

नोट: मैं महत्वपूर्ण उत्पादन कोड के लिए ऐसा करने के लिए दोबारा नहीं कर रहा हूं - हालांकि - क्योंकि बहुत सी चीजें हैं जो गलत हो सकती हैं यदि आप यहां अपना खुद का डिक्रिप्शन रूटीन लागू करने की कोशिश करते हैं, जैसा कि आप यहां कर रहे हैं। विशेष रूप से, मुझे लगता है कि कहीं एक मैक टैग होना चाहिए जो आपको डिक्रिप्शन करने से पहले जांचना होगा, लेकिन कई अन्य चीजें हैं जो गलत क्रिप्टो को कार्यान्वित करने में गलत हो सकती हैं।

कुछ समय के लिए मैं एएसपी। एपीएक्सएयूटीयूआई कुकी को समझने की कोशिश कर रहा हूं और इसे PHP का उपयोग करके डिक्रिप्ट कर रहा हूं। मेरे कारण बहुत बड़े हैं और मुझे ऐसा करने की ज़रूरत है, कोई विकल्प नहीं है। PHP में अभी तक मैं सफलतापूर्वक इस कुकी से डेटा को पढ़ने में कामयाब रहा हूं, लेकिन मुझे एन्क्रिप्ट किए जाने के दौरान ऐसा नहीं लग सकता। वैसे भी, यह यहाँ जाता है ...

पहले आपको अपने सर्वर Web.config फ़ाइल को बदलने की ज़रूरत है (सुरक्षा को सत्यापन के लिए सेट किया जाना चाहिए):

    <authentication mode="None">
        <forms name=".ASPXAUTH" protection="Validation" cookieless="UseCookies" timeout="10080" enableCrossAppRedirects="true"/>
    </authentication>

फिर उसी डोमेन पर PHP स्क्रिप्ट में, आप डेटा को पढ़ने के लिए निम्न कार्य कर सकते हैं, यह एक बहुत ही बुनियादी उदाहरण है, लेकिन यह प्रमाण है:

$authCookie = $_COOKIE['_ASPXAUTH'];
echo 'ASPXAUTH: '.$authCookie.'<br />'."\n";//This outputs your plaintext hex cookie
$packed = pack("H*",$authCookie);
$packed_exp = explode("\0",$packed);//This will separate your data using NULL
$random_bytes = array_shift($packed_exp);//This will shift off the random bytes
echo print_r($packed_exp,TRUE); //This will return your cookies data without the random bytes

यह कुकी को तोड़ता है, या कम से कम अनएन्क्रिप्ट किए गए डेटा:

अब मुझे पता है कि मैं डेटा प्राप्त कर सकता हूं, मैंने अपने web.config से 'protection = "validation"' स्ट्रिंग निकाल दिया और मैंने इसे PHP एमक्रिप्शन का उपयोग करके डिक्रिप्ट करने की कोशिश की मैंने अनगिनत तरीकों की कोशिश की है, लेकिन यहां एक बढ़िया उदाहरण है (जो असफल रहता है) ...

define('ASP_DECRYPT_KEY','0BC95D748C57F6162519C165E0C5DEB69EA1145676F453AB93DA9645B067DFB8');//This is a decryption key found in my Machine.config file (please note this is forged for example)
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, ASP_DECRYPT_KEY, $authCookie, MCRYPT_MODE_CBC, $iv);//$authCookie is the pack()'d cookie data

यह हालांकि विफल रहता है मैंने सभी ज़ीरो @ 16 बाइट्स के साथ चौथाई के रूपांतरों की कोशिश की है। मैंने अलग राइंडल आकार (128 बनाम 256) की कोशिश की है मैंने base64_decode () आईआईएन की कोशिश की है, कुछ भी काम करने लगता है मैंने इस स्टैकेवर्फ फ़्लो पोस्ट को यहां पाया है और कुंजी / iv के बदलावों का उपयोग करना शुरू कर दिया है जो shA256 का उपयोग करते हुए बनाया गया है, लेकिन वह वास्तव में या तो काम नहीं कर रहा है

किसी को भी एक सुराग है कि मुझे क्या करना चाहिए?


मुझे पता है कि PHP में कुछ डिक्रिप्ट करने के लिए क्या दर्द है। एनईटी में एन्क्रिप्ट किया गया है और इसके विपरीत।

मुझे अपने आप को रिजेंडेल एल्गोरिदम (इसे दूसरी भाषा से अनुवादित) को समाप्त करना पड़ा।

यहां एल्गोरिदम के स्रोत कोड का लिंक है: http://pastebin.com/EnCJBLSY

स्रोत कोड के अंत में कुछ उपयोग उदाहरण है।

लेकिन .NET पर, आपको एन्क्रिप्ट करने पर शून्य पैडिंग का उपयोग करना चाहिए। यह भी ईसीबी मोड के साथ परीक्षण, मुझे यकीन नहीं है कि सीबीसी काम करता है

शुभकामनाएँ और उम्मीद है कि यह मदद करता है

संपादित करें: एल्गोरिथ्म एन्क्रिप्टेड जब हेक्साडेसिमल स्ट्रिंग देता है, और यह भी हेक्साडेसिमल स्ट्रिंग जब डिक्रिप्टिंग की अपेक्षा करता है।


मैं समझता हूं कि ओपी के लिए संभव नहीं हो सकता है लेकिन अन्य लोगों के लिए यहां इस मार्ग की ओर बढ़ना एक साधारण विकल्प है।

  1. एक विधि के साथ एक शुद्ध वेब सेवा बनाएँ:

    सार्वजनिक प्रपत्रऑअटिफिकेशनटिकेट डिक्रिप्टफॉर्मअथकुकी (स्ट्रिंग टिकट)
    {
    वापसी फॉर्म। प्रमाणीकरण। डिक्रिप्ट (टिकट);
    }

  2. PHP से वेब सेवा को पास करें:

    $ authCookie = $ _COOKIE ['। ASPXAUTH'];
    $ soapClient = नया सोप क्लाइंट ("http: // localhost /Service1.svc?wsdl");
    $ params = सरणी (
    "टिकट" => $ औथकुकी
    );
    $ परिणाम = $ soapClient-> डिक्रिप्टफॉर्मअटकुकी ($ params);





rijndael