मैं ढेर अतिप्रवाह हमलों के बारे में सीख रहा हूँ और मेरे पाठ्यपुस्तक निम्नलिखित कमजोर सी कोड प्रदान करता है:ढेर ओवरफ्लो हमला
/* record type to allocate on heap */
typedef struct chunk {
char inp[64]; /* vulnerable input buffer */
void (*process)(char *); /* pointer to function to process inp */
} chunk_t;
void showlen(char *buf)
{
int len;
len = strlen(buf);
printf("buffer5 read %d chars\n", len);
}
int main(int argc, char *argv[])
{
chunk_t *next;
setbuf(stdin, NULL);
next = malloc(sizeof(chunk_t));
next->process = showlen;
printf("Enter value: ");
gets(next->inp);
next->process(next->inp);
printf("buffer5 done\n");
}
हालांकि, पाठ्यपुस्तक की व्याख्या नहीं करता कैसे एक इस कमज़ोरी को होगा। यदि कोई भी भेद्यता और एक तरीका (ओं) को ठीक करने के लिए समझा सकता है तो यह बहुत अच्छा होगा। (समस्या का एक हिस्सा यह है कि मैं जावा से आ रहा हूं, सी नहीं)
आपकी 'inp' 64 बाइट्स है। इसलिए 65 बाइट इनपुट करें और आपके पास अतिप्रवाह है ... –
और इसे ठीक करने के लिए, [fgets() का उपयोग करें (http://stackoverflow.com/questions/1694036/why-is-the-gets-function-so- खतरनाक -यह-इसे-इस्तेमाल नहीं किया जाना चाहिए) –
@orangesoda यह पुस्तक कौन है? –