#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;
}
아직도 너무 수련이 부족하다...
gdb로 본 func 함수 내용.
키값이랑 입력 버퍼 시작 주소 간의 차이는 52byte이고
노란색 순서를 보면 버퍼를 덮고(gets), 키값이랑 검사를 하고, 쉘이 열리고(system), 이후에 canary 체크(chk_fail)를 한다.
즉 쉘이 먼저 열리기 때문에 canary를 무시해도 상관이 없는데, 이걸 생각을 못해서 한참 삽질했다.
그리고 쉘을 따도, file descriptor가 끊기면서 추가적인 데이터를 주고 받을 수 없기 때문에, ; cat을 추가해줘야 함
'Pwnable.kr' 카테고리의 다른 글
Pwnable.kr [input] (0) | 2019.04.30 |
---|---|
Pwnable.kr [random] (0) | 2019.04.29 |
Pwanble.kr [passcode] (0) | 2019.04.29 |
Pwnable.kr [collision] (0) | 2019.04.24 |
Pwnable.kr [fd] (0) | 2019.04.24 |