2017-06-30 8 views
1

Wie kann ich das Eip-Register auf Speicheradresse zeigen, um meine Shellcode im folgenden Programm mit Pufferüberlauf auszuführen?Pufferüberlauf Änderung Rücksendeadresse C - ohne Haupt

static int __init onload(void) 
{ 
    void function1(char *arg1) 
    { 
     char buffer[10]; 
     strcpy(buffer, arg1); 
    } 

    char *kernel_version = kmalloc(MAX_VERSION_LEN, GFP_KERNEL); 
    printk(KERN_WARNING "Hello world!\n"); 
    // printk(KERN_EMERG "Version: %s\n",  acquire_kernel_version(kernel_version)); 

    find_sys_call_table(acquire_kernel_version(kernel_version)); 

    printk(KERN_EMERG "Syscall table address: %p\n", syscall_table); 
    printk(KERN_EMERG "sizeof(unsigned long *): %zx\n", sizeof(unsigned long*)); 
    printk(KERN_EMERG "sizeof(sys_call_table) : %zx\n", sizeof(syscall_table)); 

    if (syscall_table != NULL) { 
     //function1("AAAAAAAAAAAAAAAAAAAAAAAAAAAB7F41B63"); 

     original_write = (void *)syscall_table[__NR_write]; 
     syscall_table[__NR_write] = &new_write; 
     write_cr0 (read_cr0() | 0x10000); 
. 
. 
so on... 
} 

Hier ist ein Link auf den Code (https://gitlab.tnichols.org/tyler/syscall_table_hooks/blob/master/src/hooks.c) und oberhalb ich die Position angezeigt, wo ich brauche einen Pufferüberlauf und Punkt zu meiner Rückkehr-Adresse zu erstellen.

Ich versuchte den obigen Code, um den Puffer mit 26 A's überlaufen und setzen Sie dann meine Rückkehr Adresse Punkt auf "0xB7F41B63", aber es ersetzt nicht meine Rücksendeadresse. Auch mein Code kann in gdb nicht debugged werden, also kann jemand einen Debugger vorschlagen, um den Code Schritt für Schritt zu analysieren?

PS: mein Code hat keine Haupt, versuchte ich einen anderen Code mit Haupt mit Pufferüberlauf und es funktionierte, aber hier, wenn ich Main mit #include <stdio.h> eingefügt, gibt es mir Fehler, die es nicht finden kann, stdio. h. Ich habe g ++ installiert, aber ich kann mein Betriebssystem nicht aktualisieren/aktualisieren, da ich die gcc-Version nicht ändern kann.

+0

Bitte lesen Sie [Unter welchen Umständen kann ich hinzufügen, „dringend“ oder andere ähnliche Ausdrücke auf meine Frage, um schneller Antworten zu erhalten? ] (// meta.stackoverflow.com/q/326569) - Die Zusammenfassung ist, dass dies kein idealer Weg ist, um Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

Antwort

0

Sie können die Rücksendeadresse hier nicht ersetzen. kmalloc reserviert keinen Speicherplatz direkt auf dem Stack, daher können Sie die Rückgabeadresse nicht überschreiben. Hier gibt es einen Artikel zeigt, wie eine ähnliche Situation zu nutzen: Phrack

Also you CAN debug a kernel module