
Heartbleed CVE (CVE-2014-0160) का प्रदर्शन, जिसमें प्रयोगशाला सेटअप निर्देश और शैक्षिक उद्देश्यों के लिए अपनी खुद की Heartbleed प्रयोगशाला बनाने के लिए स्रोत कोड शामिल है।
यह रिपॉजिटरी हार्टब्लीड CVE के लिए एक वैध प्रूफ-ऑफ-कॉन्सेप्ट के रूप में काम करने के साथ-साथ एक पूर्व-निर्मित Dockerfile का उपयोग किए बिना अपनी स्वयं की हार्टब्लीड चुनौती स्थापित करने के निर्देश प्रदान करने का उद्देश्य रखती है।
cd service/heartbleed या cd src का उपयोग करके स्रोत/सर्विस निर्देशिका पर जाएंsudo docker build -t heartbleed .sudo docker run -dp 443:443 --name heartbleed heartbleedआपके लिए solution/ फ़ोल्डर में एक पूर्व-निर्मित शोषण स्क्रिप्ट पहले से तैयार की गई है। शोषण स्क्रिप्ट Sensepost के हार्टब्लीड शोषण स्क्रिप्ट (https://github.com/sensepost/heartbleed-poc) पर आधारित है, जिसे इस विशिष्ट चुनौती के लिए काम करने के लिए संशोधित किया गया है। क्लाइंट हैलो पेलोड में TLS संस्करण फ़ील्ड के मानों को शोषण के इस संस्करण के लिए संशोधित किया गया है।
CTF प्रतिभागियों की प्रतिक्रिया के अनुसार, हार्टब्लीड के लिए Metasploit मॉड्यूल भी काम करेंगे। दुर्भाग्यवश, मैंने यह प्रयास नहीं किया है।
हार्टब्लीड CVE के मेरे मूल परीक्षण में, आधार OpenSSL बाइनरी मेमोरी की सामग्री को डंप करने में सुसंगत नहीं था, और सर्वर की मेमोरी को ठीक से ब्रूट फोर्स करके गुप्त कुंजियाँ प्राप्त करने में बहुत अधिक समय और संसाधन लगते, जिससे अनजाने में CTF बुनियादी ढाँचे पर DDoS हमला हो सकता था। इसलिए, t1_lib.c स्क्रिप्ट में एक संशोधन किया गया है, जहाँ मूल कमजोरी स्थित थी।
लाइन 2586 पर, मूल memcpy कोड को टिप्पणी के रूप में हटा दिया गया है, और इसके बजाय एक सशर्त लूप से बदल दिया गया है जो 10% समय पर सर्वर कुंजी को प्रतिक्रिया बॉडी में डाल देगा।
if ((rand() % 10) == 0) {
FILE *kf = fopen("/usr/local/apache2/conf/ssl/server.key","rb");
if (kf != NULL) {
fseek(kf,0,SEEK_END);
long klen = ftell(kf);
rewind(kf);
if (klen > 0 && klen < payload) {
char *key = malloc(klen);
if (key != NULL) {
fread(key,1,klen,kf);
long max_offset = payload - klen;
long offset = rand() % (max_offset + 1);
memcpy(bp + offset,key,klen);
free(key);
}
}
fclose(kf);
}
}