Почему это не переполнение правильно?

Я пытаюсь над следующей функцией:

void function(int param){
    char overflow[32];
    gets(overflow);
}

Я хотел бы получить контроль над целочисленным параметром. Это платформа x86.

Это то, что я даю в качестве строки для переполнения:

python -c "print '\x41'*33 + '\x41'*4 + '\x41'*4 + '\xFF\xFF\xFF\xFF'"

Это мои предположения, пожалуйста, исправьте их:

  • 33 байта выделены для строки (32 символа плюс нулевой байт)
  • 4 байта для адреса последнего EBP
  • 4 байта для обратного адреса
  • 4 байта для целочисленного параметра (где я хочу, чтобы \xFF появился)

Тем не менее, это не работает. Что мне не хватает?

Полный код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
    char overflowme[32];
    printf("overflow me : ");
    gets(overflowme);   // smash me!
    if(key == 0xcafebabe){
        system("/bin/sh");
    }
    else{
        printf("Nah..\n");
    }
}
int main(int argc, char* argv[]){
    func(0xdeadbeef);
    return 0;
}

0 ответов

Другие вопросы по тегам