Nel buffer overflow exploit, 0x20 (carattere spazio) non visualizzato in memoria e sostituito da null

2

La situazione: Attualmente sto lavorando su shellcode (ho modificato il codice assembly da Project Shellcode) che esegue "cmd.exe / c calc.exe". Lo shellcode funziona perfettamente. Tuttavia, quando uso lo shellcode durante un exploit di overflow del buffer, il byte 0x20 (carattere spazio) nella stringa viene sostituito con un byte null. Non riesco a trovare una buona spiegazione del perché questo sta accadendo. Il seguente è il codice assembly:

; chiama calc.exe. Modificato dal link [SECTION .text]

BITS 32

global _start

_start:

jmp short GetCommand

CommandReturn:    pop ebx; ebx ora punta alla stringa    xor eax, eax; clear eax    spingere eax; premere null sullo stack    spingere ebx; spingere la stringa di comando sullo stack    mov ebx, 0x7c86114d; posiziona l'indirizzo winExec in ebx    chiama ebx; chiama WinExec ({cmd}, 0)

xor eax, eax; rimuovere il valore di ritorno di WinExec    push eax; push null sullo stack come valore del parametro    mov ebx, 0x7c81caa2; inserire l'indirizzo ExitProcess in ebx
   chiama ebx; chiama ExitProcess (0)

GetCommand:    chiama CommandReturn    db 'cmd.exe / c calc', 0; lo spazio è sostituito da null.

Ciò che so finora:

  1. So che non ho problemi di spazio, perché ho inserito una stringa più lunga senza spazi e viene comunque visualizzata in memoria.
  2. So che lo shellcode funziona perché l'ho provato inserendolo direttamente in un buffer e chiamando il buffer come una chiamata di funzione in C.

Quello che segue è quello che vedo nella finestra in alto a sinistra di Immunity:

  1. Indirizzi 0012FFB3-0012FFCB è lo shellcode
  2. Questa è la mia diapositiva NOP.
  3. A partire dall'indirizzo 0012FFD0 dovrebbe essere "cmd.exe / c calc.exe", ma è solo "cmd.exe", vedo all'indirizzo 0012FFEB che alla fine c'è un nullo invece di 0x20.
posta Sandra E 20.10.2014 - 18:58
fonte

1 risposta

1

Oh mio - so perché questo sta accadendo: è perché nella mia applicazione vulnerabile test, sto usando fscanf per leggere la stringa di input dannoso da un file, e questo spazio nella stringa esadecimale verrà interrotto da fscanf.

Secondo ( link ): "la funzione leggerà e ignorerà qualsiasi carattere di spaziatura rilevato prima del prossimo carattere non di spazi bianchi (i caratteri di spazi bianchi includono spazi, caratteri di nuova riga e caratteri di tabulazione - vedi isspace). "

Nota: sto leggendo il flusso solo una volta nell'applicazione di test vulnerabile.

    
risposta data 25.10.2014 - 16:58
fonte

Leggi altre domande sui tag