DongDD's IT

[pwnable.kr] bof 본문

Wargame/pwnable.kr

[pwnable.kr] bof

DongDD 2018. 3. 7. 14:24

[pwnable.kr] bof



Problem




buffer overflow가 가장 일반적인 소프트웨어 취약점이라고 들었는데 이것이 사실이냐 묻고있다.

buffer overflow에 대한 문제일 것 같았다.

이번 문제에서는 ssh로 접속할 수 있는 서버가 주어지지 않았고 nc로 프로그램에 연결할 수 있게 되어있었고 소스 코드 파일과 bof 실행 파일을 다운 받을 수 있게 되어있었다.

먼저 소스 코드를 확인해보았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
}
 
cs


main에서는 func함수를 호출하고 인자로 0xdeadbeef를 넘겨준다.

func함수에서는 overflowme라는 buffer 32 bytes가 선언되어있고 gets를 통해 stdin으로 입력을 받는다.

이 후에 함수 인자로 받은 key가 0xcafebabe인지 확인해 일치한다면 shell을 얻을 수 있게 되어있는 코드였다.



Solution


이번 문제는 간단한 overflow이지만 gdb를 통해 확인해보니 stack dummy가 적용되어 있는 것 같았다.



gdb를 통해 main을 확인해보았다. overflowme buffer가 [ebp-0x2c]라고 표현된 것으로 보아 실제로는 buffer가 32 bytes로 선언되어있지만 0x2c(44 bytes)로 12 bytes의 dummy가 추가적으로 붙은 것으로 볼 수 있다.

실제 값을 넣어 메모리 값을 확인해보았다.

buffer의 시작인 0xffffd5fc부터 0xdeadbeef가 들어있는 key까지의 거리가 (0xffffd630 - 0xffffd5fc)인 52 bytes인 것을 확인할 수 있었다.



즉, func함수의 스택은 위와 같이 되어있다. buffer(32bytes) 위에 stack dummy(12 bytes)가 쌓이고 그 후에 sfp, return address, argv(key)가 쌓여있다.

처음에는 return address를 프로그램 내에 있는 system함수의 시작점으로 해서 payload를 작성했으나 stack smashing detecting이 뜨는 것으로 보아 이 방법은 안되는 것이라고 생각되었다.

그래서 overflow를 일으켜 return address까지 dummy값으로 덮고 key값에 0xcafebabe를 넣어주는 방식으로 시도해보았다.


Payload = dummy(52 bytes, "A"*52) + key(4 bytes, 0xcafebabe)


위의 payload를 stdin으로 넣어주고 nc를 통해 프로그램을 실행시키니 shell을 얻을 수 있었다.

ls를 통해 파일들을 확인해보니 flag라는 파일이 있었고 이 파일을 확인해보니 flag가 적혀있었다.





**************     Answer & Flag     **************



Payload = "A"*52 + "\be\xba\xfe\xca"



Flag : daddy, I just pwned a buFFer :)

'Wargame > pwnable.kr' 카테고리의 다른 글

[pwnable.kr]passcode  (0) 2018.03.28
[pwnable.kr] flag  (0) 2018.03.09
[pwnable.kr] collision  (0) 2018.03.02
[pwnable.kr] fd  (0) 2018.03.01
[pwnable.kr] lotto 문제 풀이  (0) 2017.08.27
Comments