2011-05-10 17 views
6

मैं कई क्ष/एक इतने पर सत्र निर्धारण/अपहरण और कई लोगों के जोखिम के बारे में ON और दूसरों php.ini निर्देशों को php.ini निर्देशों session.use_only_cookies की तरह बदलने के लिए सुझाव देते हैं सर्वर बनाने के लिए पढ़ने के लिए अधिक सुरक्षित ...सरल सत्र निर्धारण हमले

मैं अपनी आँखें के साथ देखने के लिए अगर मैं एक साधारण हमले परिदृश्य को दोहराने सकता है चाहता था PHP5 + अपाचे पर आधारित मेरे लोकहोस्ट सर्वर पर।

मेरे स्थानीयहोस्ट session.use_only_cookies पर OFF है, इसलिए मेरे स्थानीयहोस्ट के ऊपर/ऊपर के अनुसार मूल रूप से असुरक्षित है, जो मुझे परीक्षण करने की आवश्यकता है।

मैं 1 कैसे एक सत्र निर्धारण हमले perfomed है पर इस सरल लेख पढ़ें:

आदेश आलेख में वर्णित परिदृश्य को दोहराने के लिए में, मैं दो बहुत ही सरल PHP स्क्रिप्ट बनाया (कोड से कम है), लेकिन हमले से काम नहीं करता है, यह मैं क्या किया है:

  1. मैं करने के लिए कहते हैं कि (मैलोरी के रूप में दर्शाना) ऐलिस:

  2. तब मैं http://localhost/login.php?PHPSESSID=mysessionid

  3. मेरी स्थानीय होस्ट सर्वर के व्यवस्थापक के रूप में मैं सत्र देखा सर्वर डिस्क पर बनाया जा रहा करने के लिए चला गया (ऐलिस होने का नाटक) "हैलो जाएँ http://localhost/login.php?PHPSESSID=mysessionid जाना" (यह एक फ़ाइल के रूप में cerated है sess_ mysessionid नाम के साथ), इसलिए मैंने सोचा: अच्छा, यह काम कर रहा है !!!

  4. तो मैं में

  5. ऐलिस लॉग क्रेडेंशियल

    के रूप में "जो" में प्रवेश करने में लॉग इन किया है और वह insession_ok.php पर पुनः निर्देशित है, और इस बिंदु पर (ऊपर विकिपीडिया लेख के अनुसार) (ऐलिस होने का नाटक) मैलोरी चाहिए insession_ok.php को भी देखने में सक्षम हो क्योंकि उन्होंने सत्र को mysessionid, पर ठीक किया है, लेकिन यह सच नहीं है, क्योंकि जब सर्वर पर sess_vdshg238cnfb4vt7ahpnp1p522 पर एक नया सत्र लॉग होता है, तो मुझे इस बात पर समझ में नहीं आता कि मैलोरी को कैसे ठीक किया जाना चाहिए सत्र में हाइजैक, जैसा लेख में बताया गया है ???


login.php

<?php 
session_start(); 

//if user credentials are ok, let's put him in session 
if(@$_POST['usr'] === 'joe') 
    $_SESSION['in_session'] = TRUE; 

//if user is already logged in, let's redirect him to the account page "insession_ok.php" 
if(isset($_SESSION['in_session'])) 
{ 
    $webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/insession_ok.php';  
    header("Location: " . $webpage, TRUE, 302); 
}  
?> 
<form method="POST" action="login.php"> 
    <input name="usr" type="text"> 
    <input type="submit" value="Submit"> 
</form>  
<script type="text/javascript"> 
    alert(document.cookie); //to view cookies 
</script> 

insession_ok.php

<?php 
session_start(); 
if(@$_SESSION['in_session'] === TRUE) 
    echo "in session ok"; 
else //user is not in session cause he did not login, let's redirect him to login page 
{ 
    $webpage = 'http://' . $_SERVER['HTTP_HOST'] . '/login.php';  
    header("Location: " . $webpage, TRUE, 302); 
} 
?> 

कोई सुराग/विचार हमेशा सराहना की जाती है!

उत्तर

6

इस तरह से मैंने हमेशा सत्र निर्धारण हमलों का परीक्षण करने के लिए उपयोग किया है। यह HTTP प्रोटोकॉल के ज्ञान की आवश्यकता है, लेकिन यदि आप काफी अच्छा सत्र निर्धारण को देखने के लिए कर रहे हैं, HTTP का एक छोटा सा आप को डराने नहीं करना चाहिए :)

सत्र निर्धारण कि मैं देख रहा हूँ के संस्करण यहां एक सार्वजनिक कंप्यूटर का विचार है, जिसमें आप लाइब्रेरी में जाते हैं, www.myawesomesite.com जैसी साइट पर नेविगेट करते हैं, और बिना लॉग इन किए, आप सत्र आईडी को लिखते हैं जो आपको सौंपा गया था।

फिर आप किसी को www.myawesomesite.com में लॉग इन करने के लिए छोड़ दें और प्रतीक्षा करें। जैसे ही वे लॉग इन करते हैं, सार्वजनिक कंप्यूटर पर उपयोग की जाने वाली कुकी पर मैन्युअल रूप से सत्र को अपने कंप्यूटर पर बदलें। सर्वर तब सोचता है कि आप प्रमाणित उपयोगकर्ता हैं।

स्थानीयहोस्ट पर इसका परीक्षण करने के लिए, हम प्रभाव देखने के लिए दो अलग-अलग ब्राउज़रों का उपयोग कर सकते हैं, क्योंकि ब्राउज़र आमतौर पर कुकीज़ साझा नहीं करते हैं।

यहाँ यह करने के लिए कदम हैं:

  • Chrome खोलें और localhost पर जाएँ। यह सार्वजनिक कंप्यूटर का प्रतिनिधित्व करेगा। सत्र आईडी का निरीक्षण करें और इसे लिखें। आप अनुरोध को देखने के लिए फिडलर जैसे प्रोग्राम का उपयोग करके या कुकीज़ देखने के लिए वेब डेवलपर जैसे प्लगइन का उपयोग कर ऐसा कर सकते हैं। कुकी मान PHPSESSID=46l11p0vt81ouo2hkt0ck8ij76

  • फ़ायरफ़ॉक्स खोलें और localhost पर नेविगेट करना चाहिए। यह हमलावर के कंप्यूटर का प्रतिनिधित्व करेगा। वेब डेवलपर प्लगइन का उपयोग करके, PHPSESSID कुकी को उस मान पर बदलें जिसे आपने क्रोम से लिखा था।

  • क्रोम में, ऐलिस के रूप में लॉग इन करें। यह पीड़ित लॉगिंग का प्रतिनिधित्व करेगा।

  • फ़ायरफ़ॉक्स में वापस, "ताज़ा करें" पर क्लिक करें, या केवल प्रमाणित पृष्ठ पर नेविगेट करें। यदि आप सत्र निर्धारण के लिए अतिसंवेदनशील हैं, तो आपको लॉगिन को छोड़कर, फ़ायरफ़ॉक्स पर ऐलिस के रूप में लॉग इन होना चाहिए।

इसके लिए फिक्स सरल है (जैसा कि मुझे यकीन है कि आपने देखा है)। जैसे ही कोई उपयोगकर्ता आपके कोड में प्रमाणित करता है, बस session_regenerate_id() पर कॉल करें। यह किसी भी सत्र आईडी को अमान्य करता है जिसका उपयोग लॉगिन से पहले किया गया था और इसका मतलब है कि ऑस्कर को अब के बाद अपना सत्र आईडी चोरी करने का प्रयास करना होगा (लेकिन लॉगआउट करने से पहले), जो करना बहुत मुश्किल है।

1

session.use_only_cookies अक्षम होने के अलावा, आपको यह सुनिश्चित करने की भी आवश्यकता है कि वर्तमान में कोई वैध सत्र आईडी कुकी नहीं है क्योंकि PHP $_GET से अधिक पसंद करेगा। वास्तव में, ऐलिस के लॉगिन के बाद एक अलग सत्र आईडी होने का कारण शायद इसलिए है क्योंकि ऐलिस के पास पहले से ही एक सत्र आईडी के साथ एक वैध कुकी है जिसका उपयोग URL के माध्यम से प्रदान की गई सत्र आईडी के बजाय किया जाता है। कुकीज़ को टालने के लिए आप अपनी कुकीज़ को अक्षम भी कर सकते हैं और session.use_trans_sid सक्षम कर सकते हैं।

फिर आपके शोषण को अपेक्षा के अनुसार काम करना चाहिए।

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