Desbordamiento de búfer - Imprimir "hola mundo"

2

Me pregunto cuál sería el código shell para imprimir simplemente "hola mundo" en la consola. Al probar las vulnerabilidades, creo que sería muy útil tener un código de shell para probar si el exploit funciona.

Además, una explicación simple sobre cómo compilar shellcode desde C en un formato utilizable (por ejemplo, barra invertida + caracteres hexadecimales) sería fantástica para poder generar fácilmente el shellcode para la carga útil.

¡Cualquier información útil, relacionada con la pregunta principal o no, es muy apreciada!

    
pregunta Arin 18.10.2016 - 06:00
fuente

2 respuestas

3

Si desea obtener shellcode rápido y sucio, use msfvenom . Si desea aprender algo y convertirse en un asistente, le sugiero lo siguiente:

1. Escriba un pequeño programa de ensamblador para su plataforma.

Te darás cuenta de que debes codificar de tal manera que no se generen bytes NULOS. Esto se puede hacer mediante el uso creativo de XOR y otros trucos.

;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. Utilice objdump para obtener los códigos de operación para las instrucciones:

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. Entonces tu código de shell será:

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. Beneficio

    
respondido por el AdHominem 18.10.2016 - 11:41
fuente
1

Depende de la plataforma de destino, sin embargo, para hacer su vida un poco más fácil, le recomiendo que consulte la herramienta MSFvenom de Metasploit, que le permite generar cargas útiles de diferentes tipos. Consulte el tutorial de seguridad ofensiva

    
respondido por el Colin Cassidy 18.10.2016 - 09:02
fuente

Lea otras preguntas en las etiquetas