मैं एक ढेर अतिप्रवाह हमले की मूल बातें सीखने की कोशिश कर रहा हूं। हम ज्यादातर हमले के आधार पर भ्रष्टाचार या खंड मेटाडेटा में संशोधन का उपयोग करने में रूचि रखते हैं, लेकिन मैं अन्य सुझावों के लिए भी खुला हूं। मुझे पता है कि शोषण का मेरा लक्ष्य printf()
फ़ंक्शन पॉइंटर को challenge()
फ़ंक्शन पॉइंटर के साथ ओवरराइट करना चाहिए, लेकिन मुझे लगता है कि उस लेखन को कैसे प्राप्त किया जाए। मैं कोड का निम्न भाग जो मैं फायदा उठाने के लिए चाहते हैं, जो glibc 2.11.2
से malloc
उपयोग कर रहा है है: जाहिर हैमनमाना डेटा लिखने के लिए एक ढेर ओवरफ्लो का उपयोग करें
void challenge()
{
puts("you win\n");
}
int main(int argc, char **argv)
{
char *inputA, *inputB, *inputC;
inputA = malloc(32);
inputB = malloc(32);
inputC = malloc(32);
strcpy(inputA, argv[1]);
strcpy(inputB, argv[2]);
strcpy(inputC, argv[3]);
free(inputC);
free(inputB);
free(inputA);
printf("execute challenge to win\n");
}
, एक आवंटित हिस्सा के मेटाडाटा का एक वास्तविक अधिलेखित को प्राप्त करने तुच्छ है। हालांकि, मैं किसी भी मानक तकनीक का उपयोग करके इस कोड का शोषण करने का कोई तरीका नहीं ढूंढ पाया। मैंने पढ़ा है और से तकनीक को लागू करने का प्रयास किया है:
- कागज: Heap Overflows
- पर w00w00 हालांकि कागज बहुत स्पष्ट है,
unlink
तकनीक कुछ समय के लिए अप्रचलित हो गया है।
- पर w00w00 हालांकि कागज बहुत स्पष्ट है,
- Malloc Maleficarum.txt
- इस पत्र w00w00 दिनों से फायदा उठाने की तकनीक पर फैलता है, और glibc के नए संस्करण के लिए खातों। हालांकि, मुझे नहीं मिला है कि पेपर में विस्तृत 5 तकनीकों को देखते हुए, ऊपर दिया गया कोड उन तकनीकों के लिए किसी भी शर्त से मेल खाता है।
- Understanding the Heap By Breaking it(pdf)
- पीडीएफ कैसे ढेर काम करता है की एक बहुत अच्छी समीक्षा देता है, लेकिन डबल मुक्त तकनीक पर केंद्रित है।
मैं मूल रूप से, inputC के लिए खंड के आकार मूल्य जोड़ तोड़ इतना है कि यह वापस inputC हिस्सा के सिर की ओर इशारा करके इस कोड का फायदा उठाने की कोशिश की। जब यह काम नहीं करता, तो मैंने इनपुट बी के हिस्से में आगे की ओर इशारा करने की कोशिश की। यही वह समय था जब मुझे एहसास हुआ कि नया ग्लिबैक आकार मूल्य पर एक सैनिटी चेक करता है।
उपयोगकर्ता एक मुफ्त का लाभ उठाने के लिए एक शोषण कैसे तैयार कर सकता है, मानते हैं कि उसके पास आवंटित मूल्यों के लिए आवंटित खंड के मेटाडेटा को संपादित करने की क्षमता है, और उपयोगकर्ता इसे जीओटी में किसी मान को ओवरराइट करने या किसी अन्य मनमानी पते पर लिखने की क्षमता रखता है ?
नोट: जब मैं 'मनमानी पता' लिखता हूं, तो मैं समझता हूं कि स्मृति पृष्ठ केवल पढ़ने या संरक्षित किए जा सकते हैं, मेरा मतलब है कि एक ऐसा पता जिसे मैं मान सकता हूं कि मैं लिख सकता हूं।
क्या आप स्पष्ट कर सकते हैं कि आप किस मेटा-डेटा का जिक्र कर रहे हैं? – ose
एक ढेर अतिप्रवाह हमले से अनुमानित परिणाम प्राप्त करना (केवल ऐप को क्रैश करना) लगभग असंभव है। असल में आपको ढेर में सामान के आदेश को जानने की जरूरत है, और यह केवल कुछ सीमित परिस्थितियों में अनुमानित है। सबसे अच्छी बात यह है कि आप ढूंढने के लिए कुछ प्रकार की "पिक" योजना का उपयोग कर सकते हैं, लेकिन फिर इसे खोजने के लिए एक विश्वसनीय "हस्ताक्षर" होना चाहिए। आपके मामले में आप "जीतने के लिए चुनौती का निष्पादन" टेक्स्ट खोज सकते हैं, लेकिन यह टेक्स्ट भी ढूंढने में मदद नहीं करेगा, क्योंकि यह सुरक्षित स्टोरेज में होने की संभावना है। –
@ose मैंने इसे थोड़ा और स्पष्ट करने के लिए प्रश्न संपादित किया है। मैं आवंटित मेटाडेटा को संशोधित करने में रूचि रखता हूं (या मुफ्त, यदि यह संभव है) तोड़।आकार, ए | एम | पी झंडे की तरह चीजें, या उस खंड के विलय के लिए आगे और पीछे पॉइंटर्स। – amccormack