Overflow buffer - Stampa "Ciao mondo"

2

Mi chiedo quale sia lo shellcode per stampare semplicemente "Hello World" sulla console. Quando si testano le vulnerabilità, penso che sarebbe molto utile avere shellcode per verificare se l'exploit funziona.

Inoltre, una semplice spiegazione su come compilare lo shellcode da C in un formato utilizzabile (ad esempio backslash + caratteri esadecimali) sarebbe fantastica, così posso facilmente generare lo shellcode da eseguire per il payload.

Qualsiasi informazione utile, relativa alla domanda principale o no, è molto apprezzata!

    
posta Arin 18.10.2016 - 06:00
fonte

2 risposte

3

Se vuoi ottenere lo shellcode veloce e sporco, usa msfvenom . Se vuoi imparare qualcosa e diventare un mago, ti suggerisco quanto segue:

1. Scrivi un piccolo programma di assemblaggio per la tua piattaforma.

Ti accorgerai che devi codificare in modo tale da non produrre nessun byte NULL. Questo può essere fatto con l'uso creativo di XOR e altri trucchi.

;hello.asm
[SECTION .text]

global _start


_start:

    jmp short ender

    starter:

    xor eax, eax    ;clean up the registers
    xor ebx, ebx
    xor edx, edx
    xor ecx, ecx

    mov al, 4       ;syscall write
    mov bl, 1       ;stdout is 1
    pop ecx         ;get the address of the string from the stack
    mov dl, 5       ;length of the string
    int 0x80

    xor eax, eax
    mov al, 1       ;exit the shellcode
    xor ebx,ebx
    int 0x80

    ender:
    call starter    ;put the address of the string on the stack
    db 'hello'

2. Utilizza objdump per ottenere gli opcode per le istruzioni:

hello:     file format elf32-i386


Disassembly of section .text:

08048080 <_start>:
 8048080:       eb 19                   jmp    804809b

08048082 <starter>:
 8048082:       31 c0                   xor    %eax,%eax
 8048084:       31 db                   xor    %ebx,%ebx
 8048086:       31 d2                   xor    %edx,%edx
 8048088:       31 c9                   xor    %ecx,%ecx
 804808a:       b0 04                   mov    $0x4,%al
 804808c:       b3 01                   mov    $0x1,%bl
 804808e:       59                      pop    %ecx
 804808f:       b2 05                   mov    $0x5,%dl
 8048091:       cd 80                   int    $0x80
 8048093:       31 c0                   xor    %eax,%eax
 8048095:       b0 01                   mov    $0x1,%al
 8048097:       31 db                   xor    %ebx,%ebx
 8048099:       cd 80                   int    $0x80

0804809b <ender>:
 804809b:       e8 e2 ff ff ff          call   8048082 
 80480a0:       68 65 6c 6c 6f          push   $0x6f6c6c65

3. Quindi lo shellcode sarà:

char code[] = "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x05\xcd"\
              "\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x68\x65\x6c\x6c\x6f";

4. Utile

    
risposta data 18.10.2016 - 11:41
fonte
1

Dipende dalla piattaforma di destinazione, tuttavia per semplificarti la vita ti consiglio di esaminare lo strumento MSFvenom di Metasploit che ti consente di generare payload di diversi tipi. Vedi il tutorial Offensive Security

    
risposta data 18.10.2016 - 09:02
fonte

Leggi altre domande sui tag