Почему это не переполнение правильно?
Я пытаюсь над следующей функцией:
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;
}