728x90
#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;
}
주어진 c코드다. main에서 func로 전달한 인자, overflowme의 값을 바꿔주면 된다.
우리는 입력을 overflowme에 할 수 있고, 비교를 하는건 key이므로 overflowme와 key사이의 거리를 찾으면 된다.
이렇게 gdb로 찾아도 되고
ida로 확인해봐도 된다.
거리는 52바이트이므로 dummy 52byte + 4byte(cafebabe)
daddy, I just pwned a buFFer :)
728x90
'pwnable > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] mistake (0) | 2020.10.03 |
---|---|
[pwnable.kr] lotto (0) | 2020.09.23 |
[pwnable.kr] flag (0) | 2020.09.23 |
[pwnable.kr] collision (0) | 2020.09.22 |
[pwnable.kr] fd (0) | 2020.09.22 |