Overflow buffer, errore SIGV all'indirizzo errato

0

Sto cercando di capire perché il mio buffer overflow non funzionerà. Ho lottato con questo per alcuni giorni, quindi ho pensato che fosse giunto il momento di chiedere ai professionisti. Ho solo recentemente iniziato a capire il concetto di attacchi di overflow del buffer con una slitta NOP.

Questo è per una sfida. Nessun spoiler per favore, ma i puntatori utili saranno molto apprezzati.

Il mio problema è questo:

Sono in grado di eseguire un comando Perl come questo NOP ... Shellcode ... *mempntr funziona come previsto quando gli do un puntatore arbritario.

  • Dove le cose blu sono le mie NOP
  • Il rosso è il mio codice shell
  • Il giallo evidenziato è il mio mempntr
Program received signal SIGSEGV, Segmentation fault.
0xaaaaaaaa in ?? ()

Anche questo è come previsto.

Prova con mempntr corretto

Ora, quando provo a cambiare mempntr in qualcosa a cui voglio puntarlo, come a metà della NOP, per esempio la posizione 0xffffd580 si comporta in modo strano.

Al punto di interruzione in leave Verifico il% co_de salvato

(gdb) i f
Stack level 0, frame at 0xffffd5c0:
eip = 0x80484b1 in main; saved eip = 0xffffd580
Arglist at 0xffffd5b8, args:
Locals at 0xffffd5b8, Previous frame's sp is 0xffffd5c0
Saved registers:
ebp at 0xffffd5b8, eip at 0xffffd5bc

Tuttavia quando I eip o c ho un SEGFUALT in una posizione strana.

Program received signal SIGSEGV, Segmentation fault.
0xffffd5a7 in ?? ()

Sto cercando una risposta che potrebbe far luce su questo, o indirizzarmi verso una risorsa in cui posso imparare cosa sta succedendo.

    
posta Ludisposed 22.11.2017 - 16:46
fonte

1 risposta

2

Quella posizione non è strana, è proprio nel mezzo del tuo shellcode. Per prima cosa verifica che il tuo shellcode non sia rotto. Lo smontaggio di quel codice rivela questo:

0x00000000: push 0xb
0x00000002: pop eax
0x00000003: cdq 
0x00000004: push edx
0x00000005: push 0x702d
0x00000009: mov ecx, esp
0x0000000b: push edx
0x0000000c: push 0x68
0x0000000e: das 
0x0000000f: bound esp, qword ptr [ecx + 0x73]
0x00000012: push 0x6e69622f
0x00000017: mov dword ptr [ebp + 0x33], esp
0x0000001a: push edx
0x0000001b: push ecx
0x0000001c: push ebx
0x0000001d: mov ecx, esp
0x0000001f: int 0x80

Sei sicuro che questo è ciò che vuoi davvero ottenere con lo shellcode?

In secondo luogo, assicurati che qualsiasi istruzione del tuo shellcode non sovrascriva parti di se stesso. Se il puntatore dello stack è giusto dopo lo shellcode, le istruzioni push potrebbero rovinarlo dalla coda, lasciando istruzioni non valide da eseguire.

    
risposta data 23.11.2017 - 05:20
fonte

Leggi altre domande sui tag