write-ups/pwnable.kr

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