domanda fondamentale sulla riscrittura RIP nel payload di exploit quando contiene Null byte (W64)

0

Ho usato un semplice programma per testare e imparare gli overflow basati sullo stack questo è il mio programma:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
    char buffer[256];
    if(argc !=2)
        exit(0);
    printf("%p\n",buffer);
    strcpy(buffer,argv[1]);
    printf("%s\n",buffer);
    return 0x00;
}

e con alcuni calcoli ho scoperto la lunghezza e l'ordine del mio carico utile:

264 * 'A' + RIP (6bytes) + Shellcode

Conoscenza:

  1. RIP non può essere più grande di "0x00007fffffffffff"
  2. Il valore previsto per RIP è "0x61FD50"
  3. Il payload non può contenere "0x00"

Quindi se il mio shellcode è qualcosa come 200 * 'C' e uso sotto payload per l'argomento della mia linea di comando del programma, sarà come:

264 * 'A' + "\x61\xFD\x50"[::-1]+200 * 'C'

ma quando guardo il debugger RIP equivale a "4015db". So che questo accade perché il payload ha 3 byte per RIP ma RIP ha bisogno di 8 byte da sovrascrivere, quindi userà i miei 3 byte ("\ x61 \ xFD \ x50") più 5 byte di "C" e diventerà più grande di "0x00007fffffffffff". Come posso costringerlo a prendere solo 3 byte qualcosa come:

"\x00\x00\x00\x00\x00\x61\xFD\x50"[::-1]

nel mio carico utile? Sto usando python per scrivere il mio payload e subprocess.call ("bof.exe" + payload) per eseguirlo. Os è Windows 10 (x64) P.S: Sto usando MingW64 e questo comando per compilare i miei codici c ++:

g++ -Wall -fexceptions -fno-stack-protector bof.cpp -o bof.exe

Grazie in anticipo

    
posta Masoumi.Saeed 16.06.2017 - 17:44
fonte

0 risposte

Leggi altre domande sui tag