pwnable.kr bof write up
2017. 7. 4. 01:11
pwnable.kr bof write up
H3X0R팀 소속 BoB 6기 ch4n3
#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; }
위 소스는 bof 문제의 소스이다. gets() 함수를 사용했기 때문에 bof 취약점이 발생하였다. gets() 함수의 bof 취약점을 이용해서 func() 함수의 인자 key를 오염시킬 수 있다. 이 문제에서는 문제의 바이너리를 직접 제공했기 때문에 굉장히 쉽게 풀었다.
이렇게 바이너리를 구했다. 여기서 func를 디스어셈블리시키고 gdb로 계속 돌리면서 0xdeadbeef 값이 있는 스택을 찾으면 될 것이다. 그리고 bof로 오염시키는 것이다.
이것은 func() 함수를 disassembly 시킨 것이다. 아직까지 경험이 부족해서 그런지, key값과 overflow 변수가 있는 곳을 못찾을 것 같았다. 그래서 나는 직접 스택을 보기로 했다.
0xffffd120 주소를 보면 0xdeadbeef 값이 gets() 함수로 받은 문자열의 널 바이트(\00)에 오염된 것을 볼 수 있다. 따라서 gets()로 받는 overflow값에는 52byte 만큼의 값을 넣고 key 값인 0xdeadbeef를 4byte를 추가적으로 포이즈닝하면 될 것이다. 벌써 취약점을 찾았다니 기분이 굉장히 좋다. 역시 디미고 시험기간의 심야자습이 최고다.
그래서 결론적으로 이렇게 알게 된 스택의 구조로부터 얻은 정보로 exploit을 할 것이다. 냠~
오예~ 쉘을 획득했다. ㄱㅇㄷ 지금 심야자습하는데 write up을 작성하는 거라서 정신이 피폐하다. 어쨌거나 플래그나 보자
우왕 굳~~~
'write-ups > pwnable.kr' 카테고리의 다른 글
pwnable.kr random write up (0) | 2017.07.04 |
---|---|
pwnable.kr passcode write up (0) | 2017.07.04 |
pwnable.kr flag write up (0) | 2017.07.04 |
pwnable.kr col write up (0) | 2017.07.04 |
pwnable.kr fd write up (0) | 2017.07.03 |